1. SELECT
- SELECT 문은 테이블에서 데이터를 조회하기 위한 SQL 구문이다.
- SELECT 문을 사용하여 테이블의 특정 컬럼, 특정 행 또는 여러 테이블의 특정 컬럼과 행을 조회할 수 있다.
- 데이터를 조회한 결과를 Result Set이라고 한다.
- Result Set은 테이블 형태로 값을 반환하고 0개 이상의 행이 포함될 수 있다.
- 모든 컬럼을 조회할 경우 컬럼명 대신 <*> 기호 사용할 수 있다.
-- 모든 컬럼 조회 시 컬럼 명 대신 '*' 기호 사용 가능
SELECT 컬럼 명 [, 컬럼명, ...]
FROM 테이블 명
WHERE 조건식
ORDER BY 컬럼명 | 별칭 | 컬럼 순번 [ASC/DESC] [NULLS FIRST | LAST];
-- EMPLOYEE 테이블에서 전체 사원들의 사원, 이름, 급여만 조회
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE;
-- 아래와 같이 쿼리는 대소문자를 가리지 않지만 관례상 대문자로 작성한다.
select emp_id, emp_name, salary
from employee;
1) 컬럼의 산술 연산
- 컬럼 값에 대해 산술 연산한 결과를 조회할 수 있다.
SELECT EMP_NAME,
SALARY * 12,
(SALARY + (SALARY * BONUS)) * 12
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 직원명, 직원의 연봉 (연봉 = 급여 * 12) 조회
SELECT EMP_NAME, SALARY * 12
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 직원명, 급여, 연봉, 보너스가 포함된 연봉((급여 + (보너스 * 급여))*12) 조회
-- 산술 연산 중 NULL 값이 존재할 경우 산술 연산한 결과값은 무조건 NULL이다.
SELECT EMP_NAME,
SALARY * 12,
BONUS,
-- (SALARY + (SALARY * BONUS))*12
(SALARY + (NVL(BONUS, 0) * SALARY))*12
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 직원명, 입사일, 근무일수
-- SYSDATE는 현재 날짜를 출력한다.
SELECT SYSDATE
FROM DUAL;
-- DATE 타입도 연산이 가능하다.
SELECT EMP_NAME,
HIRE_DATE,
SYSDATE - HIRE_DATE
FROM EMPLOYEE;
SELECT EMP_NAME,
HIRE_DATE,
CEIL(SYSDATE - HIRE_DATE) -- CEIL : 매개값으로 전달되는 수를 올림하는 함수
FROM EMPLOYEE;
2) 컬럼 별칭
- 조회된 컬럼명에 별칭을 지정할 수 있다.
- 표현법: 컬럼 AS 별칭 / 컬럼 AS "별칭" / 컬럼 별칭 / 컬럼 "별칭”
- 산술연산을 하게 되면 컬럼명이 지저분해진다. 이때 컬럼명에 별칭을 부여해서 깔끔하게 보여줄 수 있다.
- 별칭을 지정할 때 띄어쓰기 혹은 특수문자가 별칭에 포함될 경우에는 반드시 큰따옴표(" ")로 감싸준다.
SELECT EMP_NAME AS 이름,
SALARY * 12 AS "연봉(원)",
(SALARY + (SALARY * BONUS)) * 12 "총 소득(원)"
FROM EMPLOYEE;
SELECT EMP_NAME AS 직원명,
SALARY * 12 AS "연봉",
(SALARY + (BONUS * SALARY))*12 "총 소득(원)"
FROM EMPLOYEE;
3) 리터럴
- 리터럴을 SELECT 절에 사용하면 테이블에 존재하는 데이터처럼 Result Set의 모든 행에 반복해서 표시된다.
- 문자나 날짜 리터럴은 ' ' 기호를 사용한다.
SELECT EMP_NAME, '안녕하세요'
FROM EMPLOYEE;
SELECT EMP_ID,
SALARY,
'원' AS 단위
FROM EMPLOYEE;
2. DISTINCT
- 컬럼에 포함된 데이터 중 중복 값을 제외하고 한 번씩만 표시하고자 할 때 사용한다.
- SELECT 절에 한 번만 기술할 수 있다.
- 컬럼이 여러 개이면 컬럼 값들이 모두 동일해야 중복 값으로 판단되어 중복이 제거된다.
-- SELECT 절에 한 번만 기술할 수 있다.
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE
ORDER BY JOB_CODE; -- 오름차순
-- DISTINCT는 SELECT 절에 한 번만 기술할 수 있다.
-- SELECT DISTINCT JOB_CODE, DISTINCT DEPT_CODE [ERROR]
SELECT DISTINCT JOB_CODE, DEPT_CODE
FROM EMPLOYEE
ORDER BY JOB_CODE;
3. WHERE
- 테이블에서 데이터를 검색할 때 컬럼의 조건을 설정하여 조건을 만족하는 값을 가진 행을 조회할 수 있다.
SELECT EMP_NAME,
DEPT_CODE,
SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6';
다양한 연산자를 함께 사용하여 다양한 조건을 만족하는 행을 조회할 수 있다.
SELECT EMP_NAME,
DEPT_CODE,
SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' AND SALARY > 2000000;
-- EMPLOYEE 테이블에서 부서 코드가 D9와 일치하는 사원들의 모든 컬럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
-- EMPLOYEE 테이블에서 부서 코드가 D9와 일치하는 사원들의 직원명, 부서 코드, 급여 조회
SELECT EMP_NAME,
DEPT_CODE,
SALARY
FROM EMPLOYEE
WHERE DEPT_CODE ='D9';
-- EMPLOYEE 테이블에서 부서 코드가 D9와 일치하는 않는 사원들의 사번, 직원명, 부서 코드 조회
SELECT EMP_ID,
EMP_NAME,
DEPT_CODE
FROM EMPLOYEE
-- WHERE DEPT_CODE != 'D9';
-- WHERE DEPT_CODE ^= 'D9';
WHERE DEPT_CODE <> 'D9';
-- EMPLOYEE 테이블에서 급여가 400만원 이상인 직원들의 직원명, 부서 코드, 급여 조회
SELECT EMP_NAME AS "직원명",
DEPT_CODE AS "부서코드",
SALARY AS "급여"
FROM EMPLOYEE
WHERE SALARY >= 4000000;
-- EMPLOYEE 테이블에서 재직 중인 직원들의 사번, 이름, 입사일을 조회
SELECT EMP_ID AS "사번",
EMP_NAME AS "직원명",
HIRE_DATE AS "입사일"
FROM EMPLOYEE
WHERE ENT_YN = 'N';
-- WHERE ENT_DATE IS NULL;
4. ORDER BY
SELECT 문으로 조회된 데이터를 정렬을 할 때 작성하는 구문이다.
SELECT 구문의 가장 마지막에 작성하며 가장 마지막에 실행된다.
- ORDER BY 컬럼|별칭|컬럼 순번 [ASC|DESC] [NULLS FIRST|NULLS LAST];
- ASC : 오름차순 정렬 (ASC, DESC 생략시 기본값)
- DESC : 내림차순 정렬
- NULLS FIRST : 정렬하고자 하는 컬럼 값에 NULL이 있는 경우 NULL 값을 맨 앞으로 정렬한다.
- NULLS LAST : 정렬하고자 하는 컬럼 값에 NULL이 있는 경우 NULL 값을 맨 뒤로 정렬한다.
-- EMPLOYEE 테이블에서 BONUS로 오름차순 정렬
SELECT *
FROM EMPLOYEE
--ORDER BY BONUS;
--ORDER BY BONUS ASC; -- 오름차순 정렬은 기본적은 NULLS LAST
--ORDER BY BONUS NULLS FIRST;
ORDER BY BONUS ASC NULLS FIRST;
-- EMPLOYEE 테이블에서 BONUS로 내림차순 정렬(단, BONUS 값이 일치할 경우에는 SALARY 가지고 오름차순 정렬)
SELECT *
FROM EMPLOYEE
-- ORDER BY BONUS DESC; -- 내림차순의 정렬은 기본적으로 NULLS FIRST
ORDER BY BONUS DESC NULLS LAST, SALARY;
-- SALARY의 ASC는 생략 가능 - SALARY 가지고 오름차순 정렬
-- 정렬 기준 여러 개를 제시할 수 있다.
-- EMPLOYEE 테이블에서 연봉별 내림차순으로 정렬된 직원들의 직원명, 연봉 조회
SELECT EMP_NAME AS "직원명",
SALARY * 12 AS "연봉"
FROM EMPLOYEE
--ORDER BY SALARY * 12 DESC;
--ORDER BY "연봉" DESC;
ORDER BY 2 DESC; -- 컬럼 순번으로 정렬 기준
* 위 내용은 KH 정보교육원 수업을 정리한 내용을 바탕으로 작성된 글입니다. *
'DB > SQL' 카테고리의 다른 글
INNER JOIN & OUTER JOIN (0) | 2022.09.01 |
---|---|
GROUP BY & HAVING (0) | 2022.08.30 |
함수(FUNCTION) (0) | 2022.08.29 |
DQL - 연산자 (0) | 2022.08.28 |
실습 환경 구축 (0) | 2022.08.25 |