본문 바로가기
SQL/HG

[혼공S] 3주차 - SQL 고급 문법

by Branch Rickey 2025. 7. 18.

04-1. MySQL의 데이터 형식

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

 

- UNSIGNED 예약어 사용 시 0부터 범위가 지정 ex) UNSIGNED TINYINT : 0 ~ 255

 

2. 문자형

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

 

- CHAR : 고정길이 문자형

- VARCHAR : 가변길이 문자형

 

3. 실수형

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

 

 

4. 날짜형

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

 

- 날짜와 시간 입력할 때는 문자와 같이 작은따옴표로 묶어줘야 한다.

 

- DATE_FORMAT(컬럼명, 바꿀포맷형식) + AS 로 원래 컬럼명으로 표시


04-2. 두 테이블을 묶는 JOIN

JOIN = 두 개의 테이블을 묶어서 하나의 결과 ex) 인터넷 마켓 데이터베이스의 회원 테이블과 구매 테이블

 

두 테이블의 JOIN을 위해서는 테이블이 일대다 (one to many) 관계 연결

 

1) INNER JOIN = JOIN

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

 

SELECT * =  두 테이블의 모든 컬럼을 출력 (중복 포함)

 

table.column = 원하는 테이블의 column 출력 

 

table (AS) alias → alias.column  : 별칭 사용

 

 

2) OUTER JOIN

 

필요한 내용이 한 쪽 테이블에만 있어도 결과 추출 가능

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

 

3) CROSS JOIN

 

한 쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 JOIN → 결과의 전체 행 개수 = 두 테이블의 각 행의 개수의 곱

SELECT *
	FROM <첫 번째 테이블 (LEFT TABLE)>
    	CROSS JOIN <두 번째 테이블 (RIGHT TABLE)>

 

4) SELF JOIN

 

자기 자신과 JOIN → 다른 별칭을 사용해서 서로 다른 것 처럼 사용

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

기본 : 회원으로 가입만 하고, 한 번도 구매한 적이 없는 회원의 목록

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
	WHERE B.prod_name IS NULL
	ORDER BY M.mem_id;

 

WHERE B.prod_name IS NULL → buy 테이블의 prod_name 값이 NULL 인 경우 필터링 (구매한 적 X)

 

추가 : 한 번이라도 구매한 이력이 있는 회원들 출력 

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

 

SELECT DISTINCT → 중복된 결과 1개만 출력

 

JOIN member ON buy.mem_id = member.mem_id → buy 테이블과 member 테이블 동시에 존재 (구매 이력 O)

 

 

'SQL > HG' 카테고리의 다른 글

[혼공S] 4주차 - 테이블과 뷰  (0) 2025.07.27
[혼공S] 2주차 - SQL 기본 문법  (0) 2025.07.14
[혼공S] 1주차 - DB와 SQL  (0) 2025.07.06