세계의 테이블 조인하기
다대다 관계

USE sqldb; CREATE TABLE stdtbl ( stdName VARCHAR(10) NOT NULL PRIMARY KEY, addr CHAR(4) NOT NULL ); CREATE TABLE clubtbl ( clubName VARCHAR(10) NOT NULL PRIMARY KEY, roomNo CHAR(4) NOT NULL ); CREATE TABLE stdclubtbl ( num int AUTO_INCREMENT NOT NULL PRIMARY KEY, stdName VARCHAR(10) NOT NULL, clubName VARCHAR(10) NOT NULL, FOREIGN KEY(stdName) REFERENCES stdtbl(stdName), FOREIGN KEY(clubName) REFERENCES clubtbl(clubName) );
INSERT INTO stdtbl VALUES ('김범수','경남'), ('성시경','서울'), ('조용필','경기'), ('은지원','경북'),('바비킴','서울');
INSERT INTO clubtbl VALUES ('수영','101호'), ('바둑','102호'), ('축구','103호'), ('봉사','104호');
INSERT INTO stdclubtbl VALUES (NULL, '김범수','바둑'), (NULL,'김범수','축구'), (NULL,'조용필','축구'), (NULL,'은지원','축구'), (NULL,'은지원','봉사'), (NULL,'바비킴','봉사');
SELECT * from clubtbl; select * from stdtbl; SELECT * from stdclubtbl;
-- 2개 조인
SELECT S.stdName, S.addr, SC.clubName
FROM stdtbl S
INNER JOIN stdclubtbl SC
ON S.stdName = SC.stdName
ORDER BY S.stdName;
-- 3개 조인
SELECT S.stdName, S.addr, SC.clubName, C.roomNo
FROM stdtbl S
INNER JOIN stdclubtbl SC
ON S.stdName = SC.stdName
INNER JOIN clubtbl C
ON SC.clubName = C.clubName
ORDER BY S.stdName;
3개 조인 최종 예제
SELECT S.stdName, S.addr, SC.clubName, C.roomNo
FROM stdtbl S
INNER JOIN stdclubtbl SC
ON S.stdName = SC.stdName
INNER JOIN clubtbl C
ON SC.clubName = C.clubName
ORDER BY S.stdName;
SELECT C.clubName, C.roomNo, S.stdName, S.addr
FROM stdtbl S
INNER JOIN stdclubtbl SC
ON SC.stdName = S.stdName
INNER JOIN clubtbl C
ON SC.clubName = C.clubName
ORDER BY C.clubName;
HAVING 구문 살펴보기
신규 데이터 베이스 만들기
bestproducts 데이터베이스 생성하기
2개의 sql 구문을 실행해서 데이터를 모두 입력
having 절은 group by 절과 함께 사용한다.
having 절은 집계함수를 가지고 조건 비교를 할 때 사용한다.
gmarket 화면과 테이블 구조 살펴보기
sum, avg , count 등의 group by와 집계함수는 wherer와 함께 사용하지 못한다.
SELECT provider FROM items GROUP BY provider HAVING count(*) >= 100;
업체 100개 를 정리해서 보여줘 구문
-- sum, avg , count 등의 group by와 집계함수는 wherer와 함께 사용하지 못한다. -- 아래 코드를 한번씩 실습해서 결과를 체크한다. SELECT provider, count(*) from items; SELECT provider FROM items WHERE count(*) >= 100; SELECT provider, count(*) FROM items GROUP BY provider HAVING count(*) >= 100;
아래 코드 실습하기
SELECT provider, count(*) from items; SELECT provider FROM items WHERE count(*) >= 100; SELECT provider, count(*) FROM items GROUP BY provider HAVING count(*) >= 100;