[혼공S] 3주차 Chap 04. [혼공학습단 13기]

YOUNG·2025년 1월 22일
0
[혼공학습단 13기] 활동의 일환으로 한빛미디어의 < 혼자 공부하는 SQL >을 읽고 요약 정리한 글입니다.

Chap 04. SQL 고급 문법

1. MySQL의 데이터 형식

데이터 형식

정수형

TINYINT/SMALLINT/INT/BIGINT가 있으며 각각 바이트 수가 1/2/4/8이다.
또한, 정수형에 UNSIGNED를 붙이면 범위가 0부터 지정된다.
입력값의 범위를 벗어나면 Out of range

문자형

CHAR(개수): 고정길이 문자형.
VARCHAR(개수): 가변길이 문자형. 바이트 수 훨씬 크다.

대량의 데이터 형식

대량의 텍스트는 LONGTEXT, 대량의 이진 데이터는 LONGBLOB으로 설정한다.

실수형

FLOAT은 소수점 아래 7자리까지, DOUBLE은 15자리까지 표현한다.

날짜형

DATE는 날짜만, TIME은 시간만, DATETIME은 날짜와 시간 모두 저장할 때 사용한다.

변수의 사용

SET @변수이름 = 변수의 값 ;
SELECT @변수이름 ;

첫 줄은 변수의 선언 및 값 대입, 다음 줄은 변수의 값 출력.

LIMIT에는 변수 사용이 불가능
👉대신 PREPARE, EXECUTE를 사용한다.

데이터 형 변환

함수를 이용한 명시적인 변환

👉직접 함수를 사용해서 변환

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

CAST()CONVERT()는 형식은 다르나 동일한 기능을 한다.
CAST()나 CONVERT() 함수 안에 올 수 있는 데이터 형식은 CHAR, SIGNED, UNSIGNED, DATE 등이 있다.
(※ SIGNED는 부호가 있는 정수, UNSIGNED는 부호가 없는 정수를 의미한다.)

임시적인 변환

👉별도의 지시 없이 자연스럽게 변환
EX) '100' + '200' 처럼 문자열을 더하는 것은 불가능하므로 자동으로 숫자로 변환해 덧셈을 수행한다.

※CONCAT() 함수는 문자를 연결하는 역할을 한다.


2. 두 테이블을 묶는 조인

조인 : 두 테이블을 묶어서 정보를 추출하는 것

내부 조인

일반적으로 조인이라 부르면 내부 조인을 의미한다.
일대다 관계 : 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계 👉 기본 키-외래 키 관계

SELECT <열 목록>
FROM <첫 번째 테이블>
	INNER JOIN <두 번째 테이블>
    ON <조인될 조건>
[WHERE 검색 조건]
  • INNER는 생략 가능
  • SQL을 명확하게 하기 위해 테이블_이름.열_이름형식으로 작성하는 것이 좋다.
  • 별칭을 통해 더 간결한 표현 가능
  • 두 테이블에 모두 있는 내용만 출력

외부 조인

내부 조인과 달리 한쪽 테이블에만 있는 내용도 출력 가능하다.

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

LEFT OUTER JOIN 👉 왼쪽 테이블의 내용 모두 출력

기타 조인

상호 조인

한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능
CROSS JOIN을 사용한다.
👉행 개수는 두 테이블의 행의 개수를 곱한 값이 된다.
대용량의 테스트용 테이블을 만들 때 사용

자체 조인

자신이 자신과 조인. 별도 문법 없이 1개로 조인하면 된다.
👉테이블은 1개지만 별칭을 사용하여 서로 다른 것처럼 조인한다.

[기본 숙제]

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

  1. 다음 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;

답: 4️⃣WHERE B.prod_name IS NULL

[추가 숙제]

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


3. SQL 프로그래밍

스토어드 프로시저 : MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 개체로 다음과 같은 구조를 가진다.

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

IF 문

기본 형식

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

IF 문은 조건식이 참이라면 'SQL 문장들'을 실행하고, 아니면 그냥 넘어간다.

✅SQL 문장들이 둘 이상이라면 BEGIN ~ END로 묶어줘야 한다.(한 문장이라도 묶어주는 것을 권장)

IF ~ ELSE 문

조건식이 참일 때와 거짓일 때 다른 부분이 실행된다.

CASE 문

IF 문은 참 혹은 거짓 두 가지만 있는 2중 분기
CASE 문은 2가지 이상의 여러 가지 경우 처리 가능한 다중 분기

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

조건이 여러 개일 때, WHEN을 여러 번 반복하면 된다.

WHILE 문

WHILE 문은 조건식이 참인 동안에 SQL문장들을 계속 반복한다.

WHILE <조건식> DO
	SQL 문장들
END WHILE;
  • ITERATE[레이블] : 지정한 레이블로 가서 계속 진행한다. (프로그래밍 언어의 CONTINUE와 유사)
  • LEAVE[레이블] : 지정한 레이블을 빠져나간다. 즉, WHILE 문 종료 (프로그래밍 언어의 BREAK와 유사)

동적 SQL

👉 미리 SQL을 준비한 후 나중에 실행

  • PREPARE : SQL 문을 실행하지 않고 미리 준비
  • EXECUTE : 준비한 SQL문 실행
    실행 후에는 DEALLOCATE PREPARE로 문장을 해제하는 것이 바람직

profile
개발 연습생

0개의 댓글

관련 채용 정보