728x90
반응형
💡 group by 문
-- rental 테이블로부터 user_id별로 user_id를 조회한다. --
select user_id from rental group by user_id;
-- user_id별로 개수 세기 --
select user_id, count(*) from rental group by user_id;
💡 having 조건문
select user_id, count(*)
from rental
group by user_id
having count(user_id) > 1;
select user_id, count(*)
from rental
group by user_id
having count(user_id) < 1;
select user_id, count(*)
from rental
group by user_id
having count(user_id) <= 2;
select user_id, count(*)
from rental
group by user_id
having count(*) >= 2;
💡 조인(join)
◾ 2개 이상의 테이블을 묶어서 하나의 결과 테이블을 만드는 것
💬 일대 다 관계
◾ 한쪽 테이블에는 하나의 값만 존재하고 그 값과 대응되는 다른 쪽 테이블의 값은 여러 개인 관계
💬 다대 다 관계
◾ 다대다 관계는 연결 테이블과 두 테이블이 일대다 관계를 맺도록 구성
💬 내부 조인의 형식SELECT <열 목록> FROM <첫 번째 테이블> INNER JOIN <두 번째 테이블> ON <조인될 조건> [WHERE 검색조건];
💬 내부 조인의 작동◾ 구매 테이블의 회원 아이디(buyTBL.userID)인 KYM을 추출 ◾ KYM과 동일한 값을 회원 테이블의 아이디 (userTBL.userID) 열에서 검색 ◾ 아이디 KYM을 찾으면 구매 테이블과 회원 테이블의 두 행을 결합(조인)
📃 inner join (1)
select *
from rental
inner join user
on user.id = rental.user_id; -- 조건 : on --
◾ user 테이블
id | name | |
1 | chanhwan | choich@elice.com |
2 | haesol | sunsol@elice.com |
3 | hyungon | gone@elice.com |
◾ rental 테이블
rental_id | user_id | book_id |
1 | 1 | 1000 |
2 | 1 | 1001 |
3 | 3 | 1004 |
◾ inner join 실시 후
rental_id | user_id | book_id | name | |
1 | 1 | 1000 | chanhwan | choich@elice.com |
2 | 1 | 1001 | chanhwan | choich@elice.com |
3 | 3 | 1004 | hyungon | gone@elice.com |
📃 inner join (2)
create table girl_group (
group_id int,
group_name varchar(10),
hitsong_id int
);
insert into girl_group values( 101, '레드벨벳', 3 );
insert into girl_group values( 102, '트와이스', 2 );
insert into girl_group values( 103, '소녀시대', 4 );
create table hit_song (
hitsong_id int,
name varchar(15)
);
insert into hit_song values( 1, '뚜두뚜두' );
insert into hit_song values( 2, '우아하게' );
insert into hit_song values( 3, '아이스크림 케익' );
insert into hit_song values( 4, '다시 만난 세계' );
select * from girl_group;
select * from hit_song;
select *
from girl_group
inner join hit_song;
💡 outer join
💬 (left/right) outer join
◾ 조인 조건을 만족하지 않는 행까지 포함하여 출력하는 조인
◾ 외부 조인 형식
SELECT <열 목록> FROM <첫 번째 테이블(LEFT 테이블)> <LEFT | RIGHT> OUTER JOIN <두 번째 테이블(RIGHT 테이블)> ON <조인될 조건> [WHERE 검색조건];
📃 left/right outer join 예제
◾ user 테이블
create table user (
id int,
name varchar(10),
email varchar(30)
);
insert into user values( 1, 'chanhwan', 'choich@elice.com' );
insert into user values( 2, 'haesol', 'sunsol@elice.com' );
insert into user values( 3, 'hyungon', 'gone@elice.com' );
id | name | |
1 | chanhwan | choich@elice.com |
2 | haesol | sunsol@elice.com |
3 | hyungon | gone@elice.com |
◾ rental 테이블
create table rental (
rental_id int,
user_id int,
book_id int
);
insert into rental values( 1, 1, 1000 );
insert into rental values( 2, 1, 1001 );
insert into rental values( 3, 3, 1004 );
rental_id | user_id | book_id |
1 | 1 | 1000 |
2 | 1 | 1001 |
3 | 3 | 1004 |
select *
from user
left join rental
on user.id = rental.user_id;
◾ left join 의 결과, user 테이블에 rental 테이블을 id 기준으로연결
user_id | name | rental_id | book_id | |
1 | chanhwan | choich@elice.com | 1 | 1000 |
1 | chanhwan | choich@elice.com | 2 | 1001 |
2 | haesol | sunsol@elice.com | null | null |
3 | hyungon | gone@elice.com | 3 | 1004 |
⭐ left join은 user.id를 기준으로 하기 때문에,
(user.id, rental.user_id의 교집합 값(1,3)) + (user.id의 값(2))가 포함되어 user_id 컬럼에 1, 2, 3이 모두 조회된다.
rental.user_id가 2인 값은 존재하지 않기 때문에 rental_id와 book_id는 null로 조회된다.
select *
from user
right join rental
on user.id = rental.user_id;
◾ right join 의 결과, user 테이블에 rental 테이블을 user_id 기준으로연결
id | name | rental_id | book__id | |
1 | chanhwan | choich@elice.com | 1 | 1000 |
1 | chanhwan | choich@elice.com | 2 | 1001 |
3 | hyungon | gone@elice.com | 3 | 1004 |
⭐ right join은 rental.user_id를 기준으로 하기 때문에,
(user.id, rental.user_id의 교집합 값(1,3)) + (rental.user_id의 값(1,3))이 포함되어 id 컬럼에 1, 3만 조회된다.
728x90
반응형
'Back-End > Database' 카테고리의 다른 글
MySQL - Workbench, DB 종류 (0) | 2022.07.19 |
---|---|
MySQL - 실습문제 (0) | 2022.07.18 |
MySQL - 사용자 생성 및 권한 부여 (0) | 2022.07.18 |
MySQL - JAVA, DB 연결하기 (0) | 2022.07.15 |
MySQL - food 데이터베이스 만들기 (0) | 2022.07.15 |
댓글