본문 바로가기
Study/혼공학습단

[혼공단9기] 혼공학습단 9기 3주차 - SQL 고급 문법, 데이터 형식, 테이블 묶는 조인, 프로그래밍(feat. 혼자 공부하는 SQL, 혼공S, 혼공스)

by 잇포에듀 2023. 1. 19.
반응형

[혼공단9기] 혼공학습단 9기 3주차 - SQL 고급 문법, 데이터 형식, 테이블 묶는 조인, 프로그래밍(feat. 혼자 공부하는 SQL, 혼공S, 혼공스)

 


이번 주 스터디 내용 요약

MySQL의 데이터 형식

정수형

데이터 형식 바이트 수 숫자 범위
TINYINT 1 -128 ~ 127
SMALLINT 2 -32,768 ~ 32,767
INT 4 약 -21억 ~ +21억
BIGINT 8 약 -900경 ~ +900경

정수형에 UNSIGNED를 붙이면 0부터 범위가 지정됨. (예, UNSIGNED TINYINT 역시 1바이트이며 0 ~ 255로 표현)


문자형

데이터 형식 바이트 수
CHAR(개수) 1 ~ 255
VARCHAR(개수) 1 ~ 16383

VARCHAR는 가변길이 문자형이며 CHAR보다 공간을 효율적으로 운영할 수 있지만, 내부적으로 성능면에서는 CHAR로 설정하는 것이 조금 더 좋음.


대량의 데이터 형식

데이터 형식 바이트 수
TEXT 형식 TEXT 1 ~ 65535
LONGTEXT 1 ~ 4294967295
BLOB 형식 BLOB 1 ~ 65535
LONGBLOB 1 ~ 4294967295

실수형

데이터 형식 바이트 수 설명
FLOAT 4 소수점 아래 7자리까지 표현
DOUBLE 8 소수점 아래 15자리까지 표현

날짜형

데이터 형식 바이트 수 설명
DATE 3 날짜만 저장. YYYY-MM-DD 형식으로 사용
TIME 3 시간만 저장. HH:MM:SS 형식으로 사용.
DATETIME 8 날짜 및 시간을 저장. YYYY-MM-DD HH:MM:SS 형식으로 사용

변수의 사용

SET @변수이름 = 변수의 값;  -- 변수의 선언 및 값 대입
SELECT @ 변수이름;  -- 변수의 값 출력

변수는 MySQL 워크벤치를 재시작할 때까지는 유지되지만, 종료하면 없어짐.


데이터 형 변환

CAST ( 값 AS 데이터_형식 [ (길이) ] )
CONVERT ( 값, 데이터_형식 [ (길이) ] )

두 테이블을 묶는 조인

조인(join)이란 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것.

 

내부 조인

일반적으로 조인이라고 부르는 것은 내부조인(inner join)을 의미함.

SELECT <열 목록>
    FROM <첫 번째 테이블>
        INNER JOIN <두 번째 테이블>
        ON <조인될 조건>
    [WHERE 검색 조건]

외부 조인

외부 조인(outer join)은 두 테이블을 조인할 때 필요한 내용이 한쪽 테이블에만 있어도 결과를 추출할 수 있음.

SELECT <열 목록>
    FROM <첫 번째 테이블(LEFT 테이블)>
        <LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
        ON <조인될 조건>
    [WHERE 검색 조건]

 

상호 조인

상호 조인(cross join)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능.

SELECT <열 목록>
    FROM <첫 번째 테이블>
        CROSS JOIN <두 번째 테이블>
    [WHERE 검색 조건]
  • ON 구문을 사용할 수 없음.
  • 결과의 내용은 의미가 없음. 랜덤으로 조인.
  • 주 용도는 테스트하기 위한 대용량의 데이터를 생성.

자체 조인

자체 조인(self join)은 자신이 자신과 조인한다는 의미.

SELECT <열 목록>
    FROM <테이블> 별칭A
        INNER JOIN <테이블> 별칭B
        ON <조인될 조건>
    [WHERE 검색 조건]

SQL 프로그래밍

SQL 프로그래밍은 기본적으로 스토어드 프로시저 안에 만들어야 함.

DELIMITER $$
CREATE PROCEDURE 스토어드_프로시저_이름()
BEGIN
    -- 이 부분에 SQL 프로그래밍 코딩
END $$
DELIMITER ;
CALL 스토어드_프로시저_이름();

IF 문

IF <조건식> THEN
    SQL문장들
END IF;

 

SQL문장들이 두 문장 이상 처리되어야 할 때는 BEGIN ~ END로 묶어줘야 함.


IF ~ ELSE 문

IF <조건식> THEN
    SQL문장들1
ELSE
    SQL문장들2
END IF;

CASE 문

CASE
    WHEN 조건1 THEN
        SQL문장들1
    WHEN 조건2 THEN
        SQL문장들2
    WHEN 조건3 THEN
        SQL문장들3
    ELSE
        SQL문장들4
END CASE;

WHILE 문

WHILE <조건식> DO
    SQL 문장들
END WHILE;

이번 주 과제는 아래와 같습니다.

# 진도 기본 미션 선택 미션
3주차
(1/16 ~ 1/22)
Chapter 04 p. 195의 확인 문제 4번 풀고 인증하기 p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기

기본 미션

p. 195의 확인 문제 4번 풀고 인증하기

 

다음 SQL은 회원으로 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록입니다. 빈칸에 들어갈 가장 적합한 것을 고르세요.

SELECT DISTINCT M.mem_id, B.prod_name, M.mem_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

 

정답은 ④ WHERE B.prod_name IS NULL 입니다. 조건문을 사용할 때는 WHERE!!! HAVING은 GROUP BY와 함께 사용한답디다.

 


선택 미션

p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기

 

"우리 사이트에서 한 번이라도 구매한 기록이 있는 회원들을 검색해보자!"

 

SELECT DISTINCT M.mem_id, M.mem_name, M.addr
  FROM buy B
    INNER JOIN member M
    ON B.mem_id = M.mem_id
  ORDER BY M.mem_id;

손코딩 결과 옜다!

중복된 결과는 필요 없으므로 DISTINCT를 사용하였고, INNER JOIN으로 두 테이블을 조인하였으며(두 테이블에 모두 있는 내용만 필요), 아이디 순으로 정렬하기 위해 ORDER BY를 사용함.

 


https://www.youtube.com/watch?v=30KENiV3BdY 

 

2023년 목표대로 나름 꾸준히 공부하고 있음.

 

 

이번에도 구독과 좋아요, 알림설정은 부탁 해요...ㅎㅎ 구걸해요...

 

 

http://bit.ly/3GlGmdm

 

혼자 공부하는 SQL - YES24

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

www.yes24.com

 

 

반응형

댓글