1. SELECT 구문
1.1 SELECT
▼ 아랑고에서는 SQL을 AQL 이라 명명합니다. 사용해본 느낌은 AQL이 더 RDB보다 직관적인 문법이란 생각이 들더군요
- Filter : where 이며 TSQL과 똑같은 방법으로 비교 연산자가 가능
- Sort : 정렬이며 TSQL과 똑같은 방법으로 정렬 가능
- Limit : Mysql에 Limit와 사용법이 같다. Mysql로 같은 방법에 페이징이 가능 (좋은소식)
- Return : select 절 Aliases 된 콜렉션을 사용해 컬럼을 지정하는 방식 또한 TSQL과 같습니다.
FOR cur IN col
FILTER cur.gender == "m" or cur.gender == "f" /* where절 */
SORT cur.age desc, cur.name asc /* order by절 */
Limit 1,10 /* Limit (Top) 절, (몇번째부터, 몇개까지) */
RETURN { /* select 절 */
name:cur.name,
gender:cur.gender,
age:cur.age
FILTER cur.gender == "m" or cur.gender == "f" /* where절 */
SORT cur.age desc, cur.name asc /* order by절 */
Limit 1,10 /* Limit (Top) 절, (몇번째부터, 몇개까지) */
RETURN { /* select 절 */
name:cur.name,
gender:cur.gender,
age:cur.age
}
/* select * AQL 문 JSON 형태 그대로 노출한다.*/
FOR cur IN col
RETURN cur
- select 된 데이터 화면은 아래와 같습니다.
- Json 형식에 데이터와, 테이블 구조의 데이터 두가지 방식으로 볼수 있습니다.
2. INSERT 구문
2.1 인터페이스에 메뉴 구성
- COLLECTIONS 메뉴 : 테이블과 같은 역할을 하는 부분
- QUERIES 메뉴 ; 질의 작성기 부분
- INSERT를 하기 위해 COLLECTIONS 메뉴에 접근
2.2 COLLECTIONS 생성
▼ 컬렉션(테이블)을 작성을 해보겠습니다. name에 원하는 명을 넣고 Type은 document를 설정합니다.
- 그러면 JSON 형태의 데이터를 저장하는 NO-SQL 콜렉션이 create 됩니다.
▼ 잠깐 데이터를 생성해보자 컬렉션 상세 페이지에 오른쪽 위에 (+)를 누르면 _key를 입력하는 창이 나옵니다.
- 해당 키는 자동으로 DB에서 고유한 PK를 생성해주지만 임의적으로 생성할수 있다. 숫자+스트링 조합도 가능합니다.
- 논클러스터 INDEX 이기도 합니다.
- 데이터는 이처럼 빈값이더라도 키만 있으면 존재하는 특징이 있습니다. (NO-SQL은 역시)
2.3 INSERT
▼ QUERIES 창을 열어 아래 INSERT 구문 입력 예제를 입력해보자
- JSON처럼 키와 값으로 입력하는 특징이 보이네요.
/* 여러개의 INSERT Query AQL */
FOR cur IN [ /* "cur"은 RDB에 ALIAS(as)와 비슷한 역할을 한다. 추후에 inner join 등에 쓰일때 다시 알아보자 */
]
INSERT cur INTO col
/* 한개의 data INSERT AQL*/
INSERT { name: "GV", gender: "m", age:13 }
FOR cur IN [ /* "cur"은 RDB에 ALIAS(as)와 비슷한 역할을 한다. 추후에 inner join 등에 쓰일때 다시 알아보자 */
{name: "GV", gender: "m", age: 13}, /* colunm : data 식으로 키와 쌍으로 이루어진 Json 그대로 입력 */
{name: "HIRE",gender: "f" ,age: 15},
{name: "RAEBU",gender: "m" ,age: 19}]
INSERT cur INTO col
/* 한개의 data INSERT AQL*/
INSERT { name: "GV", gender: "m", age:13 }
INTO col
- 컬렉션에서 Col을 확인해보면 해당처럼 Json 형태로 데이터가 입력되어 있습니다..
- 클릭해보면 데이터의 상세화면이 나오고 -, +를 통해 데이터를 편집할 수 있다.
2.4 INSERT SELECT
▼ AQL은 셀렉트 인설트롤 지원합니다. 기존 return 자리에 insert를 넣으면 select insert 문이 됩니다.
- 고유 PK (_key)값도 같이 복사되기 때문에 반복 입력하게 되면 unique constraint violated 오류가 발생합니다.
FOR cur IN col
FILTER ( cur.gender == "m" or cur.age > 10 ) and /* TSQL과 같은 비교 연산자 가능 */
INSERT cur INTO backup /* col as cur에 데이터를 backup에 넣는다. */
FILTER ( cur.gender == "m" or cur.age > 10 ) and /* TSQL과 같은 비교 연산자 가능 */
cur.name like "G%" /* LIKE 방식으로 사용 */
/* RETURN cur 리턴 자리에 insert into를 쓰면 insert select */INSERT cur INTO backup /* col as cur에 데이터를 backup에 넣는다. */
2.5 변수를 활용한 루프 INSERT
▼ For문으로 반복하여 insert 하는 방법을 기술 했습니다.
- 기존 TSQL에서 쓰던 함수인 FOR을 사용 가능하네요
- concat : 문자열을 합치는 함수다.
- 삼항연산이 가능하다.
- CEIL : 올림 함수 소수점 상관없이 무조건 올림
- RAND() : 랜덤함수로 숫자를 무작위로 추출한다.
FOR i IN 1..1000 /* 반복문 루프될 숫자만 정해주면 된다.*/
INSERT {
name: CONCAT("name_", i), /* CONCAT 문자열 연결 */
INSERT {
name: CONCAT("name_", i), /* CONCAT 문자열 연결 */
gender: (i % 2 == 0 ? "f" : "m"), /* 삼항연산 가능 */
age : CEIL(RAND() * 30) /* 랜덤으로 1~30까지 */
} INTO col
3. INNER JOIN
1-1. Inner join 문
- TSQL과 마찬가지로 테이블에 관계 있는 컬럼과 컬럼으로 컬렉션과 inner join 할 수 있습니다.
- 간단하고 익숙한 방법으로 noSQL 에 inner join을 제공됩니다.
FOR cur1 IN argdb
FOR cur2 IN argdb_addr /* join할 테이블*/
FILTER cur1.name == cur2.name /* 여기서 On 을 하면 된다. */
SORT cur1.age desc /* 여기서 부터 기존과 똑같은 select 방법으로 */
RETURN {
name:cur1.name
,age:cur1.age
,age:cur1.age
,favorites:cur1.favorites
,addr:cur2.addr /* 명명자로 구분해서 TSQL이랑 상당히 흡사 */
}
마무리
욕심이 과했는지 이번 강의에 많은걸 담아 냈습니다. 매력 넘치는 AQL문에 빠져보시죠
'IT_Developers > NoSQL' 카테고리의 다른 글
ArangoDB | PHP | 강의 | 06 - PHP에서 arangoDB를 사용하기 레퍼런스 (0) | 2017.07.01 |
---|---|
ArangoDB | 강의 | 05 - INDEX (0) | 2017.07.01 |
ArangoDB | 강의 | 04 - UPDATE / DELETE(REMOVE) (0) | 2017.07.01 |
ArangoDB | 강의 | 02 - 유저 및 DB 생성 / WEBInterface 접속&사용법 (0) | 2017.07.01 |
ArangoDB | 강의 | 01 - DB 설치(windows) (1) | 2017.07.01 |
댓글