[CUBRID] - 기본적인 SQL 0 3 4,893

by 문학청년 [CUBRID 노하우/팁/자료] 큐브리드 CUBRID SQL [2009.11.13 18:14:18]


본 문서는 CUBRID(큐브리드) DBMS의 기본적인 SQL 문법을 예제와 함께 설명합니다.
 

데이터 조회

기본적인 SQL 질의

SELECT문의 형식은 아래 문법과 같이 여섯 개의 절로 이루어진다. 이들 중에서 SELECT절과 FROM절만 필수적인 절이고, 나머지는 옵션이다. 이들의 순서를 바꿔서는 안 된다. SELECT-FROM-WHERE절로 이루어진 기본적인 SELECT문을 SELECT-FROM-WHERE 블록이라고 부른다. 아래 구문에서 ‘[]’에 들어 있는 것은 선택 사항을 뜻하고, ‘|’ 기회는 ‘또는’을 의미한다. SELECT문의 결과는 테이블의 형식으로 나타난다. 자세한 내용은 예제를 통해 설명한다.

SELECT          [ DISTINCT ]    컬럼(들) 
FROM           테이블(들) 
WHERE        조건(중첩 질의) ] 
GROUP BY     컬럼(들) ] 
HAVING       조건 ] 
ORDER BY 컬럼(들) [ ASC | DESC ] ] 


단순 데이터 조회

테이블 내의 모든 테이터를 조회하려면 WHERE절 없이 SELECT-FROM절만을 사용한다. [예제 1]은 SELECT절에 모든 컬럼을 나열한 예를 보여준다. 모든 컬럼을 일일이 기재하기가 번거로우면 [예제 1]처럼 ‘*’를 와일드카드 문자로 이용할 수 있다. 그러나 ‘c’로 시작하는 컬럼들을 조회하기 위해 ‘P*’와 같은 형식을 SELECT절에 사용할 수는 없다. 원하는 컬럼만 선택해서 조회하려면 [예제 2]와 같이 필요한 컬럼만 SELECT절에 명시할 수 있다

예제 1

√ 문제

 CODE 테이블의 모든 테이터를 조회하라.


√ SQL문

 
SELECT   S_NAME, F_NAME 
FROM    CODE 
혹은 
SELECT  *  FROM CODE 



√ 결과

 
NO s_name f_name
1 X Mixed
2 W Woman
3 M Man
4 B Bronze
5 S Silver
6 G Gold



√ 설명

 와일드카드 문자 ‘*’를 사용하면 결과 테이블의 컬럼들은 테이블을 생성할 때 명시한 순서대로 나타난다. 큐브리드에서는 와일드카드 문자를 이용하면 컬럼의 이름이 소문자로 나타난다.

예제 2

√ 문제

 CODE 테이블에서 s_name 컬럼만 조회하라.


√ SQL문

 
SELECT S_NAME FROM CODE 



√ 결과

 
NO s_name
1 X
2 W
3 M
4 B
5 S
6 G



√ 설명

 테이블의 컬럼 중 일부만 선택할 때에는 SELECT절에 컬럼 이름을 열거한다. 이 때 결과 테이블의 컬럼들은 SELECT 절에 열거한 순서대로 나타난다.


DISTINCT를 이용한 중복 제거

결과 테이블에 중복된 행이 나타나지 않게 하려면 [예제 3]과 같이 DISTINCT를 사용한다. 결과 테이블에 행들이 많기 때문에 전부 나타나지는 않았다. DISTINCT를 사용하지 않은 [결과 1] 을 보면 중복된 데이터가 보인다. DISTINCT를 사용한 [결과 2]는 NATION_CODE와 ADDRESS가 같은 행이 한 번씩만 나타난다. [SQL문 1]과 [SQL문 2]의 결과 테이블뿐만 아니라 행의 순서도 다르다. 질의에서 행의 순서를 별도로 지정하지 않으면 DMBS가 자동으로 순서를 지정하여 결과 테이블을 생성한다.

예제 3

√ 문제

 CODE 테이블에서 s_name 컬럼만 조회하라.


√ SQL문 1

 
SELECT   NATION_CODE, ADDRESS 
FROM    STADIUM 
WHERE   NATION_CODE='KOR' 


√ SQL문 2

 
SELECT   DISTINCT NATION_CODE, ADDRESS 
FROM    STADIUM 
WHERE   NATION_CODE='KOR' 



√ 결과 1

 
NO NATION_CODE ADDRESS
17 KOR Seoul,Korea
18 KOR Seoul,Korea
19 KOR Seoul,Korea
20 KOR Suwon,Gyeonggi-do,Korea
21 KOR Busan,Korea
22 KOR Siheung,Gyeonggi-do,Korea
23 KOR Seoul,Korea
24 KOR Seoul,Korea
25 KOR Seoul,Korea
26 KOR Suwon,Gyeonggi-do,Korea


