티스토리 뷰

프로그래밍/데이터베이스

SELECT 쿼리

안싱미 2016. 2. 15. 15:01

데이터베이스는 CRUD ( create / read / update / delete)를 할 수 있는 기능을 지원한다. 이 중에서 R에 해당하는 것이 바로 Select이다.

SELECT 하나 이상의 테이블에서 여러 데이터를 가져옴.

SELECT [COLUMN], [COLUMN], [...]
FROM   [TABLE]


예시1.

1
2
3
SELECT  *
FROM    EMPLOYEES
;
cs

예시2.
1
2
3
4
5
-- EMPLOYEES 테이블에서 LAST_NAME과 SALARY를 가져온다.
SELECT  LAST_NAME
        , SALARY
FROM    EMPLOYEES
;
cs

예시3.
1
2
3
4
5
6
-- EMPLOYEES 테이블에서 사번과 LAST_NAME과 HIRE_DATE를 가져온다.
SELECT  EMPLOYEE_ID
        , LAST_NAME
        , HIRE_DATE
FROM    EMPLOYEES
;
cs

결과

예시4. 
1
2
3
4
5
6
-- 사원들의 LAST_NAME, 연봉 및 커미션을 조회
SELECT  LAST_NAME
        , SALARY
        , COMMISSION_PCT
FROM    EMPLOYEES
;
cs

예시5.
1
2
3
4
5
6
7
8
-- 사원들의 EMPLOYEE_ID, FIRST_NAME, LAST_NAME, 연봉 및 커미션을 조회
SELECT  EMPLOYEE_ID
        , FIRST_NAME
        , LAST_NAME
        , SALARY
        , COMMISSION_PCT
FROM    EMPLOYEES
;
cs

예시6.
1
2
3
4
5
6
--  DEPARTMENTS 테이블에서 부서번호, 부서명을 조회
SELECT  DEPARTMENT_ID
        , DEPARTMENT_NAME
FROM    DEPARTMENTS
;
 
cs



WHERE 조건에 맞는 데이터만 가져옴.

SELECT [COLUMN], [COLUMN], [...]

FROM   [TABLE]

WHERE  [CONDITIONS]


예시 1.

1
2
3
4
5
6
-- EMPLOYEES 테이블에서 연봉이 12000 이상되는 직원들의 LAST_NAME 과 SALARY를 가져온다.
SELECT  LAST_NAME
        , SALARY
FROM    EMPLOYEES
WHERE   SALARY >= 12000
;
cs

결과


예시2.

1
2
3
4
5
6
7
-- 사원번호 176 인 사람의 LAST_NAME, DEPARTMENT_ID, EMPLOYEE_ID를 조회한다.
SELECT  LAST_NAME
        , DEPARTMENT_ID
        , EMPLOYEE_ID
FROM    EMPLOYEES
WHERE   EMPLOYEE_ID = 176
;
cs


예시3.
1
2
3
4
5
6
7
-- 부서 번호가 30 미만인 부서에서 일하는 사원들의 사번과 성과 이름을 조회한다.
SELECT  EMPLOYEE_ID
        , LAST_NAME
        , FIRST_NAME
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID < 30
;
cs
결과


예시4.

1
2
3
4
5
6
7
8
-- 부서 번호가 30 미만인 부서이고 사번이 200인 사람의 사번과 성과 이름을 조회한다.
SELECT  EMPLOYEE_ID
        , LAST_NAME
        , FIRST_NAME
        , DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID < 30 AND EMPLOYEE_ID = 200
;
cs
결과


예시5.

1
2
3
4
5
6
7
8
-- 20번 및 50번 부서에서 근무하는 모든 사원들의 LAST_NAME 및 부서 번호를 조회한다.
SELECT  LAST_NAME
        , DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID = 20
OR      DEPARTMENT_ID = 50
;
 
cs

1
2
3
4
5
6
-- 20번 및 50번 부서에서 근무하는 모든 사원들의 LAST_NAME 및 부서 번호를 조회한다.
SELECT  LAST_NAME
        , DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IN ( 2050 )
;
cs

두 쿼리문 모두 결과는 같다.

