버글버글
DataBase 수업 기록(10) DQL 본문
▶ DQL(Data Query Languge)
1. 데이터의 질의어
2. 테이블의 데이터를 조회/검색
3. 데이터베이스에 변화가 없으므로 COMMIT 없음
(트랜잭션의 대상이 아님)
4. 형식 |
SELECT 칼럼1, 칼럼2, ... FROM 테이블 [WHERE 조건식] [GROUP BY 그룹화] [HAVING 그룹화_조건식] [ORDER BY 정렬] |
5. 실행 순서 |
⑤ SELECT 칼럼 ① FROM 테이블 ② WHERE 조건식 ③ GROUP BY 그룹화 ④ HAVING 그룹화_조건식 ⑥ ORDER BY 정렬기준 |
▶ 조회하기
SELECT 칼럼명 FROM 테이블명;
1) 테이블에 오너(OWNER)명시
SELECT 칼럼명 FROM SCOTT.테이블명;
2) 칼럼에 테이블 명시
SELECT 테이블명.칼럼명 FROM 테이블명;
3) 테이블에 별명 지정
SELECT 별명.칼럼명 FROM 테이블명 별명;
4) 칼럼에 별명(ALIAS) 지정
SELECT 칼럼 AS 별명 FROM 테이블명;
▶ 테이블의 모든 칼럼 조회하기
- 모든 칼럼 : *
- 중요 : 실무에서 * 사용 금지 (성능문제가 있음)
SELECT * FROM 테이블명;
- 모든 칼럼이 필요하면 모두 명시
예시)
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE;
▶ 중복제거(DISTINCT)
SELECT DISTINCT 칼럼명 FROM 테이블명;
예시)
- 사원 테이블(DEPARTMENT)에서 지역명 조회하기.
단, 동일한 지역은 한 번만 조회하기
SELECT DISTINCT LOCATION
FROM DEPARTMENT; -- 서울, 부산
SELECT DISTINCT DEPT_NAME, LOCATION
FROM DEPARTMENT;
-- 인사부 서울
-- 전략부 부산
▶ 특정 값 조회하기(WHERE)
SELECT 조회할 칼럼명
FROM 테이블명
WHERE 칼럼명 = '조회할 데이터';
예시)
-- 사원 테이블에서 직급이 '과장'인 사원 조회하기
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE POSITION = '과장';
-- 사원 테이블에서 급여가 2000000~5000000인 사원 조회하기
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 2000000
AND SALARY <= 5000000;
/*------------------------------------------------------------------*/
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 2000000
AND SALARY <= 5000000;
* A또는 B인 특정 객체 조회하기 (OR)
-- 사원 테이블에서 소속부서가 1,2인 사원 조회하기
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE DEPT_NO = 1
OR DEPT_NO = 2;
/*------------------------------------------------------------------*/
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE DEPT_NO IN (1, 2);
▶ NULL 유무
1. NULL이다 : IS NULL
2. NULL이 아니다 : IS NOT NULL
예시)
-- 사원 테이블에서 성별이 없는 사원 조회
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE GENDER IS NULL;
▶ 특정 값이 포함된 객체 조회하기
1) 만능문자(WILD CARD)
(1) % : 모든 문자, 글자수 제한 없음
(2) _ : 모든 문자, 한 글자로 제한
2) 예시
(1) 김으로 시작하는 이름 찾기 : 김%
(2) 김으로 끝나는 이름 찾기 : %김
(3) 김을 포함하는 이름 찾기 : %김%
3) 만능문자 연산자
LIKE, NOT LIKE
예시)
-- 사원 테이블에서 김씨 조회
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE NAME LIKE '김%';
*Oracle은 TEXT나 NUMBER 타입이나 스스로 캐스팅 해서 사용된다.
▶ ORDER BY 절
- ASC : 오름차순 정렬, 생략 가능
- DESC : 내림차순 정렬
예시)
-- 사원 테이블에서 사원명의 가나다순으로 조회하기
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
ORDER BY NAME ASC;
* 오름차순 정렬할 때 NULL값은 마지막에 배치, 내림차순 정렬할 때 NULL값은 맨처음에 배치
예시)
-- 사원 테이블에서 소속부서의 오름차순 정렬로 조회하되,
-- 같은 소속부서 내에서는 먼저 고용된순으로 조회하기
-- 1차 정렬기준 : 소속부서
-- 2차 정렬기준 : 고용일자
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
ORDER BY DEPT_NO ASC, HIRE_DATE ASC;
* WHERE절과 ORDER BY절 함께 사용 예시
-- 사원 테이블에서 급여가 5000000 이상인 사원들을 고용된순으로 조회하기
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 5000000
ORDER BY HIRE_DATE;
/* SELECT문 처리순서 */
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE AS HD, SALARY
FROM EMPLOYEE
WHERE SALARY >= 5000000
ORDER BY HD;
* 아래 코드는 오류가 난다. (SELECT문 처리 순서 때문)
SELECT EMP_NO, NAME, DEPT_NO, POSITION, GENDER, HIRE_DATE, SALARY AS S
FROM EMPLOYEE
WHERE S >= 5000000
ORDER BY HIRE_DATE;
① FROM
② WHERE (의 S는 SELECT문 실행 되기 전이기 때문에 S라는 값이 존재하지 않음)
③ SELECT
④ ORDER
'Database > database 수업 기록' 카테고리의 다른 글
DataBase 수업 기록(11) ROW (0) | 2022.09.06 |
---|---|
DataBase 수업 기록(10.5) DQL 예시 (0) | 2022.09.05 |
DataBase 수업 기록(9) 시퀀스 (0) | 2022.09.03 |
DataBase 수업 기록(8.5) DML예시 (0) | 2022.09.02 |
DataBase 수업 기록(8) DML (0) | 2022.09.01 |