SQL
SQL μμ±νμ
1. SQL λ¬Έ λμλ νμ μΈλ―Έμ½λ‘ μ μ¨μ€μΌν©λλ€.
: SQL λ¬Έλ² μ μΈλ―Έμ½λ‘ μ΄ νλμ SQL λ¬Έμ μ’ κ²°νλ λ¨μλ€.
2.SQL λ¬Έ μμλ 곡백μ΄λ κ°ν λ±μ μμ λ‘κ² λ£μ μ μλ€.
:μ΄λ€ λ°©μμΌλ‘ μ°λ , ꡬλΆλμ΄μΌν ν€μλλ€μ΄ μ΅μν νλ μ΄μμ 곡백μΌλ‘ ꡬλΆλμ΄ μκ³ , μΈλ―Έμ½λ‘ μΌλ‘ λ§λ¬΄λ¦¬λμ΄ μμΌλ©΄ μ€νμλ λ¬Έμ κ° μλ€.
3.SQL λ¬Έμ λμλ¬Έμ κ΅¬λΆ λ¬Έμ
:SQL λ¬Έμ 보면, MySQLμ κΈ°λ³ΈμΌλ‘ λ΄μ₯λ ν€μλλ€(μ΄λ° κ²λ€μ λ³΄ν΅ βμμ½μ΄βλΌκ³ ν©λλ€.)μ λλ¬Έμλ‘ μ¨μ£Όκ³ , λλ¨Έμ§ λΆλΆμ μλ¬Έμλ‘ μ΄λ€.
4.λ°μ΄ν°λ² μ΄μ€ μ΄λ¦κ³Ό ν μ΄λΈ μ΄λ¦
: μ€λ¬΄μμλ μλ‘ λ€λ₯Έ λ°μ΄ν°λ² μ΄μ€μ, κ°μ μ΄λ¦μ ν μ΄λΈμ΄ μ‘΄μ¬ν μλ μκΈ° λλ¬Έμ 'λ°μ΄ν°λ² μ΄μ€λͺ '. 'ν μ΄λΈλͺ ' νμμΌλ‘ μ λκ² μ’λ€.
--select * from 'λ°μ΄ν°λ² μ΄μ€λͺ
'.'ν
μ΄λΈλͺ
' ;
select * from employees.departments ;
DDL
DDL(Data Definition Language) - λ°μ΄ν°λ² μ΄μ€λ₯Ό μ μνλ μΈμ΄λ‘μ λ°μ΄ν°λ₯Ό μμ±, μμ , μμ νλ λ±μ λ°μ΄ν°μ μ 체μ 골격μ κ²°μ νλ μν μ νλ μΈμ΄λ€.
μ£Όλ‘ λ°μ΄ν° λ² μ΄μ€ κ΄λ¦¬μλ λ°μ΄ν°λ² μ΄μ€ μ€κ³μκ° μ¬μ©νλ©°, CHEMA, DOMAIN, TABLE, VIEW, INDEXλ₯Ό μ μνκ±°λ λ³κ²½ λλ μμ ν λ μ¬μ©νλ μΈμ΄λ€.
μ’ λ₯
μν
CREATE
λ°μ΄ν°λ² μ΄μ€, ν μ΄λΈ λ±μ μμ±νλ μν .
ALTER
ν μ΄λΈμ μμ νλ μν
DROP
λ°μ΄ν°λ² μ΄μ€, ν μ΄λΈμ μμ νλ μν
TRUNCATE
ν μ΄λΈμ μ΄κΈ°ν μν€λ μν
DML
DML(Data Manipulation Language) - μ μλ λ°μ΄ν°λ² μ΄μ€μ μ λ ₯λ λ μ½λλ₯Ό μ‘°ννκ±°λ μμ νκ±°λ μμ νλ λ±μ μν μ νλ μΈμ΄λ‘ λ°μ΄ν°λ² μ΄μ€ μ¬μ©μκ° μμ© νλ‘κ·Έλ¨μ΄λ μ§μμ΄λ₯Ό ν΅νμ¬ μ μ₯λ λ°μ΄ν°λ₯Ό μ€μ§μ μΌλ‘ μ²λ¦¬νλλ° μ¬μ©νλ μΈμ΄λ€.
μ’ λ₯
μν
SELECT
ν μ΄λΈμ λ°μ΄ν°λ₯Ό μ‘°ννλ μν
INSERT
ν μ΄λΈμ λ°μ΄ν°λ₯Ό μ½μ νλ μν
UPDATE
ν μ΄λΈμ λ°μ΄ν°λ₯Ό μμ νλ μν
DELETE
ν μ΄λΈ λ°μ΄ν°λ₯Ό μμ νλ μν
Select
κΈ°λ³Έμ μΈ λ°μ΄ν°λ₯Ό μ‘°ν
select * from employees.employees; -- μ 체 λ°μ΄ν°λ₯Ό μ‘°ν
select emp_no , birth_date, gender from employees.employees ;
-- νΉμ 컬λΌμ λμμΌλ‘ μ‘°ν
Dummy ν
μ΄λΈ νμ©
select count() from dual ;
-- dual μ λλ―Έν
μ΄λΈ
select (1+1) / 2 as val from dual ;
-- selectμ μμ λ€μν μ°μ°μ²λ¦¬λ₯Ό ν λ 미리 μ¬μ©
λ°μ΄ν° μ λ ¬ : μ€λ¦μ°¨μ(ASC) λ΄λ¦Όμ°¨μ (DESC)
select emp_no, birth_date from employees.employees order by birth_date asc ;
-- λ°μ΄ν°λ₯Ό μ‘°νλ κ²°κ³Όλ₯Ό νΉμ 컬λΌμ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ(ASC) νΉμ λ΄λ¦Όμ°¨μ(desc)μΌλ‘ 보μ¬μ€μ§ κ²°μ .
select emp_no, birth_date from employees.employees order by emp_no desc ;
select * from employees.employees order by first_name desc , gender ;
-- order byλ deafaultκ° μ€λ¦μ°¨μ
μ€λ³΅μ μ μΈνκ³ λ³΄κ³ μΆμ λ
select distinct first_name from employees.employees ;
-- μ€λ³΅λ κ°μ μ κ±°νκ³ μ μΌν κ°λ€λ§ 보μ¬μ€ λ μ
select distinct first_name , gender from employees.employees ;
νμ λ μ§ν©μ μ‘°ν (where)
select * from employees.employees where first_name = 'Georgi' ;
-- 쑰건μ λ§λ νμ λ μ§ν©λ§μ μ‘°νν λ μ°λ where
select * from employees.employees where hire_date > '1986-04-30' ;
-- 1986λ
4μ 30μΌ μ΄νμ μ
μ¬ν μ¬λλ€μ μ‘°ν
select*from employees.employees where first_name = 'Georgi' and hire_date > '1986-04-30';
-- μ
μ¬μΌμ΄ 1986λ
4μ 30μΌ μ΄νμ μ
μ¬ν μ΄λ¦μ΄ GerogiμΈ μ¬λ μ‘°ν
select from employees.employees where hire_date between '1986-03-11' and '1986-04-30';
-- 1986λ
3μ11μΌκ³Ό 4μ30μΌ μ¬μ΄μ μ
μ¬ν μ¬λλ€μ μ‘°ν
select * from employees.employees where first_name in ('Percy' , 'Weiye');
-- μ±μ΄ Percy μ΄κ±°λ WeiyeμΈ μ¬λμ μ‘°ν
select * from employees.employees where first_name like 'W%';
-- μ΄λ―μ 첫κΈμκ° Wλ‘ μμλλ μ¬λλ€μ λͺ¨λ μ‘°ν
μ€μ΅νκΈ° μμ SQL EDITOR νκ²½μ€μ μ μ§νν κ²μ΄λ€.
AUTO COMMIT ν΄μ
μμ λͺ¨λ ν΄μ
EDIT μ λλ₯΄κ³ PREFRENCE λ²μ λλ₯Έλ€.

