개발공부/SK Networks Family AI bootcamp 강의노트

9일차 [SQL(DML)]

HyunJung_Jo 2025. 1. 17. 15:48
SQL 명령어 설명
 데이터 정의어
(DDL : Data Definition Language)
CREATE
ALTER
DROP
RENAME
TRUNCATE 
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.
데이터 제어어
(DCL : Data Control Language) 
GRANT
REVOKE 
데이터 보안(계정),무결성,회복 등을 제어하는 명령
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함.
데이터 조작어
(DML :  Data Manipulation Language
SELECT  데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함
INSERT
UPDATE
DELETE 
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함.
트랜잭션 제어어
(TCL : Transaction Control Language)
COMMIT
ROLLBACK
SAVEPOINT 
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말함.
 

 

1. DML 기초

# DML (데이터 조회 및 변형)

show databases;
use examplesdb;

#########################################
# 1. 테이블 생성
#########################################
create table mytable(
id int unsigned auto_increment, 
# unsigned: 양수 데이터만 쓰게 한다.
# auto_increment: 기존 id값보다 1이 큰 값을 id에 넣는 함수
name varchar(10) not null unique,
phone varchar(50),
series varchar(50),
# primary key: not null & unique
primary key(id)
);

# 생성된 테이블 확인
show tables;
# 생성된 테이블 자세하게 보기
desc mytable;

#########################################
# 데이터 생성
# 명령어: insert table name(col1, col2...)values(data1...)
########################################
insert mytable
	(name, phone, series)
	values('name1','1111','11');
# id가 하나씩 증가하는 지 보기
insert mytable
	(name, phone, series)
	values('name2','2222','22');
insert mytable
	(name, phone, series)
	values('name3','333','333');

###############################
# 데이터 조회
# select 
#   col1,
#   col2.. 
# from table
# where 1=1
#   and 조건..
###############################
select * from mytable;
select 
	id
  , name
  , phone
  , series
from mytable
where 1=1
  and name = 'name1'

###############################
# 데이터 수정
# update table_name set col_name = '수정할 데이터' where 조건(홍길동만!)
# 데이터를 수정할 때는 꼭 where 조건을 적용해야 함...! 안그러면 싹다 바뀜, 시말서 써야할 지도 모른다 ㅠㅠ
###############################
# 줄맞춤 중요하다.
update mytable     # 수정될 테이블명
  set phone='1211' # 수정할 데이터 
where 1=1 # 여기부터 조건문...where 1=1 and 조건1 and 조건2...
  and name = 'name1'
--   and phone = '7777'
--   and series = '11'
  ;
select * from mytable;
/*WHERE 1=1은 SQL 쿼리에서 조건을 더 편리하게 추가할 수 있도록 해주는 패턴입니다.
 *  이는 특히 동적으로 쿼리를 생성해야 할 경우 유용하게 사용됩니다. 
 * 정상적인 조건을 사용하더라도, WHERE 1=1을 통해 추가적인 조건을 쉽게 관리할 수 있는 장점이 있습니다.*/

###############################
# 데이터 삭제
# delete from table_name where 조건!!
# 데이터를 수정할 때는 꼭 where 조건을 적용해야 함...! 안그러면 싹다 바뀜, 시말서 써야할 지도 모른다 ㅠㅠ
###############################
select * from mytable;
delete from mytable # 이것만 쓰면 데이터 싹다 사라짐
where 1=1
  and name = 'name3';
# drop(DB, table 삭제), delete (데이터 삭제)

 

2. DML 고급

mysqlsampledatabase.sql
0.19MB

다운받아서 실행하면 샘플 디비 생김

 

# DML 고급

####################
# 정렬
####################

# 데이터 조회시 기준이 있어야 한다!!
# select 면 무조건 order by 써야 한다.
use classicmodels;

# vip 뽑아보자
select 
	*
from customers
where 1=1
order by creditLimit desc; # asc (오름차순,default), desc (내림차순)

# 나라별 vip 뽑아보자 , 원하는 컬럼만 보자
SELECT
	country
	, creditLimit
	, customerName
	, phone
	, city
from customers
where 1=1
order by country asc, creditLimit desc
; 


####################
# as, 별칭
####################

SELECT
	country
	, creditLimit as `부자의 자산크기`
	, customerName as `부자님의 성함`
	, phone
	, city
from customers
where 1=1
order by country asc, creditLimit desc
; 

####################
# 조건
####################
SELECT
	country
	, creditLimit 
	, customerName
	, phone
	, city
from customers
where 1=1
--   and country = 'Australia'
	and (country = 'USA' or country = 'Australia') # or 조건엔 항상 괄호치기
-- 	and creditLimit > 50000
-- 	and creditLimit <= 100000
	and 50000 < creditLimit <=100000
	and city like '%C%' # N%: N뒤에 all, 모든 것
order by city asc, creditLimit desc
;