MySQL 에서는 NULL 값을 가장 작은 값으로 취급
-- GROUP BY 를 포함한 전체 SQL 실행 순서
1. FROM: 테이블 선
2. WHERE: 개별 행 필터링
3. GROUP BY: 선택 그룹 만들기
4. SELECT: 결과 선택
5. ORDER BY: 정렬
1. FROM: 테이블 선택
2. WHERE: 개별 행 필터링
3. GROUP BY: 선택 그룹 만들기
4. SUM 계산
5. SELECT: 결과 선택
WHERE: 개별 행에 조건을 적용
HAVING: 그룹 집계 후 조건을 적용(조건 = 집계함수)
1. FROM
2. GROUP BY
3. SUM
4. HAVING
5. SELECT
: 데이터 조작어
: 데이터를 검색 및 삽입, 수정, 삭제할 때 사용
트랜잭션(Transaction)
: 테이블의 데이터를 삽입, 수정, 삭제할 때 실제 테이블에 바로 적용하지 않고 임시로 적용하는 명령
→ 트랜잭션을 사용하면 실수로 데이터를 잘못 변경했을 때 임시로 적용한 것을 취소 가능
: 데이터 정의어
: 데이터베이스 개체를 생성, 삭제, 변경할 때 사용
: 데이터 제어어
: 사용자에게 어떤 권한을 부여하거나 빼앗을 때 사용하는 언어
UPDATE, DELETE주의사항
: 바로 UPDATE 실행하지 말 것
: WHERE 절을 생략할 수 있으나, 생략하면 테이블 전체 행이 수정됨
: 수정을 원하는 부분부터 SELECT 문으로 확인한 후, WHERE 절에 적용할 것
: WHERE 절을 빼먹지 말 것
→ IDE 에서는 경고문을 출력하기도 함
-- 대용량 테이블 생성
CREATE TABLE bigTBL1 (SELECT * FROM employees.employees);
CREATE TABLE bigTBL2 (SELECT * FROM employees.employees);
CREATE TABLE bigTBL3 (SELECT * FROM employees.employees);
-- 테이블 삭제 3가지 방식 실행시간 차이 비교
DELETE FROM bigTBL1; -- 4.7s
DROP TABLE bigTBL2; -- 0.065s
TRUNCATE TABLE bigTBL3; -- 0.100s
DELETEDROPTRUNCATECOMMIT
: 현재 트랜잭션에서 발생한 모든 변경을 데이터베이스에 “영구적으로 반영”하는 명령
SELECT @@autocommit;
SELECT * FROM bigTBL1;
ROLLBACK;
-- 기본 상태: autocommit = 1 (자동 커밋 활성화)
SET autocommit = 0; -- 자동 커밋 끄기
SELECT @@autocommit; -- 0(꺼짐)
SELECT COUNT(*) FROM bigTBL2;
DELETE FROM bigTBL2;
SELECT COUNT(*) FROM bigTBL2;
ROLLBACK;
SELECT COUNT(*) FROM bigTBL2;
DELETE FROM bigTBL2;
SELECT COUNT(*) FROM bigTBL2;
COMMIT;
ROLLBACK;
SELECT COUNT(*) FROM bigTBL2;
SET autocommit = 1; -- 자동 커밋 활성화
-- IGNORE: 오류가 발생해도 무시하고 넘어감. 오류 메세지만 출력
-- 기본키 중복된 행은 무시하고 나머지만 추가
INSERT IGNORE INTO memberTBL VALUES
('KHD', '강포동', '일본'),
('new1', '강아지', '멍멍'),
('new2', '고양이', '야옹');
SELECT * FROM memberTBL;
-- ON DUPLICATE KEY UPDATE
-- 기본키가 중복될 시 새로운 삽입한 데이터로 변경
INSERT INTO memberTBL
VALUES ('KHD', '강포동', '일본')
ON DUPLICATE KEY UPDATE
userName = '강포동',
addr = '일본';
SELECT * FROM memberTBL;
: 2개 이상의 테이블을 묶어서 하나의 결과 테이블을 만드는 것