서브 쿼리 - 쿼리문 내부에 포함된 또 다른 쿼리문 - 서브 쿼리를 포함하고 있는 쿼리를 메인 쿼리라고 부른다. - 서브 쿼리의 실행 결과에 따라 단일 행 서브 쿼리와 다중 행 서브 쿼리로 분류된다. - 단일 행 대상 연산자와 다중 행 연산자가 다르다. - 서브 쿼리는 비교 또는 연산 값으로 활용되거나 조회해야하는 테이블 대용으로 활용될 수 있다. 단일 행 서브 쿼리 - 서브 쿼리의 결과가 단 하나의 행인 경우 - 단일 값끼리 비교하는 일반 연산자를 사용할 수 있다. (=, >, = (SELECT salary FROM employees WHERE employee_id = 102); -- 테이블 대신 서브 쿼리 사용 SELECT * FROM (SELECT job_id, job_title FROM jobs ..
ANSI JOIN - ANSI에서 지정한 표준 JOIN 문법 - 다른 관계형 데이터베이스에서도 사용할 수 있는 표준 문법 * ANSI(America National Standard Institute) : 미국 국제 표준 기구 CROSS JOIN SELECT * FROM employees CROSS JOIN departments; INNER JOIN (조건을 충족하는 행만 등장하는 것) - 조인 조건에는 ON절을 사용하고 원하는 조건에는 WHERE절을 사용 - 조인하는 두 테이블이 조인하기 위해 사용하는 컬럼명이 같다면 USING을 사용 (조인에 사용된 컬럼이 맨 앞으로 이동되고, 중복도 제거된다.) SELECT * FROM employees e INNER JOIN departments d ON e.dep..
SELF JOIN - 하나의 테이블에서 자기 자신과 JOIN하여 원하는 데이터를 얻어내는 JOIN - 해당 테이블의 기본키를 같은 테이블의 다른 컬럼에서 외래키로 사용하는 경우 ex: employees의 manager_id SELECT * FROM employees; SELECT emp.first_name AS 사원이름, emp.salary AS 부하월급, mgr.first_name AS 담당매니저이름, mgr.salary AS 상사월급 FROM employees emp, employees mgr WHERE emp.manager_id = mgr.employee_id;
OUTER JOIN - JOIN 조건을 만족하지 못해 등장하지 못하는 행을 추가로 확인할 수 있는 JOIN - (+)를 붙인 쪽에 null을 추가해서 조건을 억지로 맞춰 등장하지 못했던 행을 조회한다. -- 일반적인 조인의 경우 외래키 컬럼에 null이 있으면 조회되지 않는 행이 존재한다. -- departments 쪽에 (+)를 붙이면 해당하는 부서가 없더라도 등장하게 된다. SELECT * FROM employees e, departments d WHERE e.department_id = d.department_id(+) ORDER BY employee_id; -- employees 쪽에 (+)를 붙이면 employees쪽에 null을 붙여서 등장하지 못했던 부서들이 등장한다. SELECT * FRO..
기본키 (Primary Key, PK) - 한 테이블에서 하나의 행을 유일하게 구분할 수 있는 컬럼 - 각 테이블에서 기본키는 하나밖에 설정할 수 없다. - 기본키로 설정된 컬럼에는 중복된 값이 없어야 한다. (UNIQUE) - 기본키로 설정된 컬럼에는 NULL 값이 없어야 한다. (NOT NULL) 후보키 (Candidate Key) - 기본키가 될 자격을 갖추었지만 기본키로 선택되지 않은 컬럼 외래키 (Foreign Key, FK) - 다른 테이블에서는 기본키(또는 후보키)이지만 해당 테이블에서는 중복되는 값을 지닌 일반 컬럼인 경우 ex: employees의 department_id는 외래키 departments의 department_id는 기본키 - 외래키 컬럼에는 다른 테이블의 기본키 컬럼에 없..
ORDER BY 컬럼명 [ASC | DESC] - 조회 시 원하는 컬럼 기준으로 정렬하여 출력할 수 있다. - ASC : 오름차순 (Ascending) - DESC : 내림차순 (Decending) - ASC, DESC 입력 생략 시 ASC로 적용된다. SELECT salary, first_name FROM employees WHERE salary >= 10000 ORDER BY salary ASC; 내림차순 시 null이 먼저 등장한다. (가장 큰 값으로 취급한다.) SELECT salary, commission_pct, first_name FROM employees ORDER BY commission_pct DESC; 오름차순 시 null이 가장 나중에 등장한다. SELECT salary, commi..
그룹 함수 - 하나의 컬럼값을 그룹 기준으로 삼아 여러 행들을 하나로 합쳐 조회하는 것 - 그룹의 기준이 되는 컬럼을 GROUP BY절을 통해 선택할 수 있다. - 그룹 함수를 사용하면 일반 컬럼은 함께 출력할 수 없다. - 그룹 대상이 되는 컬럼과 그룹 함수의 결과만 출력 가능하다. SUM(column) : 해당 컬럼의 총합을 구해주는 그룹 함수 SELECT SUM(salary) FROM employees; -- 부서 번호별 월급의 총합 SELECT department_id, SUM(salary) FROM employees GROUP BY department_id; -- 직책별 월급의 총합 SELECT job_id, SUM(salary) FROM employees GROUP BY job_id; -- 같..
CASE - DECODE()는 컬럼과 정확하게 일치하는 케이스만 매핑할 수 있었다. - CASE 문법은 해당 컬럼에 원하는 조건을 적용할 수 있다. CASE WHEN 조건절 THEN 출력할 것 ... ELSE 기본값 END -- ex: 모든 종류의 CLERK을 3퍼센트 인상하고 싶은 경우 SELECT first_name, job_id, salary AS before_salary, CASE WHEN job_id = 'IT_PROG' THEN salary * 1.1 WHEN job_id LIKE '%_CLERK' THEN salary * 1.03 ELSE salary END AS after_salary FROM employees;