공부 기록/DBMS

[ DBMS - 8일차 ]

pulttaegi 2026. 5. 24. 08:39
반응형

1. UNION

컬럼의 개수와 데이터 타입이 맞아야함

종류 설명 및 예시
UNION
SELECT FROM EMPLOYEES UNION SELECT FROM DEPARTMENTS;

SELECT MANAGER_ID, FIRST_NAME FROM EMPLOYEES UNION
SELECT MANAGER_ID, DEPARTMENT_NAME FROM DEPARTMENTS;
UNION ALL

SELECT
MANAGER_ID, FIRST_NAME FROM EMPLOYEES UNION ALL

SELECT MANAGER_ID, DEPARTMENT_NAME FROM DEPARTMENTS;
INTERSECT

SELECT
MANAGER_ID, FIRST_NAME FROM EMPLOYEES INTERSECT

SELECT MANAGER_ID, DEPARTMENT_NAME FROM DEPARTMENTS;
MINUS

SELECT
MANAGER_ID, FIRST_NAME FROM EMPLOYEES MINUS

SELECT MANAGER_ID, DEPARTMENT_NAME FROM DEPARTMENTS;

2. JOIN

여러가지의 흩어진 데이터에서 원하는 조건에 따라 조회하는 기능

 

1.INNER JOIN (내부조인 = 등가조인)

2. OUTER JOIN (외부조인)

3. NON-EQUI JOIN (동등하지 않는 조인)

구분 설명
INNER JOIN
- 여러 테이블을 한번에 조회해 사용자가 원하는 조건으로 조회
- JOIN 사용시 속도가 조금 느림 (단점)
- 두 테이블 간의 관계 (PK==FK)가 연결되어 있는 경우에 사용 가능
- 조건이 정확이 일치하는 값만 정리해서 조회함
  ex). A.번호(PK) = B.번호(FK)인 경우, 반드시 두 테이블 간의 일치값만 조회
- 두 테이블 간의 공통된 행을 반환하는 기능
- 문법 : FROM 테이블명A [INNER] JOIN 테이블명B ON 조건 A.NUMBER = B.NUMBER
   [INNER]는 제외해도 내부조인인 것을 인식함
- 명령어 순서 : FROM > ON > WHERE > GROUP BY > HAVING > SELECT > ORDER BY



==============================================================================

SELECT TEL
FROM PLAYER P
INNER JOIN TEAM T ON P.TEAM_ID = T.TEAM_ID
WHERE P.PLAYER_NAME = '송종국';











OUTER JOIN - 외부조인은 내부조인과 다르게 한쪽에만 값이 있어도 테이블을 합쳐서 보여줌
[ 종류 ]
- LEFT OUTER JOIN: 
-- 왼이쪽이 오른쪽 보다 많을 때: 왼쪽 테이블의 모든 행 출력, 오른쪽 테이블의 일치하는 행이 없으면 NULL
-- 왼쪽이 오른쪽보다 적을 때: 왼쪽의 모든 행을 출력, 오른쪽 테이블은 미출력
- RIGHT JOIN: (LEFT의 반대)
- FULL JOIN: 양쪽 테이블의 모든 행 출력, 일치하는 행이 없는 항목은 NULL값으로 조회




SELECT * FROM EMPLOYEES E FULL OUTER JOIN DEPARTMENTS D
ON D.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE E.SALARY >= 15000;
NON-EQUI JOIN
SELECT T.JOB_TITLE, E.LAST_NAME, E.SALARY
FROM JOBS T, EMPLOYEES E
WHERE E.SALARY >= 15000;
FULL JOIN - 모두 출력

테이블명 드래그 후 F4 클릭하면 속성 테이블로 감

서로 연결되어 있는 것을 확인 가능함


3. EXISTS

- 서브쿼리의 결과 값에 적어도 하나 이상의 행이 존재하는지 확인함

- 서브쿼리 결과가 존재하면 TRUE, 그렇지 않으면 FALSE

- 서브쿼리의 결과 집합에 단 하나의 행만 존재해도 TRUE

- 서브쿼리의 SELECT 절에 어떤 열을 지정하는지는 중요하지 않음

   보통 SELECT * 또는 SELECT 1을 사용함

구분  설명
문법
SELECT *
FROM DEPARTMENTS
WHERE EXISTS (
              SELECT 1
              FROM EMPLOYEES
              WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID);
* 여기서 SELECT 1은 출력되는 것이 아닌 문법을 맞추기 위해서 넣을 뿐임
예시 문제


SELECT *
FROM EMPLOYEES E
WHERE EXISTS(
SELECT 1
FROM EMPLOYEES M
WHERE E.EMPLOYEE_ID = E.MANAGER_ID);



 

반응형

'공부 기록 > DBMS' 카테고리의 다른 글

[ DBMS - 4일차 ]  (0) 2026.05.10
[ DBMS - 3일차 ]  (0) 2026.05.09
[ DBMS - 2일차 ]  (0) 2026.05.03
[ DBMS - 1일차 ]  (0) 2026.05.02