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
위 두 개의 쿼리는 동일한 결과를 가져 옵니다.
|
|