MySQL 요약 노트-3

soyeong·2022년 10월 8일
0

MySQL

목록 보기
3/7
post-thumbnail

MySQL 요약 노트 (2022년 1월 ~ 2022년 3월까지 공부했던 내용 정리)
혼자 공부하는 SQL책과 한빛미디어에서 제공하는 유튜브 강의로 공부함

📌 4강 SQL 고급 문법

✔️ 04-1 MySQL의 데이터 형식

  • 데이터 형식(정수형, 문자형, 실수형, 날짜형)
    • 각 데이터 형식마다 크기나 표현할 수 있는 숫자의 범위가 다름
  • 정수형: 소수점이 없는 숫자(ex. 인원 수, 가격, 수량 등)
    • 1바이트=256개
    • UNSIGNED 예약어: 값의 범위가 0부터 시작됨
  • 문자형: 문자형은 글자를 저장하기 위해 사용함
    • 글자의 개수가 고정된 경우: CHAR
    • 글자의 개수가 변동될 경우: VARCHAR
    • 숫자 의미: 1) 더하기/빼기 등의 연산에 의미, 2) 크다/작다 또는 순서에 의미
      • ex. 전화번호: 숫자(정수형)가 아닌 문자형이 더 효과적임
  • 대량의 데이터 형식: 더 큰 데이터를 저장하는 데이터 형식
    • TEXT: 글자 데이터(대량의 텍스트)
    • BLOB: 글자가 아닌 이미지, 동영상 등의 데이터(대량의 이진 데이터)
  • 실수형: 소수점이 있는 숫자
    • 과학 기술용 데이터가 아닌 이상 FLOAT 사용(ex. 시력)
  • 날짜형: 날짜 및 시간을 저장할 때 사용

  • 변수의 사용: 변수를 선언하고 사용
    • 변수의 선언과 값의 대입 형식
      SET @변수이름 = 변수의 값; -- 변수의 선언 및 값 대입
      SELECT @변수이름; -- 변수의 값 출력
    • LIMIT에는 변수를 사용할 수 없음(문법상 오류)
    • 대신, LIMIT에 변수를 사용하기 위해 PREPAREEXECUTE 사용
      • PREPARE는 실행하지 않고 SQL 문만 준비해 놓고
      • EXECUTE에서 실행하는 방식

  • 데이터 형 변환(명시적인 변환, 암시적인 변환)
  • 1) 명시적인 변환
    • 데이터 형식을 변환하는 함수: CAST(), CONVERT() 형식
      CAST (AS 데이터_형식 [ (길이) ])
      CONVERT (, 데이터_형식 [ (길이) ])
  • 2) 암시적인 변환
    • 함수를 사용하지 않고도 자연스럽게 형이 변환되는 것
    • 예시
      SELECT CONCAT(100, '200'); -- output: 100200 (숫자 100이 문자로 자동 변환)
      SELECT 100 + '200'; -- output: 300 (문자 '200'이 숫자로 자동 변환)

✔️ 04-2 조인: 두 테이블을 묶는 방법⭐⭐⭐

  • 조인: 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것

  • 내부 조인: 두 테이블에 모두 데이터가 있어야만 결과가 나옴

    • 일대다(one to many) 관계: 주로 기본 키(PK)와 외래 키(FK) 관계(PK-FK 관계)

      • 예시) 회원 테이블의 아이디(기본 키, PK)-구매 테이블의 아이디(외래 키, FK)
      • 예시) 회사원 테이블의 회사원(PK)과 급여 테이블의 회사원(FK), 학생 테이블의 학생(PK)과 학점 테이블의 학생(FK)
      • 두 테이블의 조인을 위해서는 기본 키-외래 키 관계를 맺어져야 함(일대다 관계)
    • 내부 조인 형식(INNER JOIN=JOIN)

      • 내부 조인은 두 테이블에 모두 있는 내용만 조인되는 방식임
        SELECT <열 목록>
        FROM <첫 번째 테이블> 별칭
            INNER JOIN <두 번째 테이블> 별칭 -- 혹은 JOIN <두 번째 테이블>
            ON <조인될 조건>
        [WHERE 검색 조건];
        • 동일한 열 이름이 존재한다면 테이블이름.열이름 형식으로 표기
        • FROM 절에 나오는 테이블의 이름 뒤에 별칭(alias)을 줄 수 있음
        • 만약, 테이블 양쪽 중에 한곳이라도 내용이 있을 때 조인하려면 외부 조인을 사용해야 함
        • 중복된 결과 1개만 출력하기: DISTINCT 활용
      • 예시) 사이트에 한 번이라도 구매한 기록이 있는 회원만 출력하기(구매 테이블(buy)과 회원 테이블(member) 사용)
        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;
  • 외부 조인: 한쪽에만 데이터가 있어도 결과가 나옴

    • 외부 조인 형식(OUTER JOIN)
    • 외부 조인은 두 테이블을 조인할 때 필요한 내용이 한쪽 테이블에만 있어도 결과를 추출할 수 있음
      SELECT <열 목록>
      FROM <첫 번째 테이블(LEFT 테이블)> 별칭
          <LEFT|RIGHT|FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)> 별칭
          ON <조인될 조건>
      [WHERE 검색 조건];
      • LEFT OUTER JOIN: 왼쪽 테이블의 내용은 모두 출력되어야 한다(왼쪽에 있는 테이블을 기준으로 외부 조인)
      • RIGHT OUTER JOIN: 오른쪽 테이블의 내용은 모두 출력되어야 한다(오른쪽에 있는 테이블을 기준으로 외부 조인)
      • FULL OUTER JOIN: 왼쪽 외부 조인과 오른쪽 외부 조인이 합쳐진 것으로 왼쪽이든 오른쪽이든 한쪽에 들어 있는 내용이면 출력함
  • 기타 조인(상호 조인, 자체 조인)

  • 1) 상호 조인(CROSS JOIN): 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능(=카티션 곱)

    • 상호 조인 형식
      SELECT <열 목록>
      FROM <첫 번째 테이블>
          CROSS JOIN <두 번째 테이블>;
    • 특징: 1. ON 구문을 사용할 수 없음, 2. 결과의 내용은 의미가 없음(랜덤 조인), 3. 상호 조인의 주 용도는 테스트하기 위해 대용량의 데이터를 생성할 때
    • 대용량의 테이블 만들기: CREATE TABLE ~ SELECT
      CREATE TABLE <테이블_이름>
        SELECT <열 목록>
          FROM <첫 번째 테이블>
            CROSS JOIN <두 번째 테이블>;
  • 2) 자체 조인: 자신이 자신과 조인한다(1개의 테이블을 사용함)

    • 자체 조인 형식
      SELECT <열 목록>
      FROM <테이블> 별칭A
          JOIN <테이블> 별칭B;
          ON <조인될 조건>
      [WHERE 검색 조건];
    • 특징: 하나의 테이블에 같은 테이터가 있지만 2개 이상의 열로 존재할 때 자체 조인 가능함