SQL Execution (SQL μ€ν) μμ New connections use auto commit mode λ²νΌμ λλ¬ ν΄μ νλ€.

λ€μ μμ λͺ¨λλ₯Ό ν΄μ ν κ²μ΄λ€.
SQL Editorμ λ€μ΄κ°μ Safe Updates (rejects UPDATES and DELETs with restrictions) λ²νΌμ ν΄μ νλ€.

INSERT , UPDATE , DELETE
ν μ΄λΈ μμ±
seq : μλ μΈλ±μ€ μ¦κ°,
seqλ‘ μ»¬λΌμ μ΄λ¦μ μ λ ₯νκ³ λ°μ΄ν° νμ μ INT NOT NULL λ‘ μ€λ³΅μ΄ λΆκ°λ₯ν μ«μννκ³ AUTO_INCREMENT λ‘ μλ μ¦κ°λ₯Ό μ€μ
seq λ₯Ό κΈ°λ³Έν€λ‘ μ§μ νμ¬ μ€λ³΅μ΄ λΆκ°λ₯νκ² μ§μ
CREATE TABLE TEST_DB.customer (
seq INT NOT NULL AUTO_INCREMENT,
ct_id VARCHAR(20) NOT NULL,
ct_pw VARCHAR(100) NOT NULL,
address VARCHAR(100) NOT NULL,
ct_tell VARCHAR(20) NOT NULL,
REG_DATE DATE NOT NULL,
EXPIRED_DATE DATE NOT NULL,
PRIMARY KEY(seq) ) ENGINE= MYISAM CHARSET=utf8 ;
-- show character set ; μΊλ¦ν° μ
μ’
λ₯ νμΈ
2. λ°μ΄ν° μ½μ
INSERT문
INSERT INTO test_db.customer (ct_id, ct_pw, address, ct_tell, REG_DATE, EXPIRED_DATE)
values ('yunpha123','1234','μΈμ²μ λΆνꡬ κ°μ°λ 무μ§κ°μννΈ 101νΈ','010-1234-5678','20180920','2020-02-18') ;
3. λ°μ΄ν° νμΈ
select * from test_db.customer ;
UPDATE문
select * from employees.departments;
insert into employees.departments (dept_no, dept_name) values('d010', 'android developteam') ;
insert into employees.departments (dept_no, dept_name) values('d011', 'IOS developteam') ;
insert into employees.departments (dept_no, dept_name) values('d012', 'Infra team') ;
insert into employees.departments (dept_no, dept_name) values('d013', 'operation team') ;
-- κ·Όλ° λ΄κ° λΆμμ΄λ¦μ μλͺ» λ£μμ΄.
update employees.departments set dept_name = 'andorid team' where dept_no = 'd010';
select * from employees.departments where dept_no= 'd010';
select from employees.departments ;
update employees.departments set dept_name = 'IOS team'
where dept_name = 'IOS developteam';
select from employees.departments where dept_no = 'd011';
-- μν updateμ 쑰건μ μ΄ μμκ²½μ° dbμμλ λ§€μ° μνν μμ
μΌλ‘ μΈμν¨ μλνλ©΄ λ°μ΄ν° μ 체λ₯Ό λ°κΎΈκ² λλ―λ‘
--update employees.departments set dept_no = 'd100' ;
DELETE λ¬Έ
select from employees.employees ;
select from employees.dept_emp ;
select * from employees.employees a , employees.dept_emp b where a.emp_no = b.emp_no ;
create table employees.emp_dept as (select a.emp_no , b.dept_no from employees.employees a , employees.dept_emp b where a.emp_no = b.emp_no) ;
select * from employees.emp_dept ;
delete from employees.emp_dept where emp_no = 10001 and dept_no='d005';
delete from employees.emp_dept where emp_no = 10002 ;
delete from employees.emp_dept ; -- λ°μ΄ν°λ§ μμ λ¨
View
λ·°(view)λ κ΄κ³ λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°λ² μ΄μ€ μΈμ΄ SQLμμ νλ μ΄μμ ν μ΄λΈ (λλ λ€λ₯Έ λ·°)μμ μνλ λͺ¨λ λ°μ΄ν°λ₯Ό μ ννμ¬, κ·Έλ€μ μ¬μ©μ μ μνμ¬ λνλΈ κ²μ΄λ€. κ΄κ³ λ°μ΄ν°λ² μ΄μ€μ κ΄κ³ λͺ¨λΈμ κ΄κ³μ μΌμ’ μΈ λμΆ κ΄κ³μ ν΄λΉνλ€. μ¬λ¬ ν μ΄λΈ(κΈ°λ³Έ κ΄κ³) λλ λ·°μ λ°μ΄ν°λ₯Ό μ°κ²°νμ¬ μ‘°ν©ν μ μλ€. 보기μ νμλλ λ°μ΄ν°μ μ ν κΈ°μ€μ μ§μ ν μλ μλ€[1].
μ½κ² λ§ν΄μ λ·°(view)λ λ°μ΄ν°λ² μ΄μ€μ μ‘΄μ¬νλ μΌμ’ μ κ°μ ν μ΄λΈμ μλ―Ένλ€.
μ΄λ¬ν λ·°λ μ€μ ν μ΄λΈμ²λΌ νκ³Ό μ΄μ κ°μ§κ³ μμ§λ§, μ€μ λ‘ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μμ§λ μκ³ , λ€λ₯Έ ν μ΄λΈμ΄λ λ€λ₯Έ λ·°μ μ μ₯λμ΄ μλ λ°μ΄ν°λ₯Ό 보μ¬μ£Όλ μν λ§μ μνν©λλ€.
μ¦, λ·°λ₯Ό μ¬μ©νλ©΄ μ¬λ¬ ν μ΄λΈμ΄λ λ·°λ₯Ό νλμ ν μ΄λΈμ²λΌ λ³Ό μ μλ€[2].
λ·°μ νΉμ§
μ₯μ :
νΉμ μ¬μ©μμκ² ν μ΄λΈ μ μ²΄κ° μλ νμν νλλ§μ 보μ¬μ€λ€.
볡μ‘ν 쿼리λ₯Ό λ¨μνν΄μ μ¬μ©νλ€.
쿼리λ₯Ό μ¬μ¬μ©ν μ μμ΅λλ€.
λ¨μ :
ν λ² μ μλ λ·°λ λ³κ²½ν μ μλ€.
μ½μ , μμ , κ°±μ μμ μ λ§μ μ ν μ¬νμ κ°μ§λ€.
μμ λ§μ μΈλ±μ€λ₯Ό κ°μ§ μ μλ€.
λ¬Έλ²μ λ€μκ³Ό κ°λ€.
CREATE VIEW λ·°μ΄λ¦ AS ( SELECT νλμ΄λ¦1, νλμ΄λ¦2, ... FROM ν
μ΄λΈμ΄λ¦ WHERE 쑰건)
λ€μ μμ λ₯Ό λ°λΌν΄λ³΄κΈΈ κΆνλ€.
CREATE VIEW employees.emp_dept22 as (
select a.emp_no , b.dept_no from employees.employees a , employees.dept_emp b
where a.emp_no = b.emp_no) ;
select * from employees.emp_dept22 ;
μλΈμΏΌλ¦¬(Sub Query)
μλΈμΏΌλ¦¬λ SQL λ¬Έμ ν¬ν¨λμ΄ μλ λ λ€λ₯Έ SQL λ¬Έμ λ§νλ€.
μλΈμΏΌλ¦¬λ₯Ό μ¬μ©νλ μ΄μ λ μ¬λ¬λ²μ 쿼리λ₯Ό μνμ ν΅ν΄ μ»λ κ²°κ³Όλ₯Ό νλμ μ€μ²©λ SQLλ¬Έμ₯μΌλ‘ κ°νΈνκ² κ²°κ³Όλ₯Ό μ»μ μ μκ² ν΄μ€λ€.
μλΈμΏΌλ¦¬λ μμΉμ λ°λΌ λͺ μΉμ΄ λ€λ₯΄λ€.
FROMμ μ μ¬μ©νλ μΈλΌμΈ λ·°(Inline view),
SELECTλ¬Έμ μ¬μ©νλ μ€μΉΌλΌ μλΈμΏΌλ¦¬(Scala Subquery)
WHEREμ μ μ¬μ©νλ μλΈμΏΌλ¦¬(Subquery)
3κ°μ§ μλΈμΏΌλ¦¬μ λν΄ κ°λ¨ν μ€μ΅μ μ§ννκ² λ€.
FROMμ μ μ¬μ©νλ μΈλΌμΈ λ·°(Inline view)
select emp_no , salary from employees.salaries ;
select a.*, b.salary from employees.employees a left join
(select emp_no , salary from employees.salaries) b on a.emp_no = b.emp_no ;
--ν
μ΄λΈ μμ±
create table employees.emp_salary as (select a.* , b.salary from employees.employees a
left join
(select emp_no , salary from employees.salaries) b on a.emp_no = b.emp_no ) ;
select * from employees.emp_salary ;
1986λ 06 26μΌμ μ μ¬ν νμ¬μ μ€ μ°λ΄μ΄ κ°μ₯ λμ TOP3λ₯Ό μ‘°ννκ³ μΆμ λ λ€μκ³Ό κ°λ€.
select emp_no , first_name, last_name, salary
from (select * from employees.emp_salary where hire_date ='1986-06-26' ) a
order by salary limit 3 ;
SELECTλ¬Έμ μ¬μ©νλ μ€μΉΌλΌ μλΈμΏΌλ¦¬(Scala Subquery)
μ¬μ 10010 κΈμ¬μ ν μ΄λΈ μ 체 νκ· κΈμ¬λ₯Ό μ‘°νν λ λ€μκ³Ό κ°λ€.
select emp_no , first_name,last_name, salary ,
(select round(avg(salary),-1) from employees.emp_salary ) as 'νκ· κΈμ¬'
from employees.emp_salary where emp_no =10010;
Where μ μ μ¬μ©νλ μλΈμΏΌλ¦¬
'Peac' μ±μ κ°μ§ μ¬μλ€λ³΄ λ 빨리 μ μ¬ν μ¬λλ€μ μ‘°ννκ³ μΆμ λ λ€μκ³Ό κ°λ€.
select emp_no, first_name , last_name ,hire_date from employees.employees
where hire_date < (select min(hire_date) from employees.employees where last_name = 'Peac')
order by hire_date ;
DCL
DCL(Data Control Language) - λ°μ΄ν°λ² μ΄μ€μ μ κ·Όνκ±°λ κ°μ²΄μ κΆνμ μ£Όλλ±μ μν μ νλ μΈμ΄λ‘ λ°μ΄ν°λ₯Ό μ μ΄νλ©° λ°μ΄ν°μ 보μ, 무결μ±, ν볡, λ³ν μνμ μ΄ λ±μ μ μνλλ° μ¬μ©νλ€.
μ’ λ₯
μν
GRANT
νΉμ λ°μ΄ν°λ² μ΄μ€ μ¬μ©μμκ² νΉμ μμ μ λν μνκΆν λΆ
REVOKE
νΉμ λ°μ΄ν°λ² μ΄μ€ μ¬μ©μμκ² νΉμ μμ μ λν μν κΆνμ λ°ν, νμ
COMMIT
νΈλμμ μ μμ μ μ·¨μ λ° μλλ 볡ꡬνλ μν
ROLLBACK
νΈλμμ μ μμ μ μ·¨μ λ° μλλλ‘ λ³΅κ΅¬νλ μ
select λ¬Έ μ€νμμ
SELECT 쿼리문μ μ€ννμλ FROM - WHERE GROUP BY - HAVING - SELECT - ORDER BY -LIMIT μμλλ‘ μ€νμ΄ λλ€.
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT

