본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/Database

1/28 금

728x90

설 연휴를 앞둔 금요일!!

 

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개 내주신 것 풀고, 파이썬 알고리즘도 매일 풀자!

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > Database' 카테고리의 다른 글

1/27 목  (0) 2022.01.27
1/26 수  (0) 2022.01.26
1/25 화  (0) 2022.01.25