[혼공학습단 13기] 활동의 일환으로 한빛미디어의 < 혼자 공부하는 SQL >을 읽고 요약 정리한 글입니다.
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() 함수는 문자를 연결하는 역할을 한다.
조인
: 두 테이블을 묶어서 정보를 추출하는 것
일반적으로 조인이라 부르면 내부 조인을 의미한다.
✅일대다 관계
: 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계 👉 기본 키-외래 키 관계
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
테이블_이름.열_이름
형식으로 작성하는 것이 좋다.별칭
을 통해 더 간결한 표현 가능내부 조인과 달리 한쪽 테이블에만 있는 내용도 출력 가능하다.
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT / RIGHT / FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건];
LEFT OUTER JOIN
👉 왼쪽 테이블의 내용 모두 출력
한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능
CROSS JOIN
을 사용한다.
👉행 개수는 두 테이블의 행의 개수를 곱한 값이 된다.
대용량의 테스트용 테이블을 만들 때 사용
자신이 자신과 조인. 별도 문법 없이 1개로 조인하면 된다.
👉테이블은 1개지만 별칭을 사용하여 서로 다른 것처럼 조인한다.
p. 195의 확인 문제 4번 풀고 인증하기
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 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기
스토어드 프로시저
: MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 개체로 다음과 같은 구조를 가진다.
DELIMITER $$
CREATE PROCEDURE 스토어드_프로시저_이름()
BEGIN
이 부분에 SQL 프로그래밍 코딩
END $$
DELIMITER ;
CALL 스토어드_프로시저_이름();
IF <조건식> THEN
SQL 문장들
END IF;
IF 문은 조건식이 참이라면 'SQL 문장들'을 실행하고, 아니면 그냥 넘어간다.
✅SQL 문장들이 둘 이상이라면 BEGIN ~ END
로 묶어줘야 한다.(한 문장이라도 묶어주는 것을 권장)
조건식이 참일 때와 거짓일 때 다른 부분이 실행된다.
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 문은 조건식이 참인 동안에 SQL문장들을 계속 반복한다.
WHILE <조건식> DO
SQL 문장들
END WHILE;
ITERATE[레이블]
: 지정한 레이블로 가서 계속 진행한다. (프로그래밍 언어의 CONTINUE와 유사)LEAVE[레이블]
: 지정한 레이블을 빠져나간다. 즉, WHILE 문 종료 (프로그래밍 언어의 BREAK와 유사)👉 미리 SQL을 준비한 후 나중에 실행
PREPARE
: SQL 문을 실행하지 않고 미리 준비EXECUTE
: 준비한 SQL문 실행DEALLOCATE PREPARE
로 문장을 해제하는 것이 바람직