√ 결과 2

 
NO NATION_CODE ADDRESS
1 KOR Busan,Korea
2 KOR Daegu,Korea
3 KOR Daejeon,Korea
4 KOR Goyang,Gyeonggi-do,Korea
5 KOR Gwacheon,Gyeonggi-do,Korea
6 KOR Gwangju,Korea
7 KOR Hanam,Gyeonggi-do,Korea
8 KOR Seongnam,Gyeonggi-do,Korea
9 KOR Seoul,Korea
10 KOR Siheung,Gyeonggi-do,Korea



√ 설명

 결과 테이블에서 중복된 레코드들이 한 번씩만 나타나게 하려면 DISTINCT 키워드를 사용한다.


컬럼에 별칭을 사용한 질의

일반적으로 SQL문을 수행할 때 컬럼 이름이 너무 길면 번거롭기 때문에, 테이블을 설계할 때 컬럼 이름을 약어로 줄여서 표기하는 경우가 많다. (예, DEPARTMENT_NUMBER -> DEPTNO). 조회할 때는 이해하기 좋게 하기 위하여 컬럼 이름을 다른 이름(별칭)으로 바꾸어서 출력할 수도 있다. 별칭은 영문 및 한글 모두 가능하며 띄여쓰기가 필요할 때에는 큰 따옴표(“)로 묶어주어야 한다. 컬럼 이름에 별칭을 지정할 때에는 키워드 AS를 사용하며, AS는 생략할 수 있다.

예제 4

√ 문제
CODE 테이블에서 s_name와 f_name 컬럼을 조회하되 결과 테이블의 컬럼 이름을 각각 “약자”, “용어”로 출력하라.
 

√ SQL문

 
SELECT   s_name as “약자”, f_name as “용어” 
FROM    CODE 
혹은 
SELECT   s_name “약자”, f_name “용어” 
FROM    CODE 



√ 결과

 
NO 약자 용어
1 X Mixed
2 W Woman
3 M Man
4 B Bronze
5 S Silver
6 G Gold



√ 설명

 결과 테이블에서 중복된 레코드들이 한 번씩만 나타나게 하려면 DISTINCT 키워드를 사용한다.


WHERE절을 포함한 질의

WHERE절은 데이터를 조회할 때 조회 조건에 해당한다. FROM절에 열거한 테이블에 속하는 컬럼과 상수, 연산자를 사용해서 표현한다. 상수 중 문자형과 날짜형은 작은 따옴표(‘)로 묶어서 사용해야 한다. 숫자형은 작은따옴표 없이 사용해야 한다. WEHRE절에서 사용할 수 있는 표현식은 아래와 같은 사항들을 포함한다.

∙ 비교 연산자 =, <>, <, <=, >=, IS NULL, IS NOT NULL, BETWEEN… AND
∙ 부울 연산자 AND, OR, NOT
∙ IN, NOT IN, ANY(SOME), ALL

비교 연산자와 부울 연산자 등이 결합된 복잡한 표현식 형태도 가능하다.

예제 5

√ 문제

 STADIUM 테이블에서 ADDRESS가 ‘Seoul, Korea’인 NAME과 CODE를 조회하라.


√ SQL문

 
SELECT   NAME, CODE 
FROM    STADIUM 
WHERE   ADDRESS=’KOR’ 



√ 결과

 
NO NAME CODE
1 Modern_Pentathlon_Stadium 30073
2 Royal_Bowling_Center 30072
3 Changchung_Gymnasium 30071
4 Saemaul_Sports_Hall 30070
5 Dongdaemun_Stadium 30069
6 Hwarang_Archery_Field 30066
7 Olympic_Swimming_Pool 30065
8 Olympic_Tennis_Courts 30064
9 Olympic_Gymnastics_Hall 30063
10 Olympic_Weightlifting_Gymnasium 30062



 

예제 6

√ 문제

 PARTICIPANT 테이블에서 GOLD(금메달)이 30개 이상인 NATION_CODE와 GOLD를 조회하라.


√ SQL문

 
SELECT   NATION_CODE, GOLD 
FROM    PARTICIPANT 
WHERE   GOLD > 30 



√ 결과

 
NO NATION_CODE GOLD
1 CHN 32
2 USA 36
3 RUS 32
4 USA 37
5 USA 44
6 GER 33
7 USA 37
8 EUN 45
9 USA 36
10 GDR 37



√ 설명

 숫자 형 상수에는 작은 따옴표(‘)를 사용하지 않는다.

예제 7

√ 문제

 PARTICIPANT 테이블에서 GOLD(금메달)이 30개 이상이고 국가 코드가 USA인 HOST_YEAR, NATION_CODE, GOLD을 조회하라..


√ SQL문

 
SELECT   HOST_YEAR, NATION_CODE, GOLD 
FROM    PARTICIPANT 
WHERE   GOLD > 30 AND NATION_CODE=’USA’ 