ꡬ체μ μΌλ‘ SQLμ μ€νμμλ₯Ό μ΄ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
FROM : DBMSμ κ° ν μ΄λΈ μ€μμ μ΄λ€ ν μ΄λΈμ μ‘°νν μ§ λ¨Όμ κ²°μ νλ€.
WHERE : FROMλΆλΆμμ ν΄λΉλλ ν μ΄λΈμμ 쑰건μ λ§μ‘±νλ rowλ€μ μ λ³νλ€.
GROUP BY : WHERE 쑰건μΌλ‘ μΆμΆλ λ°μ΄ν°λ₯Ό μ νν μΉΌλΌμ κΈ°μ€μΌλ‘ rowλ€μ 그루ννλ€. νλμ κ·Έλ£Ήμ νλμ rowλ‘ ννλλ€.
HAVING : 그루ν μμ ν μμ±λ μ¬λ¬ κ·Έλ£Ή μ€ νΉμ 쑰건(λ€)μ λ§μ‘±νλ κ·Έλ£Ήλ€λ§ μ λ³νλ€.
SELECT : μ¬λ¬ 쑰건λ€μ μ²λ¦¬ν ν λ¨μ λ°μ΄ν°μμ μ΄λ€ 컬λΌμ μΆλ ₯ν μ§ μ ννλ€.
ORDER BY : νμ μμλ₯Ό μ΄λ»κ² 보μ¬μ€μ§ μ λ ¬νλ€.
LIMIT : μ΄μ λ¨κ³κΉμ§ μ‘°νλ rowλ€ μ€ μΌλΆ rowλ€λ§ 보μ¬μ€λ€.
Foreign Key
Foreign Keyλ λ€λ₯Έ ν μ΄λΈμ νΉμ rowλ₯Ό μλ³νλ 컬λΌμΌλ‘ μ°λ¦¬λ§λ‘ μΈλ ν€λΌκ³ λΆλ₯Έλ€. μΈλλ μ°Έμ‘°νλ ν μ΄λΈμμ 1κ°μ ν€(μμ± λλ μμ±μ μ§ν©)μ ν΄λΉνκ³ , μ°Έμ‘°νλ μΈ‘μ κ΄κ³ λ³μλ μ°Έμ‘°λλ μΈ‘μ ν μ΄λΈμ ν€λ₯Ό κ°λ¦¬ν¨λ€. μ°Έμ‘°νλ ν μ΄λΈμ μμ±μ ν 1κ°μ κ°μ, μ°Έμ‘°λλ μΈ‘ ν μ΄λΈμ ν κ°μ λμλλ€. μ΄ λλ¬Έμ μ°Έμ‘°νλ ν μ΄λΈμ νμλ, μ°Έμ‘°λλ ν μ΄λΈμ λνλμ§ μλ κ°μ ν¬ν¨ν μ μλ€[3]. μ¦ μ리ν€λ λκ°μ ν μ΄λΈμ μ°κ²°ν΄μ£Όλ μ°κ²° λ€λ¦¬ μν μ νλ©° μ€λ³΅ λ κ°μ λ°©μ§ν΄μ€λ€[4].
κ·Έλ λ€λ©΄ μΈλν€λ μ νμν κΉ?
μλ₯Όλ€μ΄ , μ°λ΄ ν μ΄λΈμμ μλ‘μ΄ λ°μ΄ν°λ₯Ό λ£κ³ μ ν λ μΈλν€μ ν΄λΉνλ μ¬μ μμ΄λκ° μλ μ 보면 DBMSλ μλ¬λ₯Ό λ°μμμΌ ν΄λΉ λ°μ΄ν° μ½μ μ λ§λλ€. μ΄ κΈ°λ₯μ ν μ΄λΈ λ΄μ μ μ₯λμ΄μλ λ°μ΄ν°κ° νμ μ°Έμ‘°νλ κ°μ΄ μλ€λ κ²μ 보μ₯ν΄μ£Όλ μν μ νλ€[4].
μΈλν€λ₯Ό μ¬μ©νλ λ¬Έλ²μ λ€μκ³Ό κ°λ€.
CREATE TABLE table_name (
id INTEGER PRIMARY KEY,
col2 CHARACTER VARYING(20),
col3 INTEGER FOREIGN KEY REFERENCES other_table(column_name),
... )
λ€μμ EMPLOYEES DBμμ salary ν μ΄λΈμ employees ν μ΄λΈμ μ°Έμ‘°νλλ‘ μ€μ νλ μ€μ΅μ κ°κ² λ€.

μ€μ μ λ§μΉ ν applyλ₯Ό λλ₯΄λ©΄ λ€μκ³Ό κ°μ΄ μΈλν€ λ¬Έλ²μ΄ λμ¨λ€.
ν΄μνλ©΄ μ°λ΄ν μ΄λΈ(salary)μ empnoλ μ¬μ ν μ΄λΈ(employees)μ emp_no 컬λΌμ μ°Έμ‘°νλλ‘ νλ€.λΌκ³ ν μ μλ€.

Reference:
[1] https://ko.wikipedia.org/wiki/VIEW_(SQL)
[2] http://tcpschool.com/mysql/mysql_view_createReplace
[3] https://ko.wikipedia.org/wiki/%EC%99%B8%EB%9E%98_%ED%82%A4
Last updated
Was this helpful?