select a.name, a.agency, b.title
from kgroup a
left join album b
on a.name = b.name
album 테이블에 러블리즈가 부른 노래가 없으므로 러블리즈의 title컬럼은 null이다.
2. album 의 노래를 부른 가수들의 소속사를 보고싶다면 right join을 이용한다.
select a.agency, b.name, b.title
from kgroup a
right join album b
on a.name = b.name;
3. 전체 목록을 출력하고 싶다면 full outer join을 사용할 수 있다.
mysql 의 경우 full outer join을 지원하지 않으므로
"select * from a left join b on a.no = b.no
union
select * from a right join bon a.no = b.no"
의 형식을 사용하면 된다.
select a.name, a.agency, b.title
from kgroup a
left join album b
on a.name = b.name
union
select b.name, a.agency, b.title
from kgroup a
right join album b
on a.name = b.name;
3_2. 비교 : union all 을 사용할 경우
select a.name, a.agency, b.title
from kgroup a
left join album b
on a.name = b.name
union all
select b.name, a.agency, b.title
from kgroup a
right join album b
on a.name = b.name;
이 때union 과 union all의 차이점을 알아야 한다.
left join과 right join을 합할 경우 가운데 inner join 부분이 중복된다.
union의 경우 중복값을 제거해주고 union all은 중복값을 포함한 결과값들이 출력되므로
SELECT * from(
(
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
left join sale b
on a.code = b.code
)
Union
(
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
right join sale b
on a.code = b.code
order by no desc
)
)
where code not in ('9001')
order by code, start_date
이 때 Error Code: 1248 Every derived table must have its own alias 오류가 발생한다.
파생테이블에 명칭(alias )가 있어야한다.
after
SELECT * from(
(
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
left join sale b
on a.code = b.code
)
Union
(
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
right join sale b
on a.code = b.code
order by no desc
)
)as c
where code not in ('9001')
order by code, start_date
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
left join sale b
on a.code = b.code
Union
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
right join sale b
on a.code = b.code
order by no desc
Error Code : 1221 Incorrect usage of UNION and ORDER BY
오류 발생
- union과 order by를 같이 사용할 때에는 select 문을 괄호로 감싸줘야 한다.
after
(
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
left join sale b
on a.code = b.code
)
Union
(
SELECT
a.no,
a.code,
b.price,
b.start_date,
b.end_date
FROM product a
right join sale b
on a.code = b.code
)
order by no desc;