예시 6.
1
2
3
4
5
6
-- 20번도 아니고 50번도 아닌 부서에서 근무하는 모든 사원들의 LAST_NAME 및 부서 번호를 조회한다.
SELECT  LAST_NAME
        , DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID NOT IN ( 2050 )
;
cs


예시 7. IS NULL 과 '' 는 다르다. 그리고 개발자들이 실수하기 때문에 6번 문장을 반드시 써줘야한다.

1
2
3
4
5
6
7
-- 매니저가 없는 사람들의 LAST_NAME 및 JOB_ID 를 조회한다.
SELECT  LAST_NAME
        , JOB_ID
FROM    EMPLOYEES
WHERE   MANAGER_ID IS NULL
OR      MANAGER_ID = ''
;
cs


예시 8. 

1
2
3
4
5
6
7
8
9
10
11
-- 커미션을 버는 모든 사원들의 LAST_ANME, 연봉 및 커미션을 조회한다.
-- 연봉 역순, 커미션 역순차로 정렬한다.
SELECT  LAST_NAME
        , SALARY
        , COMMISSION_PCT
FROM    EMPLOYEES
WHERE   COMMISSION_PCT IS NOT NULL
OR      COMMISSION_PCT != ''
ORDER   BY SALARY DESC
        ,COMMISSION_PCT DESC
;
cs



ORDER BY 오름차순, 내림차순 정렬 가능함.

SELECT [COLUMN], [COLUMN], [...]

FROM   [TABLE]

WHERE  [CONDITIONS]

ORDER BY [COLUMN], [ORDER TYPE]


예시1.

1
2
3
4
5
6
7
SELECT  LAST_NAME
        , SALARY
FROM    EMPLOYEES
WHERE   SALARY >= 12000
ORDER   BY SALARY ASC
        , LAST_NAME DESC
;
cs
결과

예시2.

1
2
3
4
5
6
7
-- 20번 및 50번 부서에서 근무하는 모든 사원들의 LAST_NAME 및 부서 번호를 알파벳순으로 조회한다.
SELECT  LAST_NAME
        , DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IN ( 2050 )
ORDER   BY LAST_NAME ASC
;
cs

예시3. 
1
2
3
4
5
6
7
8
9
10
-- 1998/02/20 일부터 1998/05/01 사이에 고용된 사원들의 LAST_NAME 사번, 고용일자를 조회한다.
-- 고용일자 순으로 정렬한다.
SELECT  LAST_NAME
        , EMPLOYEE_ID
        , HIRE_DATE
FROM    EMPLOYEES
WHERE   HIRE_DATE >= '02/02/20'
AND     HIRE_DATE <= '05/05/01'
ORDER   BY HIRE_DATE ASC
;
cs

예시4.
1
2
3
4
5
6
7
8
9
-- 20 번 및 50 번 부서에 근무하며, 연봉이 5000 ~ 12,000 사이인 사원들의 LAST_NAME 및 연봉을 조회한다.
SELECT  LAST_NAME
        , SALARY
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IN ( 20 , 50 ) 
AND     SALARY >= 5000
AND     SALARY <= 12000
;
 
cs


DISTINCT 중복 제거
한 ROW가 중복이 된다면, 중복된 ROW들을 모두 없애고 조회한다.

SELECT DISTINCT [COLUMN], [COLUMN], [...]

FROM   [TABLE]

WHERE  [CONDITIONS]


예시1.
1
2
3
4
5
6
7
SELECT  DISTINCT MANAGER_ID
        , DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   MANAGER_ID IS NOT NULL
ORDER   BY MANAGER_ID
        , DEPARTMENT_ID
;
cs

- 날짜에도 비교연산자를 사용할 수 있다.
- ASC는 생략이 가능하다.(자동으로 오름차순)
- BETWEEN은 실무에서는 잘 사용하지 않는다.
- null 체크할 때는 반드시 IS NULL 과 BLANK를 같이 체크해주어야 한다.



'프로그래밍 > 데이터베이스' 카테고리의 다른 글

서브 쿼리  (0) 2016.02.16
GROUP BY 쿼리  (0) 2016.02.16
Oracle 설치하기  (0) 2016.02.15
데이터베이스 모델링  (0) 2016.02.15
데이터베이스란?  (0) 2016.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함