√ 결과

 
NO HOST_YEAR NATION_CODE GOLD
1 2004 USA 36
2 2000 USA 37
3 1996 USA 44
4 1992 USA 37
5 1988 USA 36



√ 설명

 부울 연산자를 이용해 WHERE절에 나타나는 표현식을 복잡한 형태로 나타낼 수 있다. 두 조건이 모두 참일 때 참이 되는 AND 연산자, 두 조건 중에 하나라도 참이면 참인 OR 연산자, 조건의 반대 결과를 돌려주는 NOT 연산자를 적절히 사용할 수 있다.

예제 8

√ 문제

 PARTICIPANT 테이블에서 GOLD(금메달)이 20개 이상이고, 30개 이하인 NATION_CODE와 GOLD를 조회하라.


√ SQL문

 
SELECT   NATION_CODE, GOLD 
FROM    PARTICIPANT 
WHERE   GOLD BETWEEN 20 AND 30 



√ 결과

 
NO NATION_CODE GOLD
1 RUS 27
2 CHN 28
3 GER 20
4 RUS 26



√ 설명

 BETWEEN … AND 형식의 표현식은 >= … AND … <= 형식으로 표현할 수 있다.


널 값

널 값은 3장에서 설명하였듯이 값이 ‘알려지지 않음’, ‘적용할 수 없음’을 나타낸다. [예제 5.1]과 [예제 3]의 결과 테이블에 나타나는 NULL은 값이 ‘NULL’인 문자열이나 값이 ‘ ‘인 빈 문자열과는 의미가 다르다. (빈 문자열을 NULL과 같은 의미로 사용하는 DBMS도 있다.) WHERE절에서 NULL 값을 비교하기 위해서는 ‘=’ 연산자 대신에 ‘IS’를 사용해야 한다. 널 값은 연산자나 함수를 거쳐도 역시 널 값으로 나타난다. 알려지지 않은 값에 연산을 수행한 결과는 알려지지 않은 값이기 때문이다. 연산자와 함수는 5.2절을 참조하기 바란다.

예제 9

√ 문제

 MASCOT(마스코트)가 지정되지 않은 HOST_YEAR(개최 연도)와 HOST_NATION(국가)를 조회하라.


√ SQL문 1

 
SELECT   HOST_YEAR, HOST_NATION, MASCOT 
FROM    OLYMPIC 
WHERE   MASCOT IS NULL 


√ SQL문 2

 
SELECT   HOST_YEAR, HOST_NATION, MASCOT 
FROM    OLYMPIC 
WHERE   MASCOT = NULL 



√ 결과 1

 
NO HOST_YEAR HOST_NATION MASCOT
1 1968 Mexico NULL
2 1964 Japan NULL
3 1960 Italy NULL
4 1956 Australia NULL
5 1952 Finland NULL
6 1948 England NULL
7 1936 Germany NULL
8 1932 USA NULL
9 1928 Netherlands NULL
10 1924 France NULL


√ 결과 2

 
NO HOST_YEAR HOST_NATION MASCOT
 null  null  null  null



√ 설명

 큐브리드에서는 NULL값을 가진 행은 ‘=’ 연산자로 검사할 수 없다.


ROWNUM 컬럼

SELECT문을 이용한 질의 조회 결과는 결과 테이블로 나타난다. 질의 결과 테이블은 데이터베이스에 저장되어 있는 실제 테이블에서 값을 추출한 메모리상의 임시 테이블로서 실제 테이블과는 다르다. 예를 들어, SELECT * FROM NATION문으로 모든 데이터를 조회하면 데이터베이스에 있는 DEPARTMENT 테이블로부터 값을 메모리로 복사한 임시 테이블을 출력 결과로 보여준다. 이러한 결과 테이블에는 자동으로 행들의 순서가 매겨지는데 그 순서를 ROWNUM 컬럼이 가지고 있다. (ROWNUM은 큐브리드의 내장 함수지만 뒤에 괄호 ()가 붙지 않기 때문에 컬럼으로 부르기로 한다.) ROWNUM 컬럼은 출력되는 행들이 너무 많이 나타나지 않게 하는 데에도 유용하다. ROWNUM 컬럼 대신에 INST_NUM() 함수를 사용할 수도 있다.

예제 10

√ 문제

 NATION 테이블에서 NAME(국가)와 CAPITAL(수도)를 조회하되 5개만 보이게 하라.


√ SQL문

 
SELECT   NAME, CAPITAL 
FROM    NATION 
WHERE   ROWNUM <= 5 
혹은 
SELECT   NAME, CAPITAL 
FROM    NATION 
WHERE   ROWNUM BETWEEN 1 AND 5 
혹은 
SELECT   NAME, CAPITAL 
FROM    NATION 
WHERE   INST_NUM() <= 5 



√ 결과

 
NO NAME CAPITAL
1 Serbia Beograd
2 Kiribati Tarawa
3 Serbia-and-Montenegro Beograd
4 Timor-Leste Dili
5 Zimbabwe Harare



 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입