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 ν™˜κ²½μ„€μ •μ„ μ§„ν–‰ν•  것이닀.

  1. AUTO COMMIT ν•΄μ œ

  2. μ•ˆμ „λͺ¨λ“œ ν•΄μ œ

EDIT 을 λˆ„λ₯΄κ³  PREFRENCE 버을 λˆ„λ₯Έλ‹€.

SQL Execution (SQL μ‹€ν–‰) μ—μ„œ New connections use auto commit mode λ²„νŠΌμ„ 눌러 ν•΄μ œν•œλ‹€.

λ‹€μŒ μ•ˆμ „λͺ¨λ“œλ₯Ό ν•΄μ œν•  것이닀.

SQL Editor에 λ“€μ–΄κ°€μ„œ Safe Updates (rejects UPDATES and DELETs with restrictions) λ²„νŠΌμ„ ν•΄μ œν•œλ‹€.

INSERT , UPDATE , DELETE

  1. ν…Œμ΄λΈ” 생성

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].

뷰의 νŠΉμ§•

μž₯점:

  1. νŠΉμ • μ‚¬μš©μžμ—κ²Œ ν…Œμ΄λΈ” 전체가 μ•„λ‹Œ ν•„μš”ν•œ ν•„λ“œλ§Œμ„ 보여쀀닀.

  2. λ³΅μž‘ν•œ 쿼리λ₯Ό λ‹¨μˆœν™”ν•΄μ„œ μ‚¬μš©ν•œλ‹€.

  3. 쿼리λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점:

  1. ν•œ 번 μ •μ˜λœ λ·°λŠ” λ³€κ²½ν•  수 μ—†λ‹€.

  2. μ‚½μž…, μ‚­μ œ, κ°±μ‹  μž‘μ—…μ— λ§Žμ€ μ œν•œ 사항을 κ°€μ§„λ‹€.

  3. μžμ‹ λ§Œμ˜ 인덱슀λ₯Ό κ°€μ§ˆ 수 μ—†λ‹€.

문법은 λ‹€μŒκ³Ό κ°™λ‹€.

 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λ¬Έμž₯으둜 κ°„νŽΈν•˜κ²Œ κ²°κ³Όλ₯Ό 얻을 수 있게 ν•΄μ€€λ‹€.

μ„œλΈŒμΏΌλ¦¬λŠ” μœ„μΉ˜μ— 따라 λͺ…칭이 λ‹€λ₯΄λ‹€.

  1. FROMμ ˆμ— μ‚¬μš©ν•˜λŠ” 인라인 λ·°(Inline view),

  2. SELECT문에 μ‚¬μš©ν•˜λŠ” 슀칼라 μ„œλΈŒμΏΌλ¦¬(Scala Subquery)

  3. 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 μˆœμ„œλŒ€λ‘œ 싀행이 λœλ‹€.

  1. FROM

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. SELECT

  6. ORDER BY

  7. LIMIT

https://velog.io/@ha0kim/SQL

ꡬ체적으둜 SQL의 μ‹€ν–‰μˆœμ„œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  1. FROM : DBMS의 각 ν…Œμ΄λΈ” μ€‘μ—μ„œ μ–΄λ–€ ν…Œμ΄λΈ”μ„ μ‘°νšŒν• μ§€ λ¨Όμ € κ²°μ •ν•œλ‹€.

  2. WHERE : FROMλΆ€λΆ„μ—μ„œ ν•΄λ‹Ήλ˜λŠ” ν…Œμ΄λΈ”μ—μ„œ 쑰건에 λ§Œμ‘±ν•˜λŠ” row듀을 μ„ λ³„ν•œλ‹€.

  3. GROUP BY : WHERE 쑰건으둜 μΆ”μΆœλœ 데이터λ₯Ό μ„ νƒν•œ μΉΌλŸΌμ„ κΈ°μ€€μœΌλ‘œ row듀을 κ·Έλ£¨ν•‘ν•œλ‹€. ν•˜λ‚˜μ˜ 그룹은 ν•˜λ‚˜μ˜ row둜 ν‘œν˜„λœλ‹€.

  4. HAVING : 그루핑 μž‘μ—… ν›„ μƒμ„±λœ μ—¬λŸ¬ κ·Έλ£Ή 쀑 νŠΉμ • 쑰건(λ“€)을 λ§Œμ‘±ν•˜λŠ” κ·Έλ£Ήλ“€λ§Œ μ„ λ³„ν•œλ‹€.

  5. SELECT : μ—¬λŸ¬ 쑰건듀을 μ²˜λ¦¬ν•œ ν›„ 남은 λ°μ΄ν„°μ—μ„œ μ–΄λ–€ μ»¬λŸΌμ„ 좜λ ₯ν• μ§€ μ„ νƒν•œλ‹€.

  6. ORDER BY : ν–‰μ˜ μˆœμ„œλ₯Ό μ–΄λ–»κ²Œ 보여쀄지 μ •λ ¬ν•œλ‹€.

  7. 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

[4] https://brunch.co.kr/@dan-kim/26

Last updated

Was this helpful?