본문 바로가기

DB,데이터베이스

[영남이공대학교 사이버보안과] MySQL의 CASE WHEN, UNION, USING, JOIN문, 하위질의, NOT EXISTS

CASE WHEN

복수 조건들에 허용되는 값을 출력하는 방법

CASE

WHEN 조건1 THEN 출력값

WHEN 조건2 THEN 출력값 ...

ELSE 조건에 해당하지 않는 출력값

END


UNION

복수의 테이블을 한 번에 출력하는 방법

(SELECT 'column1' FROM 'table1' WHERE '조건') UNION 

(SELECT 'column2' FROM 'table2' WHERE '조건') UNION

(SELECT 'column3' FROM 'table3' WHERE '조건') ...


UNION ALL

중복된 값또한 출력하는 방법

(SELECT 'column1' FROM 'table1' WHERE '조건') UNION ALL ...


JOIN

테이블에 다른 테이블에 있는 column을 가져와 같이 출력하는 방법

이때 ON 뒤의 조건에 의해 연결되는 값끼리 정리된다.

SELECT 'column1' FROM 'table1'

JOIN 'table2' ON 'table1.column' = 'table2.column'

일치하는 RECORD만 가져오는 결합이 바로 내부조인(INNER JOIN)이다.


USING

같은 column을 사용한다면 이것으로 ON을 쓰지않고 표현이 가능하다.

SELECT 'column1' FROM 'table1'

JOIN 'table2' USING(column)


JOIN 과 USING은 복수 출력이 가능하다.

SELECT table1.name, table2.phone, table3.email FROM table1

JOIN table2 USING(name)

JOIN table3 USING(name)


이제 내부조인(INNER)이 있다면 외부조인(OUTER)도 있다는 것을 생각할 수 있다.

외부조인(OUTER)에는 왼쪽조인과 오른쪽조인이 있다. 일치하지 않아도 조건에 맞는다면 출력되지만 없는 RECORD는 NULL로 출력된다.


LEFT JOIN (LEFT OUTER JOIN)

복수의 테이블에서 오른쪽 column을 제외한 왼쪽만 출력한다.

SELECT 'column1' FROM 'table1'

LEFT JOIN 'table2' ON 'table1.column1' = 'table2.column2'

or

SELECT 'column1' FROM 'table1'

LEFT JOIN 'table2' USING(column)


RIGHT JOIN (RIGHT OUTER JOIN)

복수의 테이블에서 왼쪽 column을 제외한 오른쪽만 출력한다.

SELECT 'column1' FROM 'table1'

RIGHT JOIN 'table2' ON 'table1.column1' = 'table2.column2'

or

SELECT 'column1' FROM 'table1'

RIGHT JOIN 'table2' USING(column)


SELF JOIN

같은 테이블에서 결합하는 방법. 반드시 Alias (AS)를 사용해야 한다.

반복하여 출력하기 때문에 RECORD * RECORD 로 출력된다.

예를 들어 5행 4열 테이블이라면 25행 8열 테이블이 출력된다.

열(칸) 은 같은 테이블의 출력 횟수에 따라 늘어나므로 두개를 출력한다면 열*2가 된다. 

SELECT 'column1' FROM 'table1' AS a 

JOIN 'table1' AS b


왜 같은 테이블을 조합할까?

SELF JOIN을 실행하게되면 조합의 모든 경우의 수가 나오게 되는데

조건을 설정하여 필요한 것만 선택하면 된다.


하위질의

한번 출력한 데이터들을 다시 조건을 주어 출력하는 것이다.


최대값 표시

IN 내부에는 첫번째로 데이터를 출력할 구문을 넣는다.

IN이 들어가지 않아도 출력가능하다. (단 = 등호는 오류가 출력될 수 있다.)

SELECT * FROM 'table1' WHERE 'column1' IN (SELECT ... )


NOT EXISTS

하위 질의로 출력되지 않다면 이 방법을 사용한다.

말 그대로 NOT 연산을 생각하면 된다. 

'존재하지 않는' 조건을 입력하면

'조건에 맞지 않고 존재하는' 값이 나온다.

SELECT * FROM table1 WHERE NOT EXISTS 

(SELECT * FROM table2 WHERE table1.phone = table2.phone)

결과: 휴대폰이 존재하지 않는 사람을 출력한다.