SELECT문은 데이터베이스로부터 저장되어 있는 데이터를 검색하는데 사용합니다.
[Syntax]
· DISTINCT : 중복되는 행을 제거하는 옵션입니다. · * : 테이블의 모든 column을 출력 합니다. · alias : 해당 column에 대해서 다른 이름을 부여할 때 사용합니다. · table_name : 질의 대상 테이블명 · WHERE : 조건을 만족하는 행들만 검색 · condition : column, 표현식, 상수 및 비교 연산자 · ORDER BY : 질의 결과 정렬을 위한 옵션(ASC:오름차순(Default),DESC내림차순)
☞ SQL문의 작성 방법
- SQL 문장은 대소문자를 구별하지 않습니다.
- SQL 문장은 한 줄 또는 여러 줄에 입력될 수 있습니다.
- 일반적으로 키워드는 대문자로 입력합니다. 다른 모든 단어, 즉 테이블 이름, 열 이름은 소문자로 입력합니다.(권장)
- 가장 최근의 명령어가 1개가 SQL buffer에 저장됩니다.
- SQL문 마지막 절의 끝에 ";"를 기술하여 명령의 끝을 표시 합니다. |
SQL>SELECT empno 사번, ename 성명 FROM emp WHERE deptno = 10
사번 성명 ---------- --------------- 7782 CLARK 7839 KING 7934 MILLER
empno와 ename 은 각각 사번과 성명이라는 컬럼 별칭(alias)으로 만들어 출력했습니다. alias를 사용할 때 as라는 키워드를 사용해도 되고, 생략할수도 있습니다. |
▒ WHERE절에 사용될 수 있는 SQL 연산자
연산자 |
설 명 |
BETWEEN a AND b |
a와b사이의 데이터를 출력 합니다.(a, b값 포함) |
IN (list) |
list의 값 중 어느 하나와 일치하는 데이터를 출력 합니다. |
LIKE |
문자 형태로 일치하는 데이터를 출력 합니다.(%, _사용) |
IS NULL |
NULL값을 가진 데이터를 출력 합니다. |
NOT BETWEEN a AND b |
a와b사이에 있지않은 데이터를 출력 합니다.(a, b값 포함하지 않음) |
NOT IN (list) |
list의 값과 일치하지 않는 데이터를 출력 합니다. |
NOT LIKE |
문자 형태와 일치하지 않는 데이터를 출력 합니다. |
IS NOT NULL |
NULL값을 갖지 않는 데이터를 출력 합니다. |
▣ IN, NOT IN 연산자
|
IN 연산자 SQL> SELECT empno, ename FROM emp WHERE empno IN (7900, 7934) ; --> 사번이 7900, 7934번인 사원의 사번과 성명 출력
EMPNO ENAME --------- ------------- 7934 MILLER 7900 JAMES
2 개의 행이 선택되었습니다. |
NOT IN 연산자 SQL> SELECT empno, ename FROM emp WHERE empno NOT IN (7900, 7934); --> 사번이 7900, 7934번이 아닌 사원의 사번과 성명 출력
EMPNO ENAME -------- -------------- 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE ............................ 13 개의 행이 선택되었습니다. |
BETWEEN 연산자(AND를 이용해 두 조건을 결합한 검색과 같은 결과값을 보여줍니다.)
|
BETWEEN 연산자 SQL> SELECT empno, ename FROM emp WHERE sal BETWEEN 3000 AND 5000 ; --> 급여가 3000에서 5000사이인 사원만 보여줍니다.
EMPNO ENAME ---------- ------ 7788 SCOTT 7839 KING 7902 FORD 3 개의 행이 선택되었습니다. |
LIKE 연산자
- 검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE연산자를 사용 합니다. - % : 여러개의 문자열을 나타내는 와일드 카드 - _ : 단 하나의 문자를 나타내는 와일드 카드 - ESCAPE : 와일드 카드 문자를 일반문자 처럼 사용하고 싶은 경우에 사용합니다. ☞ WHERE name LIKE '%a\_y%' ESCAPE '\' ;
|
구 분 |
설 명 |
LIKE 'A%' |
컬럼이 'A'로 시작하는 데이터들만 검색됩니다. |
LIKE '%A' |
컬럼이 'A'로 끝나는 테이터들만 검색됩니다. |
LIKE '%KIM%' |
컬럼에 'KIM' 문자가 있는 데이터 들만 검색됩니다. |
LIKE '%K%I%' |
컬럼에 'K' 문자와 'I'문자가 있는 데이터 들만 검색됩니다. |
LIKE '_A%' |
컬럼에 'A'문자가 두 번째 위치한 데이터 들만 검색됩니다. |
- LIKE 연산자는 대소문자를 구분합니다. - Upper()함수를 이용해 대소문자 구분없이 출력할수 있습니다.
|
SQL>SELECT empno, ename FROM emp WHERE UPPER(ename) like '%K%';
EMPNO ENAME ------- ----------- 7698 BLAKE 7782 CLARK 7839 KING
'K' 문자가 들어있는 사원 정보를 보여줍니다. upper()라는 함수는 k가 들어가 있는 것도 대문자 'K'로 인식하기 때문에 데이터들을 보여줍니다.
※ '_'를 이용한 LIKE검색
SQL>SELECT empno, ename FROM emp WHERE UPPER(ename) like '_I%'
EMPNO ENAME ------- ---------- 7839 KING 7934 MILLER
※ '_'는 한 문자를 나타냅니다. 'I' 문자가 두 번째 문자에 위치한 사원들의 정보를 보여줍니다.
|
ORDER BY (ASC[오름차순], DESC[내림차순]) ORDER BY 절은 데이터의 정렬을 위해 사용합니다.
|
SQL> SELECT empno, ename FROM emp WHERE deptno = 30 ORDER BY ename ASC;
EMPNO ENAME -------- --------- 7499 ALLEN 7698 BLAKE 7900 JAMES 7654 MARTIN 7844 TURNER 7521 WARD
SQL> SELECT empno, ename FROM emp WHERE deptno = 30 ORDER BY 2
위 두 개의 쿼리는 동일한 결과를 가져 옵니다. | |