3주차(24.1.15 - 1.21) Chapter 04
스토어드 프로시저 : MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 개체.
DELIMITER $$ ~ END $$ 안에 작성, CALL로 호출
DELIMITER $$
CREATE PROCEDURE 스토어드_프로시저_이름;
BEGIN
SQL QUERY
END $$ /* 스토어드 프로시저 종료 */
DELIMITER;
CALL 스토어드_프로시저_이름(); /* 스토어드 프로시저 실행 */
IF 문 : 조건식이 참이라면 'SQL QUERY'를 실행하고, 그렇지 않으면 ELSE 이후 처리 // 2중 분기
DROP PROCEDURE IF EXISTS ifProc3;
DELIMITER $$
CREATE PROCEDURE ifProc3()
BEGIN
DECLARE debutDate DATE; -- 데뷰일
DECLARE curDate DATE; -- 오늘
DECLARE days INT; -- 활동한 일수
SELECT debut_date INTO debutDate -- debut_date 결과를 hireDATE에 대입
FROM market_db.member
WHERE mem_id = 'APN';
SET curDATE = CURRENT_DATE(); -- 현재 날짜
SET days = DATEDIFF(curDATE, debutDate); -- 날짜의 차이, 일 단위
/* IF 조건문 */
IF (days/365) >= 5 THEN -- 5년이 지났다면
SELECT CONCAT('데뷔한지 ', days, '일이나 지났습니다. 핑순이들 축하합니다!');
ELSE
SELECT '데뷔한지 ' + days + '일밖에 안되었네요. 핑순이들 화이팅~' ;
END IF;
END $$
DELIMITER ;
CALL ifProc3();
CASE 문 : 여러가지 조건 중에서 선택할 시 조건 설정. // 다중분기
DROP PROCEDURE IF EXISTS caseProc;
DELIMITER $$
CREATE PROCEDURE caseProc()
BEGIN
DECLARE point INT ;
DECLARE credit CHAR(1);
SET point = 88 ;
/* CASE 조건문 */
CASE
WHEN point >= 90 THEN
SET credit = 'A';
WHEN point >= 80 THEN
SET credit = 'B';
WHEN point >= 70 THEN
SET credit = 'C';
WHEN point >= 60 THEN
SET credit = 'D';
ELSE
SET credit = 'F';
END CASE;
SELECT CONCAT('취득점수==>', point), CONCAT('학점==>', credit);
END $$
DELIMITER ;
CALL caseProc();
WHILE 문 : 조건식이 참인 동안 'SQL QUERY' 반복
DROP PROCEDURE IF EXISTS whileProc;
DELIMITER $$
CREATE PROCEDURE whileProc()
BEGIN
DECLARE i INT; -- 1에서 100까지 증가할 변수
DECLARE hap INT; -- 더한 값을 누적할 변수
SET i = 1;
SET hap = 0;
/* WHILE 조건문 */
WHILE (i <= 100) DO
SET hap = hap + i; -- hap의 원래의 값에 i를 더해서 다시 hap에 넣으라는 의미
SET i = i + 1; -- i의 원래의 값에 1을 더해서 다시 i에 넣으라는 의미
END WHILE;
SELECT '1부터 100까지의 합 ==>', hap;
END $$
DELIMITER ;
CALL whileProc();
기본미션
▶ P.138 확인문제 풀이
1. 두 테이블이 일대다의 관계로 연결하기 위한 관계의 전제 조건으로 적절한 것을 고르세요.
① 기본 키 - 기본 키 관계
② 외래 키 - 외래 키 관계
③ 기본 키 - 외래 키 관계
④ 외래 키 - 기본 키 관계
2. 다음 설명은 어떤 조인에 대한 내용인지 보기에서 각각 고르세요.
① 가장 많이 사용되는 조인으로, 일반적으로 부르는 조인이다. - 내부 조인
② 한쪽 테이블에만 데이터가 있어도 결과가 나오는 조인이다. - 외부 조인
③ 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시킨다. - 상호 조인
④ 한 개의 테이블이 자신과 조인되는 것을 말한다. - 자체 조인
3. 외부 조인의 종류가 아닌 것을 1개 고르세요.
① LEFT OUTER JOIN
② RIGHT OUTER JOIN
③ CENTER OUTER JOIN
④ FULL OUTER JOIN
4. 다음 SQL은 회원으로 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록입니다. 빈칸에 들어갈 가장 적합한 것을 고르세요.
SELECT DISTINCT M.mem_id, 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;
① JOIN B.prod_name IS NULL
② LIMIT B.prod_name IS NULL
③ HAVING B.prod_name IS NULL
④ WHERE B.prod_name IS NULL
5. 다음 빈칸에 들어갈 용어를 보기에서 고르세요.
내부 조인, 외부 조인, 상호 조인, 자체 조인
상호 조인은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능을 말합니다. 그래서 상호 조인 결과의 개수는 두 테이블 개수를 곱한 개수가 됩니다.
자체 조인은 자신이 자신과 조인된다는 의미입니다. 그래서 자체 조인은 1개의 테이블을 사용합니다.
선택미션
▶ p.183 [좀 더 알아보기] - 중복된결과 1개만 출력하기
https://product.kyobobook.co.kr/detail/S000001810432
+ chat GPT를 활용해 SQL QUERY 생성하기.
'혼공학습단(한빛미디어)' 카테고리의 다른 글
[혼공단11기] 혼자 공부하는 SQL 5주차(Chapter 06) (0) | 2024.02.04 |
---|---|
[혼공단11기] 혼자 공부하는 SQL 4주차(Chapter 05) (0) | 2024.01.28 |
[혼공단11기] 혼자 공부하는 SQL 2주차(Chapter 03) (0) | 2024.01.14 |
[혼공단11기] 혼자 공부하는 SQL 1주차(Chapter 01 - 02) (0) | 2024.01.07 |
[혼공단 10기] 혼자 공부하는 머신러닝 + 딥러닝(혼공머신) - 6주차(fin) (0) | 2023.08.19 |