슈퍼코딩/주특기(JAVA)

2024.05.22(수) 슈퍼코딩 신입연수원 8주차 Day 3 후기 - SQL 기초 문법

곰돌이볼 2024. 5. 22. 08:36
  • 강의
    • 72강(MySQL DB 기본 개념 살펴보기) ~ 75강(SQL 기본 문법 익히기)

SQL


  • 스키마(shema)
    • 단순한 data 집합 이상의 table들의 집합
    • 관계를 포함한 설계도
  • 테이블의 구조
    • 열(= column, 필드, attribute, 속성) : 테이블의 세로
    • 행(=레코드) : 테이블의 가로, 의미를 가지는 최소단위
    • pk(=기본키, primary key) : 행을 구분할 수 있는 속성
    • 데이터 타입(=data type) : 열의 데이터 타입
    • 도메인 : 열의 값들

SQL

  • 정형화된 질의언어
  • RDBMS 언어
  • 종류
    • DDL : create, alter, drop, rename, truncate, commit
    • DML : select, insert, update, delete, merge
    • DCL : grant, revoke
    • TCL : commit, rollback, savepoint, set transcation
  • 코드 컨벤션
    • SQL 키워드는 대문자로 작성
    • table 이름, 컬럼 이름은 snake_case 사용
  • 기본 SQL 키워드
    • DESC : table 속성 설명
    • -- : SQL 주석

 

SQL DDL

  • DDL : Data Definition Language
  • DB 스키마 수준의 작업
  • 종류 : create, alter, drop, rename, truncate, commit
  • CREATE
    • 테이블 생성
    • AUTO_INCREMENT : 자동으로 값 증가
    • PRIMARY KEY : 기본키 설정
    • NOT NULL : Nullable 허용 X(NN)
CREATE DATABASE my_database; -- schema 생성
USE my_database; -- 생성한 schema 사용

-- table 생성
CREATE TABLE person (
    person_id INT AUTO_INCREMENT PRIMARY KEY
    name VARCHAR(10) NOT NULL,
    phone CHAR(12),
    age TINYINT UNSIGNED
    birth DATE
);

DESC person; -- person 테이블 설명(describe)
  • ALTER
    • 테이블 구조 변경 : 테이블의 컬럼 추가, 수정, 제거
-- 컬럼 추가
ALTER TABLE table_name ADD column)name datatype;

-- 컬럼 수정
ALTER TABLE table_name MODIFY COLUMN column_name datatype;

-- 컬럼 제거
ALTER TABLE table_name DROP COLUMN column_name;
  • DROP과 TRUNCATE
    • DROP : 테이블 삭제
    • TRUNCATE : 테이블 내 데이터 삭제
USE table_name;
TRUNCATE TABLE table_name; -- table 내용 삭제
DROP TABLE table_name; -- table 삭제

 

SQL DML

  • DML : Data Manipulation Language
  • DB 레코드 수준의 작업
  • 종류 : select, insert, update, delete, merge
  • INSERT
    • 데이터 삽입
    • 컬럼 삭제 가능
    • 여러 데이터들 삽입 가능
-- data 1개 입력
INSERT INTO table_name (column1, column2, ... )
VALUES(value1, value2, ...);

-- 여러 개의 data 입력
INSERT INTO table_name (column1, column2, ... )
VALUES(value1, value2, ...),
      (value1, value2, ...),
      (value1, value2, ...);
  • UPDATE
    • 데이터 수정
    • ※ 주의 ※ WHERE문이 없으면 모든행에 적용됨
      • 실습 : Preference → SQL Editor → Safe Updates → 체크 해제
UPDATE table_name
SET column1 = value1,
    column2 = value2
WHERE condition;
  • DELETE
    • 데이터 삭제
    • ※ 주의 ※ WHERE문이 없으면 모든행에 적용됨
      • 실습 : Preference → SQL Editor → Safe Updates → 체크 해제
DELETE FROM table_name WHERE condition;

 

  • DELETE vs TRUNCATE vs DROP
    • DELETE : 특정 행 삭제
    • TRUNCATE : 특정 테이블의 모든 행 삭제
    • DROP : 특정 테이블 삭제
    • 속도 : DELETE < TRUNCATE < DROP
    • AUTO INCREMENT 초기화
      • 적용 : DROP, TRUNCATE
      • 적용 X : DELETE

 

SELECT

  • SQL DML로 데이터 선택
  • 중요한 이유
    • 데이터 분석, 머신러닝, 정보 제공에 사용할 때 가장 많이 사용하는 구문
  • 작성 순서
    • SELECT → FROM → JOIN →  WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
  • 내부 실행 순서
    • FROM, JOIN → WHERE → GROUP BY → HAVING SELECT → ORDER BY → LIMIT
  • SELECT문 : 필드 전부 또는 일부 선택
    • * : 모든 컬럼
    • 특정 컬럼값 나열가능
  • WHERE문 : 조건식
    • 동등 연산자 : =
    • 비교 연산자 : >=, <=, >, <, AND, OR
    • 특수 조건식
      • BETWEEN 값1 AND 값2
      • IN (값1, 값2)
      • LIKE '값%_' : %(어떤 문자도 가능), _(길이만큼의 문자)
        • '가%' : 가지, 가수들, 가면제작자 ...
        • '가_' : 가수, 가곡 ...
  • ORDER BY : 데이터 정렬
    • ASC :default값으로 생략 가능, 오름차순
    • DESC : 내림차순
  • LIMIT : 순서 제한
    • 숫자 : 첫번째부터 (숫자)의 개수만큼
    • 숫자1, 숫자2 : (숫자1)부터 (숫자2)의 개수만큼
  • DISTINCT : 중복 제거
    • SELECT문의 column에 사용
  • GROUPT BY : 데이터 그룹화
    • column의 그룹화
    • 집계함수 : SELECT문에 사용
      • SUM() : 합
      • AVG() : 평균
      • COUNT() : 계수
  • HAVING : 조건식을 통한 필터링
    • SQL 실행 순서 때문에 WHERE문에 집계함수를 사용할 수 없기 때문에 HAVING문에 사용
    • 집계함수와 함께 사용됨
SELECT column1, DISTINCT(column2), SUM(column3)
FROM table_name
WHERE column1 = value1
GROUP BY column1
HAVING constraint_express
ORDER BY column1 ACS
LIMIT 3;

MySQL


  • MySQL 데이터형식이 다르면 낭비 발생
    • ram, disk 낭비
    • data의 용량이 클수록 효율 차이가 심함
    • java와 달리 garbage collector처러 되는건 아님
  • 데이터 타입
    • Char/String : Char, Ncahr, Varchar, Nvarchar, Text, nText
    • Numertic : bit, samllint, bigint, decimal, real, numeric, float, double, long double
    • Date/Time : DateTime, Date, Time, Timestamp, Year
    • Binary : binary, varbinary
    • Miscellaneous/Other : JSON, XML, BLOB(사진, 동영상 등)
  • 가변형 데이터 타입
    • 데이터의 크기에 따라서 크기를 최적화하게 변해서 디스크에 저장하는 데이터 타입
    • varchar, text, binary
    • 그러면 모든 문자형 타입을  varchar로만 쓰지 않은 이유는? 속도 차이(char > varchar)
  • 날짜 타입
    • DateTime VS TimeStamp
      • 형식 동일 : YYYY-MM-DD HH:MM:SS
      • DateTime
        • 8byte
        • 텍스트로 저장됨
      • TimeStamp
        • 현재 시간대(time-zone)로 변환되어 저장됨
        • 4byte
        • 설정된 나라에 따라서 달라짐