- 강의
- 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
- 설정된 나라에 따라서 달라짐
- DateTime VS TimeStamp
'슈퍼코딩 > 주특기(JAVA)' 카테고리의 다른 글
2024.05.24(금) 슈퍼코딩 신입연수원 8주차 Day 5 후기 - 데이터베이스 모델링, JDBC (0) | 2024.05.24 |
---|---|
2024.05.23(목) 슈퍼코딩 신입연수원 8주차 Day 4 후기 - RDBMS, JOIN, MySQL 제약조건 (0) | 2024.05.23 |
2024.05.21(화) 슈퍼코딩 신입연수원 8주차 Day 2 후기 - RDBMS (0) | 2024.05.21 |
2024.05.20(월) 슈퍼코딩 신입연수원 8주차 Day 1 후기 - annotation, meta programming, gradle (0) | 2024.05.20 |
슈퍼코딩 신입연수원 7주차 후기 (0) | 2024.05.18 |