기본 미션: p.195의 확인 문제 4번
LEFT OUTER JOIN의 조건을 위한 WHERE 절이 필요하다.
고로 답은 4번!
Chapter 4. SQL 고급
MySQL의 데이터 형식
정수형
- 모든 정수형은 음수~양수 범위를 가지는데 unsigned를 사용하면 0부터 해당 범위를 가지게 된다.
TINYINT UNSIGNED
의 경우 0~255의 범위를 가지는 것.
- 연산에 의미가 있거나, 크기, 순서 등에 의미가 있을 때 정수형을 사용한다.
문자형
- CHAR: 고정길이 문자형. 공간이 낭비될 수 있다. 성능 면에서 더 좋다.
- VARCHAR: 가변길이 문자형. 공간을 효율적으로 운영할 수 있다. 성능이 약간 떨어진다.
대량의 데이터 형식
- 문자형만으로는 데이터를 저장하기 부족할 때 사용한다
- 소설이나 영화 대본 등 긴 길을 저장할 수 있다
- BLOB(Binary Long Object)는 이미지, 동영상 등의 이진 데이터이다.
실수형
- FLOAT와 DOUBLE은 거의 비슷한데 과학 기술용 데이터가 아닌 이상 FLOAT를 사용한다
날짜형
- DATE: 날짜만
- TIME: 시간만
- DATETIME: 날짜+시간
- 작은 따옴표로 묶어야한다
변수의 사용
SET @변수이름 = 변수의 값;
SELECT @변수이름; --변수의 값 출력
- 변수는 MySQL 워크벤치를 재시작할 때까지는 유지되고, 종료하면 없어진다
SET @count = 3;
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count;
- LIMIT에는 변수를 활용하지 못하기 때문에 PREPARE과 EXECUTE를 사용해야한다
- PREPARE는 mySQL이라는 이름으로 SQL문을 준비해둔다.
?
= 현재는 모르지만 나중에 USING을 통해 채워진다
데이터 형 변환
함수를 이용한 명시적 변환
CAST(값 AS 데이터_형식 [(길이)])
CONVERT(값, 데이터_형식 [(길이)])
SELECT CAST(AVG(price) AS SIGNED) '평균 가격' FROM buy;
SELECT CAST('2022@12@12' AS DATE);
SELECT num, CONCAT(CAST(price AS CHAR), 'X', CAST(amount AS CHAR), '=' )
'가격X수량', price*amount '구매액'
FROM buy;
- 두 함수는 완벽히 동일한 기능을 한다
- 데이터 형식에는
CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME
등이 들어갈 수 있다 - SIGNED: 부호가 있는 정수, UNSIGNED: 부호가 없는 정수
- 다양한 구분자를 날짜형으로 변경할 수 있다
CONCAT()
: 문자를 이어주는 역할
암시적인 변환: 자연스럽게 형이 변환되는 것
SELECT CONCAT (100, '200'); -- 100200
SELECT 100 + '200'; -- 300
JOIN
- 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것
- 두 테이블의 조인을 위해서는 테이블이 일대다 관계로 연결되어야 한다
내부 조인(Inner Join)
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
SELECT B.mem_id, M. mem_name, B.prod_name, M.addr, CONCAT(M.phone1, M.phone2) '연락처'
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
- 두 테이블에 모두 있는 내용만 조인되는 방식
외부 조인(Outer Join)
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건] ;
SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
ORDER BY M.mem_id;
- 두 테이블을 조인할 때 필요한 내용이 한쪽 테이블에만 있어도 결과를 추출할 수 있다
<LEFT | RIGHT | FULL> OUTER JOIN
= <LEFT | RIGHT | FULL> 테이블의 내용은 모두 출력되어야 한다- FULL OUTER JOIN = 왼쪽이든 오른쪽이든 한쪽에 들어 있는 내용이면 출력한다
기타 조인
상호 조인, 카티션 곱(Cross Join, Cartesian Product)
- 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인
- 결과적으로 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 개수가 된다
- ON 구문을 사용할 수 없다
- 결과의 내용은 의미가 없다. 랜덤으로 조인하기 때문
- 상호 조인의 주 용도는 테스트하기 위해 대용량의 데이터를 생성할 때
자체 조인(Self Join)
SELECT <열 목록>
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
ON <조인될 조건>
[WHERE 검색 조건]
- 자신이 자신과 조인한다
- 실무에서는 많이 사용 X
정리
SQL 프로그래밍
추후에 학습하자.. 지금은 안중요할듯
'혼공단' 카테고리의 다른 글
[혼공컴운] 1주차 - 컴퓨터 구조 시작 (0) | 2023.07.07 |
---|---|
[혼공S] 1주차 - 데이터베이스 시작하기 (0) | 2023.07.04 |
혼공단 시작 (0) | 2023.06.30 |