설 연휴를 앞둔 금요일!!
JOIN : 두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것
INNER JOIN : 가장 많이 사용되는 조인. 양쪽 테이블에 모두 내용이 있는 것만 조인됨
USE sqldb;
SELECT * FROM UserTBL;
SELECT * FROM buyTBL;
SELECT * -- INNER JOIN
FROM buyTBL
INNER JOIN userTBL
ON buyTBL.userID = userTBL.userID
WHERE buyTBL.userID = 'JYP';
SELECT *
FROM buyTBL
INNER JOIN userTBL
ON buyTBL.userID = userTBL.userID
WHERE productName = '운동화';
SELECT B.userID, B.productName, U.userName, U.userHeight -- Alias 별칭
FROM buyTBL B -- Alias 별칭
INNER JOIN userTBL U -- Alias 별칭
ON B.userID = U.userID;
CREATE TABLE stdTBL (
stdName VARCHAR(10) PRIMARY KEY,
stdAddr VARCHAR(4) NOT NULL);
CREATE TABLE clubTBL (
clubName VARCHAR(10) PRIMARY KEY,
clubRoom VARCHAR(4) NOT NULL);
CREATE TABLE stdclubTBL (
num INT AUTO_INCREMENT PRIMARY KEY,
stdName VARCHAR(10) NOT NULL,
clubName VARCHAR(10) NOT NULL,
FOREIGN KEY(stdName) REFERENCES stdTBL(stdName),
FOREIGN KEY(clubName) REFERENCES clubTBL(clubName));
SELECT * FROM stdTBL;
SELECT * FROM clubTBL;
SELECT * FROM stdclubTBL;
INSERT INTO stdTBL VALUES('김범수', '경남');
INSERT INTO stdTBL VALUES('성시경', '서울');
INSERT INTO stdTBL VALUES('조용필', '경기');
INSERT INTO stdTBL VALUES('은지원', '경북');
INSERT INTO stdTBL VALUES('바비킴', '서울');
INSERT INTO clubTBL VALUES('수영', '101호');
INSERT INTO clubTBL VALUES('바둑', '102호');
INSERT INTO clubTBL VALUES('축구', '103호');
INSERT INTO clubTBL VALUES('봉사', '104호');
INSERT INTO stdclubTBL VALUES(NULL, '김범수', '바둑');
INSERT INTO stdclubTBL VALUES(NULL, '김범수', '축구');
INSERT INTO stdclubTBL VALUES(NULL, '조용필', '축구');
INSERT INTO stdclubTBL VALUES(NULL, '은지원', '축구');
INSERT INTO stdclubTBL VALUES(NULL, '은지원', '봉사');
INSERT INTO stdclubTBL VALUES(NULL, '바비킴', '봉사');
-- 학생을 기준으로 학생 이름/지역/가입한 동아리/동아리방을 출력하자
SELECT S.stdName, S.stdAddr, C.clubName, C.clubRoom
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.clubRoom, S.stdName, S.stdAddr
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;
SELECT * FROM userTBL;
SELECT * FROM buyTBL;
SELECT * FROM userTBL U -- 구매한 사람만 조회함
INNER JOIN buyTBL B
ON U.userID = B.UserID;
OUTER JOIN : LEFT OUTER JOIN / RIGHT OUTER JOIN / FULL OUTER JOIN
-- LEFT OUTER JOIN은 왼쪽 테이블의 모든 것 출력. 전체 회원의 구매기록 but 기록 없는 회원도 출력
SELECT U.userID, U.userName, B.productName, B.buyAmount FROM userTBL U
LEFT OUTER JOIN buyTBL B
ON U.userID = B.UserID
ORDER BY U.userID;
-- RIGHT OUTER JOIN
SELECT U.userID, U.userName, B.productName, B.buyAmount FROM buyTBL B
RIGHT OUTER JOIN userTBL U
ON U.userID = B.UserID
ORDER BY U.userID;
NULL은 특수한 의미를 지니는 값이므로 = 기호로 비교할 수 없음. → IS 사용
-- 유령 회원의 목록
SELECT U.userID, U.userName, B.productName, CONCAT(U.mobile1, U.mobile2) AS '연락처' FROM userTBL U
LEFT OUTER JOIN buyTBL B
ON U.userID = B.UserID
WHERE B.productName IS NULL -- '=' 사용할 수 없음
ORDER BY U.userID;
UNION : 두 query의 결과를 행으로 합침. column의 개수와 data type이 같아야 함. 중복된 열은 제거됨
UNION ALL : 중복된 열까지 모두 출력됨
CONCAT : 문자열 두 개를 연결시킴 ex) CONCAT(mobile1, mobile2) AS '연락처'
NOT IN : 첫 번째 query의 결과 중에서 두 번째 query에 해당하는 것을 제외함(SubQuery)
SELECT stdName, stdAddr FROM stdTBL
UNION ALL -- UNION
SELECT clubName, clubRoom FROM clubTBL;
SELECT stdName AS 'column1', stdAddr AS 'column2' FROM stdTBL -- column의 갯수와 data type이 같아야함
UNION ALL -- UNION
SELECT clubName, clubRoom FROM clubTBL;
SELECT * FROM userTBL WHERE mobile1 IS NOT NULL; -- 전화가 없는 사람을 제외
SELECT userID, userName, CONCAT(U.mobile1, U.mobile2) AS '연락처' FROM userTBL U
WHERE userName NOT IN (SELECT userName FROM userTBL WHERE mobile1 IS NULL); -- NOT IN은 전화가 없는 사람을 제외
SELECT userID, userName, CONCAT(U.mobile1, U.mobile2) AS '연락처' FROM userTBL U
WHERE userName IN (SELECT userName FROM userTBL WHERE mobile1 IS NULL); -- IN은 전화가 없는 사람을 출력
Database 마무리하고 내용이 (너무) 많은 WEB으로 넘어갑니다!
LAN, MAN, WAN. Gateway. Network Infra. Internet. Service. CS구조. protocol, IP 주소. port. http. rendering
MySQL 연습문제
ROUND(, -2) : 반올림, 반올림하는 자릿수. ex) -2는 십 단위에서 반올림, 2758 → 2800
COUNT() : 행의 개수 샘
FORMAT(, 0) : 숫자를 소수점 아래 자릿수까지 표현, 정수가 필요하다면 뒤에 0 넣기, 천 단위마다 콤마를 표시함
IFNULL(, 0) : 수식 1이 NULL이면 수식 2가 반환됨
CASE문 : CASE~WHEN~ELSE~END, 다중 분기에 사용됨. 파이썬 조건문(if, elif, else)과 동일
1. 1/17 월 | 2. 1/18 화 | 3. 1/19 수 | 4. 1/20 목 | 5. 1/21 금 |
취업 특강 | 파이썬 환경 설정 (파이참, 아나콘다, 주피터 노트북) |
파이썬 데이터 타입 (list, tuple) |
파이썬 데이터 타입 (range, string, dictionary, set, bool) |
파이썬 사용자 정의 함수, 객체지향, 사용자 정의 클래스 |
6. 1/24 월 | 7. 1/25 화 | 8. 1/26 수 | 9. 1/27 목 | 10. 1/28 금 |
파이썬 사용자 정의 클래스, 사용자 정의 모듈 |
DB(MySQL) DBMS, MySQL 환경 설정, DB/테이블 생성, DB 입력·활용, Index |
DB(MySQL) View, 백업과 복원, DB 모델링, 관계(PK, FK), DML(CRUD), 데이터 타입 |
DB(MySQL) DML(CRUD), WHERE 조건, 패턴 매칭, SubQuery, 정렬, 그룹핑, 집계 함수, 트랜잭션(ACID 특성) |
DB(MySQL) JOIN, UNION, NOT IN, WEB |
* SQL 연습문제 9개 내주신 것 풀고, 파이썬 알고리즘도 매일 풀자!
'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > Database' 카테고리의 다른 글
1/27 목 (0) | 2022.01.27 |
---|---|
1/26 수 (0) | 2022.01.26 |
1/25 화 (0) | 2022.01.25 |