MySQL 데이터베이스 한번에 끝내기 강의 정리
강의 바로가기
여기
SQL의 분류
- DML(Data Manipulation Language)
- 테이블의 row
- SELECT, INSERT, UPDATE, DELETE
- DDL(Data Definition Language)
- 데이터베이스, 테이블, 뷰, 인덱스 등
- CREATE, DROP, ALTER
- 트랜잭션이 발생하지 않음
- DCL(Data Control Language)
- 사용자에게 권한 부여, 빼앗기, 트랜잭션
- GRANT, REVOKE
- TCL(Transaction Control Language)
- DCL에 속하지만 TCL로 구분 짓기도 함
- COMMIT, ROLLBACK, SAVEPOINT
정보 조회
- SHOW DATABASES
- SHOW TABLES
- SHOW TABLE STATUS
- DESCRIBE / DESC
SELECT
- SELECT
- row 선택하여 조회
- WHERE
- 특정 조건에 맞는 row만 제한
- 조건 연산자(=, > 등), 관계 연산자(AND, OR, BETWEEN AND, IN, LIKE 등) 사용
- Sub Query
- 쿼리문 안에 또다른 쿼리문이 들어 있는 것
- 기본으로 사용하면 서브 쿼리의 결과가 둘 이상이 되면 에러 발생
- ANY()
- 서브쿼리의 여러 개의 결과 중 한가지만 만족해도 가능 (IN)
- ALL()
- 서브쿼리의 여러 개의 결과를 모두 만족 시켜야 함
- ORDER BY
- ASC(default), DESC
- 여러 개 중첩 가능
- DISTINCT
- LIMIT
- 출력 개수 제한
- 인자 1개면 상위 N개
- 인자 2개면 특정 범위
- GROUP BY
- 그룹으로 묶음 (~별)
- 보통 집계 함수를 함께 사용
- AVG(), MIN(), MAX(), COUNT()
- 예를 들어 월별 평균 강수량을 구할 때
- HAVING
- 반드시 GROUP BY절 다음
- 그룹 별 집계 결과 중 원하는 조건 추가
- ROLLUP()
- 중간합계 보여줌
- GROUP BY와 함께 WITH ROLLUP 사용
- JOIN
- 여러 테이블에서 가져온 레코드를 조합하여 하나의 결과로 출력
- INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN
- MySQL은 FULL OUTER JOIN 지원 X -> LEFT JOIN UNION RIGHT JOIN으로 해결
MySQL 내장함수
- 문자열 함수
- LENGTH()
- CONCAT()
- 전달 받은 문자열들을 합침
- 문자열이 하나라도 NULL이면 NULL 반환
- LOCATE()
- 문자열 내 찾는 문자열이 처음으로 나타나는 인덱스 반환
- MySQL은 문자열 시작 인덱스가 1
- LEFT(), RIGHT()
- 문자열 왼쪽, 오른쪽부터 지정한 길이 만큼의 문자열 반환
- LOWER(), UPPER()
- REPLACE
- TRIM()
- 문자열 앞이나 뒤, 양쪽에 있는 특정 문자 제거
- TRIM(BOTH) (default), TRIM(LEADING), TRIM(TRAILING)
- 제거할 문자를 명시하지 않으면 공백 제거가 default
- 수학 함수
- FORMAT()
- NUMBER 데이터를 3자리마다 쉼표로 변환하는 형식으로 반환
- 반환하는 데이터는 문자열
- 두 번째 인수는 반올림할 소수 부분의 자릿수
- FLOOR(), CEIL(), ROUND()
- TRUNCATE()
- SQRT(), POW(), EXP(), LOG
- 양의 제곱근, 거듭 제곱, e의 거든 제곱, 자연로그
- SIN(), COS(), TAN()
- 사인, 코사인, 탄젠트 값 반환
- PI()는 파이 반환
- ABS(), RAND()
- NUMBER의 절대값 반환, 0.0보다 크거나 같오 1.0보다 작은 하나의 실수를 무작위로 생성
- 날짜 함수
- NOW(), CURDATE(), CURTIME()
- 현재 날짜와 시간 반환, 현재 날짜 반환, 현재 시각 반환
- DATE(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND()
- 날짜 정보, 월, 일, 시간, 분, 초 반환
- DATETIME 등에 사용
- MONTHNAME(), DAYNAME
- DAYOFWEEK(), DAYOFMONTH(), DAYOFYEAR()
- 일주일 중 몇 번째 날인지 반환(일요일 = 1), 월에서 몇번째 날인지 반환, 해당 연도에서 몇번째 날인지 반환
- DATE_FORMAT
- 전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 반환
- %y, %d 등으로 나타냄
SQL 고급
- CREATE, USE DATABASE
- CREATE TABLE AS SELECT
- CREATE TABLE() VALUES()
- 새로운 테이블 생성
- NOT NULL, PRIMARY KEY, FOREIGN KEY, UNQUE, INDEX 등 특성 추가 가능
- ALTER TABLE
- INDEX
- 특정 컬럼에 INDEX를 부여하여 원하는 데이터를 빠르게 찾을 수 있음
- MySQL은 인덱스를 B-Tree 형태로 관리
- 잘못 사용하면 오히려 속도가 느려지므로 WHERE절 등에서 자주 검색되는 컬럼에 사용해야 함
- 왜 느려질까?
- INDEX 설정된 컬럼 값을 포함한 데이터의 삽입, 삭제, 수정 작업에서 인덱스도 함께 수정 되므로
- CREATE INDEX, DROP INDEX
- SHOW INDEX
- UNIQUE INDEX
- FULLTEXT INDEX
- 일반적인 인덱스와는 달리 매우 빠르게 테이블의 모든 텍스트 컬럼을 검색
- 검색 엔진과 유사한 방법으로 자연어를 이용하여 데이터를 검색할 수 있도록 모든 데이터의 문자열 단어 저장
- VIEW
- 데이터베이스에 존재하는 가상 테이블
- 실제 저장이 아닌, 다른 테이블이나 다른 뷰에 있는 데이터를 보여주는 역할
- 즉, 완성된 SELECT 문을 하나의 가상 테이블로 생성하는 것
- CREATE VIEW
- ALTER VIEW
- DROP VIEW
- INSERT INTO
- UPDATE
- 테이블 특정 row 값 변경
- WHERE절 생략하면 테이블 전체 변경 됨
- DELETE
- WHERE절 생략하면 테이블 전체 삭제
- 데이터는 지워지지만 테이블 용량은 줄어들지 않음 -> 복구도 가능
- TRUNCATE
- 테이블은 삭제되지 않음 (DROP 후 CREATE와 동일)
- 테이블의 인덱스 등과 데이터를 모두 삭제, 용량 줄어든다 -> 일반적으로 되돌릴 수 없음
- DROP TABLE, DATABASE
- 테이블, 데이터베이스 삭제
- 일반적으로 되돌릴 수 없음