✔️ 04-3 SQL 프로그래밍

  • 스토어드 프로시저: MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 개체
    • 스토어드 프로시저 구조
      DELIMITER $$ -- 스토어드 프로시저의 코딩
      CREATE PROCEDURE 스토어드_프로시저_이름()
      BEGIN
          이 부분에 SQL 프로그래밍 코딩
      END $$ -- 스토어드 프로시저 종료
      DELIMITER ; -- 종료 문자를 다시 세미콜론(;)으로 변경
      CALL 스토어드_프로시저_이름(); -- 스토어드 프로시저 실행
  • 변수DECLARE로 선언, SET으로 값을 대입

  • IF: 조건식이 참이라면 'SQL 문장들' 실행하고 거짓이면 그냥 넘어감
    • IF 문은 조건식이 참이면 실행
    • IF 문 기본 형식
      • 'SQL 문장들'이 한 문장이라면 그 문장만 써도 되지만 두 문장 이상 처리되어야 할 때는 BEGIN ~ END
      IF <조건식> THEN
          SQL 문장들
      END IF;
  • IF ~ ELSE: 조건에 따라 다른 부분을 수행할 때
    • IF ~ ELSE 문은 조건식이 참일 때와 거짓일 때 다른 부분이 실행
    • IF ~ ELSE 문 기본 형식
      IF <조건식> THEN
          SQL 문장들1
      ELSE
          SQL 문장들2
      END IF;
  • 날짜 관련 함수
    • CURRENT_DATE(): 오늘 날짜를 알려줌
    • CURRENT_TIMESTAMP(): 오늘 날짜 및 시간을 함께 알려줌
    • DATEDIFF(날짜1, 날짜2): 날짜2부터 날짜1까지 일수로 몇일인지 알려줌
  • CASE: 여러 가지 조건 중에서 선택해야 하는 경우
    • CASE 문은 다중 분기로, 여러 조건에 따라 다른 SQL을 실행시킬 수 있음
    • CASE 문 기본 형식
      CASE
        WHEN 조건1 THEN
          SQL 문장들1
        WHEN 조건2 THEN
          SQL 문장들2
        WHEN 조건3 THEN
          SQL 문장들3
        ELSE
          SQL 문장들4
      END CASE;
  • WHILE: 필요한 만큼 계속 같은 내용을 반복
    • WHILE 문은 조건식이 참인 동안에 계속 반복함
    • WHILE 문 기본 형식
      WHILE <조건식> DO
          SQL 문장들
      END WHILE;
    • ITERATE [레이블]: 지정한 레이블로 가서 계속 진행함 = 프로그래밍 언어의 CONTINUE 문(반복문을 계속 진행)
    • LEAVE [레이블]: 지정한 레이블을 빠져나감(즉, WHILE 문이 종료됨) = 프로그래밍 언어의 BREAK 문(반복문을 빠져 나감)
  • 동적 SQL: 미리 SQL을 준비한 후에 나중에 실행하는 것
    • PREPAREEXECUTE
      • PREPARE: SQL 문을 실행하지는 않고 미리 준비만 해놓고
      • EXECUTE: 준비한 SQL 문을 실행

📌 참고문헌

우재남. (2021). 혼자 공부하는 SQL. 한빛미디어. p158-p212.

profile
The ultimate goal is to be a Data Scientist.

0개의 댓글