#혼공학습단 #혼공 #혼자공부하는SQL #혼공S
본 글은 2023년 7월 3일 ~ 2023년 8월 20일까지 진행하는 혼공학습단에 참여하며 정리한 글입니다.
이번 장에서는 기본적인 SQL 문법 몇가지를 소개한다. 데이터베이스 생성부터 데이터 입력, 수정, 삭제까지 살펴보자.
04-1 MySQL의 데이터 형식
•
이 챕터에서는 MySQL에서 사용하는 데이터 형식에 대해 알아본다. 데이터 형식은 수십개 정도가 될만큼 많으나 이를 모두 외울 필요는 없다. 다만 자주 사용하는 것만 살펴보도록 하자.
정수형
•
정수형은 소수접이 없는 숫자이다.
•
정수형에는 다음과 같은 자료형이 있다.
◦
TINYINT : 1 byte : -128 ~ 127
◦
SMALLINT : 2 byte : -32768 ~ 32767
◦
INT : 4 byte : 약 -21억 ~ + 21억
◦
BIGINT : 8 byte : 약 -900경 ~ +900경
문자형
•
문자형에는 다음과 같은 자료형이 있다.
◦
CHAR : 1 ~ 255 byte
◦
VARCHAR : 1 ~ 16383 byte
대용량 데이터 형식
TEXT : 1 ~ 65535 byte
LONGTEXT : 1 ~ 4294967295 byte
BLOB 1 ~ 65535 byte
LONGBLOB 1 ~ 4294967295 byte
실수형
FLOAT : 4 byte : 소수점 아래 7자리까지 표현
DOUBLE : 8 byte 소수점 아래 15자리까지 표현
날짜형
DATE : 3 byte : 날짜만 저장, YYYY-MM-DD 형식으로 사용
TIME : 3 byte : 시간만 저장, HH:MM:SS 형식으로 사용
DATETIME : 8 byte : 날짜 및 시간을 저장. YYYY-MM-DD HH:MM:SS 형식으로 사용
변수의 사용
•
MySQL에서도 변수를 사용할 수 있다. 변수 선언과 사용은 다음과 같다.
-- 변수 선언 방법
SET @변수이름 = 변수의 값;
-- 변수 값 출력
SELECT @변수이름;
SQL
복사
•
PREPARE와 EXECUTE
SET @count=3;
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count;
SQL
복사
◦
@ count라는 변수에 3을 대입
◦
PREPARE는 ‘SELECT ~~ LIMIT ?’ 문을 실행하지 않고 mySQL이라는 이름으로 준비만 해놓는다. 주의해서 볼 것은 LIMIT 다음에 오는 물음표이다. ?는 ‘현재는 모르지만 나중에 채워짐’ 정도로 이해하면 된다.
◦
EXECUTE로 mySQL에 저장된 SELECT 문을 실행할 때, USING 으로 물음표에 @ count변수의 값을 대입
데이터 형 변환
•
CAST() , CONVERT()
◦
CAST, CONVERT 함수 안에 올수 있는 데이터 형식
◦
CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME
CAST (값 AS 데이터_형식 [(길이)])
CONVERT (값, 데이터_형식 [(길이)])
SQL
복사
04-2 두 테이블을 묶는 조인
•
이 장에서는 조인의 종류와 그 활용 방법에 대해 살펴 본다. 조인의 종류에는 여러가지가 있으나 여기서는 내부 조인(inner join), 외부 조인(outer join)을 주의 깊게 살펴본다.
1. 내부조인 (Inner join)
•
예제 코드
SELECT <열 목록>
FROM <첫번째 테이블>
INNER JOIN <두번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
SQL
복사
2. 외부 조인(Outer join)
•
예제 코드
SELECT <열 목록>
FROM <첫번째 테이블>
<LEFT | RIGHT | FULL> OUTER JOIN <두번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
SQL
복사
사실 inner, outer join 은 그림으로 이해하는 것이 가장 쉽다. google에 검색하면 이미지를 쉽게 검색할 수 있는데 이는 다음과 같다.
[혼공학습단 10기 미션]
기본미션
p. 195의 확인 문제 4번 풀고 인증하기
Question. 다음 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;
SQL
복사
Answer : 4. WHERE B.prod_name IS NULL
선택미션
p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기
USE market_db;
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;
SQL
복사