본문 바로가기
혼공단

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

by 망쇼 2023. 7. 23.

기본 미션: 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