목차


 JOIN

두개 이상의 테이블을 묶어서 하나의 결과 집합으로 출력함


 

 INNER JOIN

기본 구조

SELECT 컬럼1, 컬럼2
    FROM 테이블1 
    INNER JOIN 테이블2
 	   ON 조인 조건
WHERE 검색조건

SELECT emp.emp_no, demp.dept_no, emp.first_name
FROM employees emp
    INNER JOIN dept_emp demp
    	ON emp.emp_no = demp.emp_no
LIMIT 10;

 


 

 OUTER JOIN

기준이 되는 테이블의 레코드는 조인의 조건에 만족되지 않아도 출력

 

기본 구조

SELECT 컬럼1, 컬럼2 ...
FROM 테이블1
    [ LEFT | RIGHT ] OUTER JOIN 테이블2
 	   ON 조인 조건
WHERE 검색조건;

d010은 dept_no라는 교집합이 없기때문에 원래는 나오지않지만 주테이블에 있는값이기 때문에 출력됨

SELECT dept.dept_no, dept.dept_name, d_m.emp_no
FROM departments dept
    LEFT OUTER JOIN dept_manager d_m
        ON dept.dept_no = d_m.dept_no;

 

 CROSS JOIN

테이블1의 모든 레코드와 테이블2의 모든 레코드를 조인함

 

기본 구조

SELECT 컬럼1, 컬럼2 ...
FROM 테이블1
	CROSS JOIN 테이블2
WHERE 검색조건;

SELECT
    dept.dept_no
    , dept.dept_name
    , d_m.emp_no
FROM departments dept
	CROSS JOIN dept_manager d_m;

 

 SELF JOIN

자기 자신을 조인

 

기본 구조

SELECT 컬럼1, 컬럼2 ...
FROM 테이블1
    INNER JOIN 테이블1
WHERE 검색조건;

10001사원의 상사를 가져오기

SELECT emp2.*
FROM employees emp1
    INNER JOIN employees emp2
	    ON emp1.sup_no = emp2.emp_no
WHERE emp1.emp_no = 10001;

 

 UNION

두 쿼리의 결과를 합팀

UNION은 중복값을 제거하고 출력

UNION ALL은 중복값도 출력

 

기본 구조

SELECT ... 
FROM ...
UNION
SELECT ... 
FROM ...

UNION

SELECT *
FROM employees
WHERE emp_no = 10001
	OR emp_no = 10005
UNION
SELECT *
FROM employees
WHERE emp_no = 10005;

UNION ALL

SELECT *
FROM employees
WHERE emp_no = 10001
	OR emp_no = 10005
UNION ALL
SELECT *
FROM employees
WHERE emp_no = 10005;

 


 

Github

Link

 

'HeidiSQL > SQL_ex' 카테고리의 다른 글

table 2  (0) 2023.03.19
table  (0) 2023.03.19
function  (0) 2023.03.18
data type  (0) 2023.03.18
DELETE  (0) 2023.03.18

+ Recent posts