SQL(4)

easyliving·2022년 8월 4일

DB+BACK_END (ORACLE/MYSQL)

목록 보기
15/20

UNION

여러 개의 SQL 문을 합쳐서 하나의 SQL 문으로 만들어주는 방법 
(주의. 칼럼의 개수가 같아야한다.)


UNION 문법 

union: 중복된 값을  제거하여 알려준다. 
union all: 중복된 값도 포함하여 모두 보여준다. 


예)
성별이 여자인 데이터를 검색하는 쿼리와 
소속사가 yg엔터테이먼트인 데이터를 검색하는 쿼리를 union all 로 실행해주세요.



mysql> select name,sex,agency from celab where sex='F'
    -> UNION
    -> select name,sex,agency from celab where agency='YG엔터테이먼트';
    
    +-----------+------+--------------------------+
| name      | sex  | agency                   |
+-----------+------+--------------------------+
| 아이유    | F    | EDAM엔터데이먼트         |
| 이미주    | F    | 울림엔터데이먼트         |
| 이수현    | F    | YG엔터테이먼트           |
| 강동원    | M    | YG엔터테이먼트           |
| 차승원    | M    | YG엔터테이먼트           |
+-----------+------+--------------------------+


예)
가수가 직업인 연예인의 이름,직업을 검색하는 쿼리와 
1980 년대에 태어난 연예인의 이름,생년월일,나이를 검색하는 쿼리를 
union으로 실행해주세요. 


mysql> select name,job_title from celab where job_title LIKE '%가수%'
    -> UNION
    -> select name,birthday from celab where birthday BETWEEN '1980-01-01' AND '1989-12-3';
    
   +-----------+------------------+
| name      | job_title        |
+-----------+------------------+
| 아이유    | 가수,텔런트      |
| 이미주    | 가수             |
| 이수현    | 가수             |
| 강동원    | 1981-01-18       |
+-----------+------------------+

JOIN

INNER JOIN
두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식 (교집합)

예)
SNL_SHOW에 호스트로 출연한 CELEB을 기준으로 
CELEB 테이블과 SNL_SHOW 테이블을 INNER JOIN 해주세요 


mysql> select celab.id, celab.name, snl_show.id, snl_show.host
    -> from celab
    -> INNER JOIN snl_show
    -> ON celab.name=snl_show.host;
+----+-----------+----+-----------+
| id | name      | id | host      |
+----+-----------+----+-----------+
|  5 | 강동원    |  1 | 강동원    |
|  4 | 유재석    |  2 | 유재석    |
|  6 | 차승원    |  3 | 차승원    |
|  7 | 이수현    |  4 | 이수현    |
+----+-----------+----+-----------+


LEFT JOIN
두 개의 테이블에서 공통영역을 포함해 
왼쪽 테이블의 다른 데이터를 포함하는 조인 방식 

예)
SNL_SHOW 호스트로 출연한 CELEB을 기준으로 CELEB 테이블과 SNL_SHOW 테이블을 LEFT JOIN 해주세요.

mysql> select celab.id,celab.name, snl_show.id, snl_show.host
    -> from celab
    -> left join snl_show
    -> on celab.name=snl_show.host;
+----+-----------+------+-----------+
| id | name      | id   | host      |
+----+-----------+------+-----------+
|  1 | 아이유    | NULL | NULL      |
|  2 | 이미주    | NULL | NULL      |
|  3 | 송강      | NULL | NULL      |
|  4 | 유재석    |    2 | 유재석    |
|  5 | 강동원    |    1 | 강동원    |
|  6 | 차승원    |    3 | 차승원    |
|  7 | 이수현    |    4 | 이수현    |
+----+-----------+------+-----------+


RIGHT JOIN
두 개의 테이블에서 공통영역을 포함해 
오른쪽 테이블의 다른 데이터를 포함하는 조인 방식 

예)
SNL_SHOW 호스트로 출연한 CELEB을 기준으로 CELEB 테이블과 SNL_SHOW 테이블을 RIGHT JOIN 해주세요.

mysql> select celab.id,celab.name, snl_show.id, snl_show.host
    -> from celab
    -> right join snl_show
    -> on celab.name=snl_show.host;
