SSAFY

[DB] RDBMS, Query 실행 순서

hellosonic 2024. 9. 18. 12:02

SQL Query 실행 순서

✅ RDBMS

  • 데이터를 테이블 단위로 관리 : 하나의 테이블은 여러 개의 컬럼으로 구성
  • 중복 데이터를 최소화 시킴
    • 정규화 : 같은 데이터가 여러 컬럼 또는 테이블에 존재했을 경우, 데이터를 수정 시 문제가 발생할 가능성이 높아짐
    • 여러 테이블에 분산되어 있는 데이터를 검색 시 테이블 간의 관계(join)을 이용하여 필요한 데이터를 검색

 

✅ SQL

📌 DDL (데이터 정의어)

  • 테이블 생성, 컬럼 추가, 타입변경, 제약조건 지정, 수정 등
  • create, alter, drop, rename, truncate(테이블 초기화)

📌 DML (데이터 조작어)

  • CRUD 
  • insert, select, update, delete

📌 DCL (데이터 제어어)

  • DB, Table의 접근 권한이나 CRUD 권한을 정의
  • 특정 사용자에게 테이블의 검색 권한 부여/금지 등
  • grant(DB에 권한을 부여), revoke(DB 권한 취소)

📌 TCL (트랜잭션 제어어)

  • 트랜잭션이란 데이터베이스의 논리적 연산 단위
  • commit(실행한 Query를 최종적으로 적용), rollback(실행한 Query를 마지막 commit 전으로 취소시켜 데이터 복구)

 

✅ DDL

📌 데이터베이스 생성

  • Character_set : 각 문자가 컴퓨터에 저장될 때 어떠한 코드로 저장될지에 대한 규칙의 집합
  • Collation : 특정 문자 셋에 의해 데이터베이스에 저장된 값들을 비교 검색하거나 정렬 등 작업을 위해 문자들을 서로 비교할때 사용하는 규칙들의 집합
-- 다국어 처리(utf8mb3)
create database dbtest
default character set utf8mb3 collate utf8mb3_general_ci;

-- 이모지 문자까지 처리
create database dbtest
default character set utf8mb4 collate utf8mb4_general_ci;

📌 데이터베이스 변경

alter database database_name
default charater utf8mb4
collate utf8mb4_general_ci;

-- character_set 확인
show character set;

📌 데이터베이스 삭제

drop database database_name;

📌 데이터베이스 사용

use database_name;

 

 

✅ DML

📌 SELECT

select distinct department_id from employees;

 

📌 CASE ~ WHEN ~ THEN

select salary
	   case
       	   when salary > 15000 then '고액연봉'
           when salary > 8000 then '평균연봉'
           else '저액연봉'
       end "연봉등급"
from employees;

📌 NULL 비교

-- 검색 x
select employee_id, first_name, salary
from employees
where department_id = null;

where department_id is null;
where department_id is not null;

📌 LIKE

-- 이름에 x 포함
select employee_id, first_name
from employees
where first_name like "%x%";

-- 이름의 끝에서 3번째 자리
select employee_id, first_name
from employees
where first_name like "%x__";

📌 LIMIT

  • limit 개수 [offset 시작인덱스]
  • limit 시작인덱스, 개수

 

✅ DML

📌 INSERT

insert into ssafy_members (userid, username, userpwd) 
values ('kimssafy', '김싸피', '1234');

📌 UPDATE

update ssafy_members
set userpwd = 9876, emaildomain = 'ssafy.co.kr'
where userid = 'kimssafy';
-- where 절을 작성 안하면 모든 데이터가 바뀐다.

📌 DELETE

delete from ssafy_members
where userid = 'kimssafy';
-- where 절이 없으면 모든 데이터 삭제

 

✅ Transaction

  • insert, update, delete 등 DML의 경우 변경 데이터가 물리적 하드디스크에 바로 반영되지 않음
  • commit 전까지는 메모리에서만 작업
-- MySQL
-- AUTOCOMMIT 확인
select @@AUTOCOMMIT;

set AUTOCOMMIT = 1; -- 설정
set AUTOCOMMIT = 0; -- 해제