본문 바로가기
혼공학습단

[혼공단11기] 혼자 공부하는 SQL 3주차(Chapter 04)

by #FF0000 2024. 1. 21.

 

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개만 출력하기

 

 

 

 

 

 

혼자 공부하는 SQL | 우재남 - 교보문고

혼자 공부하는 SQL | 혼자 해도 충분하다! 1:1 과외하듯 배우는 데이터베이스 자습서(MySQL Community 8.0 지원) 이 책은 아무런 사전 지식 없는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록

product.kyobobook.co.kr

https://product.kyobobook.co.kr/detail/S000001810432

 

 

 

 

+ chat GPT를 활용해 SQL QUERY 생성하기.