SQL (2)
👉 JOIN
- 두개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것
# Inner Join (가장 많이 사용)
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블> -- INNER JOIN은 'INNER' 생략가능
ON <조인될 조건>
[WHERE 검색 조건]
-- 테이블 이름에 별칭을 붙이면
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr
FROM buy B
JOIN member M
ON B.mem_id = M.mem_id;
# Outer Join (가장 많이 사용)
- 두 테이블을 조인할 때 필요한 내용이 한쪽 테이블에만 있어도 결과를 추출
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조일될 조건>
[WHERE 검색 조건];
-- LEFT OUTER JOIN 문의 의미를 ‘왼쪽 테이블의 내용은 모두 출력되어야 한다’ 정도로 해석
SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
ORDER BY M.mem_id;
👉 제약조건
- 데이터의 무결성을 지키기 위해 제한하는 조건
- 제약조건 종류
- Primary Key 제약조건
- Foreign Key 제약조건
- Unique 제약조건
- Check 제약조건
- Default 정의
- Null값 허용
# 기본 키(Primary Key) 제약 조건
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null
);
-- 혹은
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null
);
alter table member add constraint primary key (mem_id);
# 외래 키(Foreign Key) 제약 조건
create table buy
( num int auto_increment not null primary key,
mem_id char(8) not null,
prod_name char(6) not null,
foreign key(mem_id) references member(mem_id)
);
# 일대다 (PK-FK) 관계를 맺은 상태에서는 제약조건으로 오류를 발생 시킴
-- BLK 회원 추가
insert into member values('BLK', '블랙핑크', 163);
-- BLK 구매 추가
insert into buy values(null, 'BLK', '지갑');
insert into buy values(null, 'BLK', '맥북');
-- 데이터 확인
select M.mem_id, M.mem_name, B.prod_name
from buy B
join member M
on B.mem_id = M.mem_id;
update member set mem_id = 'PINK' where mem_id = 'BLK'; -- 에러!
delete from member where mem_id = 'BLK'; -- 에러!
# ON UPDATE CASCADE, ON DELETE CASCADE
- ON UPDATE CASCADE : 회원 테이블의 아이디를 변경하면 구매 테이블의 아이디도 자동으로 변경
- ON DELETE CASCADE : 회원 테이블의 데이터가 삭제 되면 참조 테이블의 데이터도 삭제
create table buy
( num int auto_increment not null primary key,
mem_id char(8) not null,
prod_name char(6) not null,
foreign key(mem_id) references member(mem_id)
on update cascade
on delete cascade
);
# 기타 제약 조건
- 고유 키 제약 조건 - 중복되지 않는 유일한 값만 입력 가능
- 체크 제약 조건 - 조건에 만족 되는 값만 입력 가능
- 기본값 정의 - 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정
- 널 값 허용 - NULL or NOT NULL
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
email char(30) null unique,
height tinyint unsigned null check (height >= 100),
phone1 char(3) default '02'
);
🙋♂️ 소감 :
JPA가 모든 데이터를 엔티티 객체로 변환하여 검색하는 것은 한계가 있기 때문에 SQL문을 알아야 한다.
예전에 오라클DB를 다뤄본적이 있어서 SQL 강의는 간만에 휴식같은 강의였다 ㅠㅠ
😈 아는 내용이라고 그냥 넘어가지 않기! 😈
'❤️🔥TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2023-01-16(56day) / 프로젝트(1day) (0) | 2023.01.16 |
---|---|
[TIL] 2023-01-13(55day) / SQL 인덱스 (0) | 2023.01.15 |
[TIL] 2023-01-11(53day) / SQL 데이터 조회 / 변경 (0) | 2023.01.11 |
[TIL] 2023-01-10(52day) (0) | 2023.01.10 |
[TIL] 2023-01-09(51day) (0) | 2023.01.09 |
댓글