MySQL
요약 노트 (2022년 1월 ~ 2022년 3월까지 공부했던 내용 정리)
혼자 공부하는 SQL책과 한빛미디어에서 제공하는 유튜브 강의로 공부함
UNSIGNED
예약어: 값의 범위가 0부터 시작됨CHAR
VARCHAR
TEXT
: 글자 데이터(대량의 텍스트)BLOB
: 글자가 아닌 이미지, 동영상 등의 데이터(대량의 이진 데이터)FLOAT
사용(ex. 시력)SET @변수이름 = 변수의 값; -- 변수의 선언 및 값 대입
SELECT @변수이름; -- 변수의 값 출력
LIMIT
에는 변수를 사용할 수 없음(문법상 오류)LIMIT
에 변수를 사용하기 위해 PREPARE
와 EXECUTE
사용PREPARE
는 실행하지 않고 SQL 문만 준비해 놓고EXECUTE
에서 실행하는 방식CAST()
, CONVERT()
형식CAST (값 AS 데이터_형식 [ (길이) ])
CONVERT (값, 데이터_형식 [ (길이) ])
SELECT CONCAT(100, '200'); -- output: 100200 (숫자 100이 문자로 자동 변환)
SELECT 100 + '200'; -- output: 300 (문자 '200'이 숫자로 자동 변환)
조인: 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것
내부 조인: 두 테이블에 모두 데이터가 있어야만 결과가 나옴
일대다(one to many) 관계: 주로 기본 키(PK)와 외래 키(FK) 관계(PK-FK 관계)
내부 조인 형식(INNER JOIN
=JOIN
)
SELECT <열 목록>
FROM <첫 번째 테이블> 별칭
INNER JOIN <두 번째 테이블> 별칭 -- 혹은 JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건];
테이블이름.열이름
형식으로 표기FROM
절에 나오는 테이블의 이름 뒤에 별칭(alias)을 줄 수 있음DISTINCT
문 활용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;
외부 조인: 한쪽에만 데이터가 있어도 결과가 나옴
OUTER JOIN
)SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)> 별칭
<LEFT|RIGHT|FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)> 별칭
ON <조인될 조건>
[WHERE 검색 조건];
LEFT OUTER JOIN
문: 왼쪽 테이블의 내용은 모두 출력되어야 한다(왼쪽에 있는 테이블을 기준으로 외부 조인)RIGHT OUTER JOIN
문: 오른쪽 테이블의 내용은 모두 출력되어야 한다(오른쪽에 있는 테이블을 기준으로 외부 조인)FULL OUTER JOIN
문: 왼쪽 외부 조인과 오른쪽 외부 조인이 합쳐진 것으로 왼쪽이든 오른쪽이든 한쪽에 들어 있는 내용이면 출력함기타 조인(상호 조인, 자체 조인)
1) 상호 조인(CROSS JOIN
): 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능(=카티션 곱)
SELECT <열 목록>
FROM <첫 번째 테이블>
CROSS JOIN <두 번째 테이블>;
ON
구문을 사용할 수 없음, 2. 결과의 내용은 의미가 없음(랜덤 조인), 3. 상호 조인의 주 용도는 테스트하기 위해 대용량의 데이터를 생성할 때CREATE TABLE ~ SELECT
문CREATE TABLE <테이블_이름>
SELECT <열 목록>
FROM <첫 번째 테이블>
CROSS JOIN <두 번째 테이블>;
2) 자체 조인: 자신이 자신과 조인한다(1개의 테이블을 사용함)
SELECT <열 목록>
FROM <테이블> 별칭A
JOIN <테이블> 별칭B;
ON <조인될 조건>
[WHERE 검색 조건];
DELIMITER $$ -- 스토어드 프로시저의 코딩
CREATE PROCEDURE 스토어드_프로시저_이름()
BEGIN
이 부분에 SQL 프로그래밍 코딩
END $$ -- 스토어드 프로시저 종료
DELIMITER ; -- 종료 문자를 다시 세미콜론(;)으로 변경
CALL 스토어드_프로시저_이름(); -- 스토어드 프로시저 실행
DECLARE
로 선언, SET
으로 값을 대입IF
문: 조건식이 참이라면 'SQL 문장들' 실행하고 거짓이면 그냥 넘어감IF
문은 조건식이 참이면 실행IF
문 기본 형식BEGIN ~ END
IF <조건식> THEN
SQL 문장들
END IF;
IF ~ ELSE
문: 조건에 따라 다른 부분을 수행할 때IF ~ ELSE
문은 조건식이 참일 때와 거짓일 때 다른 부분이 실행IF ~ ELSE
문 기본 형식IF <조건식> THEN
SQL 문장들1
ELSE
SQL 문장들2
END IF;
CURRENT_DATE()
: 오늘 날짜를 알려줌CURRENT_TIMESTAMP()
: 오늘 날짜 및 시간을 함께 알려줌DATEDIFF(날짜1, 날짜2)
: 날짜2부터 날짜1까지 일수로 몇일인지 알려줌CASE
문: 여러 가지 조건 중에서 선택해야 하는 경우CASE
문은 다중 분기로, 여러 조건에 따라 다른 SQL을 실행시킬 수 있음CASE
문 기본 형식CASE
WHEN 조건1 THEN
SQL 문장들1
WHEN 조건2 THEN
SQL 문장들2
WHEN 조건3 THEN
SQL 문장들3
ELSE
SQL 문장들4
END CASE;
WHILE
문: 필요한 만큼 계속 같은 내용을 반복WHILE
문은 조건식이 참인 동안에 계속 반복함WHILE
문 기본 형식WHILE <조건식> DO
SQL 문장들
END WHILE;
ITERATE [레이블]
: 지정한 레이블로 가서 계속 진행함 = 프로그래밍 언어의 CONTINUE 문(반복문을 계속 진행)LEAVE [레이블]
: 지정한 레이블을 빠져나감(즉, WHILE 문이 종료됨) = 프로그래밍 언어의 BREAK 문(반복문을 빠져 나감)PREPARE
와 EXECUTE
문PREPARE
: SQL 문을 실행하지는 않고 미리 준비만 해놓고EXECUTE
: 준비한 SQL 문을 실행우재남. (2021). 혼자 공부하는 SQL. 한빛미디어. p158-p212.