30
데이터베이스 개론 ALTER, FOREIGN KEY, JOIN NHN NEXT 정호영 나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

MySQL JOIN

Embed Size (px)

DESCRIPTION

MySQL JOIN

Citation preview

Page 1: MySQL JOIN

데이터베이스개론

ALTER, FOREIGN KEY, JOIN

NHN NEXT 정호영

나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

Page 2: MySQL JOIN

목표

- ALTER 명령을사용할 수 있다.

- 테이블에외래키제약조건을추가할수 있다.

-여러가지 JOIN에 대해 이해한다.

Page 3: MySQL JOIN

테이블을만들어 봅시다.

user

name (varCHAR 32) money (dec 10,2)

CREATE TABLE user (name VARCHAR(32),money DEC(10,2)

);

Page 4: MySQL JOIN

uid CHAR(8)을 추가해 봅시다.

user

uid (CHAR 8) name (VARCHAR 32) money (DEC 10,2) score (INT)

DROP TABLE IF EXISTS user;CREATE TABLE user (

uid CHAR(8),name VARCHAR(32),money DEC(10,2),score INT

);

테이블을삭제하지않고 스키마를변경하고싶다면?

Page 5: MySQL JOIN

ALTER 명령으로테이블 스키마를변경할수 있습니다.

user

uid (CHAR 8) name (VARCHAR 32) money (INT) score (INT)

DROP TABLE IF EXISTS user;CREATE TABLE user (

name VARCHAR(32),money INT,score INT

);

ALTER TABLE userADD COLUMN uid CHAR(8) FIRST;

Page 6: MySQL JOIN

추가적인 ALTER 명령들을 실행해봅시다.

-- ALTER TABLE user-- ADD COLUMN uid CHAR(8) first;ALTER TABLE user

ADD COLUMN birth date AFTER name;ALTER TABLE user

ADD PRIMARY KEY (uid);ALTER TABLE user

DROP COLUMN score;ALTER TABLE user

CHANGE COLUMN money money dec(10,2);ALTER TABLE user

DROP COLUMN score;

Page 7: MySQL JOIN

테이블을하나 더 추가합니다.

CREATE TABLE trade(tid INT,item VARCHAR(32),price DEC(10,2),seller_id (CHAR),PRIMARY KEY(tid)

);

trade

tid (int) item (varCHAR 32) price (dec 10, 2) seller_id (CHAR 8)

Page 8: MySQL JOIN

외래키에대해 외래키제약조건을추가해봅시다.

ALTER TABLE tradeADD FOREIGN KEY (seller_id) REFERENCES user(uid);

trade

tid (int) item (varCHAR 32) price (dec 10, 2) seller_id (CHAR 8)

user

uid (CHAR 8) name (VARCHAR 32) money (INT) score (INT)

Page 9: MySQL JOIN

처음부터외래키 컬럼을지정할수도 있습니다.

trade

tid (int) item (varCHAR 32) price (dec 10, 2) seller_id (CHAR 8)

user

uid (CHAR 8) name (VARCHAR 32) money (INT) score (INT)

CREATE TABLE trade(tid INT,item VARCHAR(32),price DEC(10,2),seller_id (CHAR),PRIMARY KEY(tid),FOREIGN KEY(seller_id) REFERENCES user(uid)

);

Page 10: MySQL JOIN

외래키제약조건을삭제하려면?

SHOW CREATE TABLE trade\G

ALTER TABLE tradeDROP FOREIGN_KEY 'trade_ibfk_1';

Page 11: MySQL JOIN

오늘의실습 테이블 만들기

Page 12: MySQL JOIN

팁: db 백업하기

$ mysqldump -u popi -p popidb > backup.sql

Page 13: MySQL JOIN

스크립트로부터직접 넣기

$ mysql -u popi -p popidb < backup.sql

Page 14: MySQL JOIN

JOIN

두 테이블을합쳐서하나로 보여주는기능

Page 15: MySQL JOIN

* 참고: 유니온이란?

유니온 = 합집합

조인

유니온 : 속성들의순서와자료형이같을 때만 가능

JOIN =

UNION =

Page 16: MySQL JOIN

유니온(Union)

학생과교수의 이름을출력하세요.

SELECT name FROM stuUNIONSELECT name FROM prof

SELECT name FROM stuUNIONSELECT name FROM prof

Page 17: MySQL JOIN

카테시안곱

이름의유래? René Descartes = Renatus Cartesius

Page 18: MySQL JOIN

크로스조인(Cross Join)

크로스조인

= 두 테이블의카테시안곱

SELECT * FROM stuCROSS JOIN prof;

Page 19: MySQL JOIN

크로스조인에 WHERE 문을추가해 봅시다.

학생과지도 교수 정보를출력하세요.

SELECT * FROM stuCROSS JOIN profWHERE stu.pid = prof.pid;

Page 20: MySQL JOIN

내부 조인(Inner Join)

내부 조인

= 크로스조인 + 조건필터링

INNER 는 생략가능

SELECT * FROM stuINNER JOIN profON stu.pid = prof.pid;

Page 21: MySQL JOIN

그런데사라진 정보가있습니다.

SELECT * FROM stuINNER JOIN profON stu.pid = prof.pid;

Page 22: MySQL JOIN

조인의형식

INNER JOIN 중에서

가장 많이사용하는 ‘=’을 조인조건으로사용하는경우

동등 조인(EQI – JOIN)이라고 합니다.

SELECT 컬럼이름,...FROM 테이블이름[INNER] JOIN 조인 테이블ON 조인조건;

Page 23: MySQL JOIN

세타 조인

내부 조인중 동등 조인을제외한 나머지들

"지도교수가구승모가아닌 학생의정보를 보여주세요."

SELECT * FROM stu sJOIN prof pON s.pid <> p.pidWHERE p.name = '구승모';

Page 24: MySQL JOIN

여러 테이블조인

JOIN도 닫힌연산이라 여러번 조인이됩니다.

1번학생이 듣고있는 수업과담당 교수 이름을표시해보세요.

Page 25: MySQL JOIN

여러 테이블조인

1번 학생의 이름, 수강 수업명, 강의교수 이름을 표시해 보세요.

SELECTs.id, s.name as sname, c.name as cname, p.name as pname

FROM stu sJOIN sugang gON s.id = g.uidJOIN class cON g.cid = c.cidJOIN prof pON c.pid = p.pidWHERE s.id = 1;

Page 26: MySQL JOIN

외부 조인(Outer Join)

내부 조인을 할 때 조인 조건에 맞지 않는 레코드가 사라집니다.

사라진레코드를 보려면외부 조인을사용합니다.

외부 조인에는 LEFT, RIGHT, FULL 의 3종류가있습니다.

MySQL은 FULL OUTER JOIN을 지원하지않습니다.

Page 27: MySQL JOIN

Left Join

왼쪽 테이블의조건에맞지 않는레코드도 보여줍니다.

SELECT * FROM stu sLEFT JOIN prof pON s.pid = p.pid;

Page 28: MySQL JOIN

Right Join

오른쪽테이블의 레코드를보여줍니다.

INSERT INTO prof values(3, '정호영');SELECT *

FROM stu sRIGHT JOIN prof pON s.pid = p.pid;

Page 29: MySQL JOIN

Full Outer Join

양쪽 다 보여줘야하는데 MySQL에 없습니다.

어떻게해야 할까요?

Page 30: MySQL JOIN

THANK YOU!!!