본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2023-01-12(54day) / SQL JOIN / 제약조건

by elicho91 2023. 1. 12.

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 강의는 간만에 휴식같은 강의였다 ㅠㅠ

😈 아는 내용이라고 그냥 넘어가지 않기! 😈

댓글