+------+-----------+----+-----------+
| id   | name      | id | host      |
+------+-----------+----+-----------+
|    5 | 강동원    |  1 | 강동원    |
|    4 | 유재석    |  2 | 유재석    |
|    6 | 차승원    |  3 | 차승원    |
|    7 | 이수현    |  4 | 이수현    |
| NULL | NULL      |  5 | 이병헌    |
| NULL | NULL      |  6 | 하지원    |
| NULL | NULL      |  7 | 제시      |
| NULL | NULL      |  8 | 조정석    |
| NULL | NULL      |  9 | 조여정    |
| NULL | NULL      | 10 | 옥주현    |
+------+-----------+----+-----------+


FULL OUTER JOIN

두 개의 테이블에서 공통영역을 포함하여
양쪽 테이블의 다른 영역을 모두 포함하는 조인방식(합집합)

예)
SNL_SHOW 호스트로 출연한 CELEB을 기준으로 CELEB 테이블과 SNL_SHOW 테이블을 FULL OUTER JOIN 해주세요.

mysql> select celab.id,celab.name,snl_show.id,snl_show.host
    -> from celab
    -> left join snl_show
    -> on celab.name=snl_show.host
    -> UNION
    -> select celab.id, celab.name, snl_show.id, snl_show.host
    -> from celab
    -> right join snl_show
    -> on celab.name=snl_show.host;
+------+-----------+------+-----------+
| id   | name      | id   | host      |
+------+-----------+------+-----------+
|    1 | 아이유    | NULL | NULL      |
|    2 | 이미주    | NULL | NULL      |
|    3 | 송강      | NULL | NULL      |
|    4 | 유재석    |    2 | 유재석    |
|    5 | 강동원    |    1 | 강동원    |
|    6 | 차승원    |    3 | 차승원    |
|    7 | 이수현    |    4 | 이수현    |
| NULL | NULL      |    5 | 이병헌    |
| NULL | NULL      |    6 | 하지원    |
| NULL | NULL      |    7 | 제시      |
| NULL | NULL      |    8 | 조정석    |
| NULL | NULL      |    9 | 조여정    |
| NULL | NULL      |   10 | 옥주현    |
+------+-----------+------+-----------+


SELF JOIN

예)
celeb 테이블의 연예인 중, snl_show에 host로 출연했고,
소속사가 안테나인 사람의 이름과 직업을 검색해주세요.

mysql> select celab.name,celab.job_title
    -> from celab,snl_show
    -> where celab.name=snl_show.host AND celab.agency='안테나';
+-----------+--------------+
| name      | job_title    |
+-----------+--------------+
| 유재석    | MC,개그맨    |
+-----------+--------------+


예) 
celab 테이블의 연예인 중 snl_show에 host로 출연했고
영화배우 아니면서 YG엔터테이먼트 소속이거나,
40세 이상이면서 yg엔터테이먼트 소속이 아닌 연예인의 이름과 나이,
직업,소속사,시즌,에피소드 정보를 검색해주세요. 

mysql> select celab.name, celab.age, celab.job_title, celab.agency, snl_show.season, snl_show.episode
    -> from celab,snl_show
    -> where celab.name=snl_show.host
    -> AND((NOT job_title LIKE '%영화배우%' AND agency='YG엔터테이먼트')OR (age>=40 AND agency!='YG엔터테이먼트'));
+-----------+------+--------------+----------------------+--------+---------+
| name      | age  | job_title    | agency               | season | episode |
+-----------+------+--------------+----------------------+--------+---------+
| 유재석    |   50 | MC,개그맨    | 안테나               |      8 |       8 |
| 이수현    |   23 | 가수         | YG엔터테이먼트       |      8 |      10 |
+-----------+------+--------------+----------------------+--------+---------+

예)
snl_show 시즌 8에 출연한 celab 중,
에피소드 7,9,10 중에 출연했거나, 소속사가 yg로 시작하고 뒤에 6글자로 끝나는 사람 중 작년 9월 15일 이후에 출연했던 사람을 검색해주세요.

mysql> select name,season,episode,broadcast_date,agency
    -> from celab,snl_show
    -> where name=host
    -> AND ( episode IN(7,9,10) OR agency LIKE 'YG_____')
    -> AND broadcast_date>'2020-09-15';
+-----------+--------+---------+----------------+----------------------+
| name      | season | episode | broadcast_date | agency               |
+-----------+--------+---------+----------------+----------------------+
| 차승원    |      8 |       9 | 2020-09-19     | YG엔터테이먼트       |
| 이수현    |      8 |      10 | 2020-09-26     | YG엔터테이먼트       |
+-----------+--------+---------+----------------+----------------------+
profile
가끔져요

0개의 댓글