์์ฒด ์กฐ์ธ(self join)
-- ์์ ๊ณผ ์์ ์ด ์กฐ์ธ
-- ํ ์ด๋ธ์ 1๊ฐ๋ง ์ฌ์ฉ
-- ์) ํ์ฌ์ ์กฐ์ง ๊ด๊ณ
-- ๋ฐ์ดํฐ ์์ฑ
create table emp_table (emp char(4), manager char(4), phone varchar(8));
insert into emp_table values('๋ํ', null, '0000');
insert into emp_table values('์์ ์ด์ฌ', null, '1111');
insert into emp_table values('๊ด๋ฆฌ์ด์ฌ', '๋ํ', '2222');
insert into emp_table values('์ ๋ณด์ด์ฌ', '๋ํ', '3333');
insert into emp_table values('์์ ๊ณผ์ฅ', '์์ ์ด์ฌ', '1111-1');
insert into emp_table values('๊ฒฝ๋ฆฌ๋ถ์ฅ', '๊ด๋ฆฌ์ด์ฌ', '2222-1');
insert into emp_table values('์ธ์ฌ๋ถ์ฅ', '๊ด๋ฆฌ์ด์ฌ', '2222-2');
insert into emp_table values('๊ฐ๋ฐํ์ฅ', '์ ๋ณด์ด์ฌ', '3333-1');
insert into emp_table values('๊ฐ๋ฐ์ฃผ์', '์ ๋ณด์ด์ฌ', '3333-2');
select * from emp_table;
-- ์์ฒด ์กฐ์ธ์ ๊ธฐ๋ณธ ํ์
select ์ด๋ชฉ๋ก
from ํ ์ด๋ธ ๋ณ์นญA
inner join ํ ์ด๋ธ ๋ณ์นญb
on ์กฐ์ธ๋ ์กฐ๊ฑด
where ๊ฒ์ ์กฐ๊ฑด;
-- ๊ฒฝ๋ฆฌ ๋ถ์ฅ์ ์ง์ ์๊ด ์ฐ๋ฝ์ฒ๋ฅผ ์๊ณ ์ถ๋ค๋ฉด
select a.emp ์ง์, b.emp ์ง์์๊ด, b.phone ์ง์์๊ด ์ฐ๋ฝ์ฒ,
from emp_table a
inner join emp_table b
on a.manager = b.emp
where a.emp = '๊ฒฝ๋ฆฌ๋ถ์ฅ';
<<< ๋ญ๊ฐ ์ฝ๋๊ฐ ์๋ชป๋์๋์ง ์๋ฌ๊ฐ ๋ฌ๋ค................... ์์ ํด์ ์ ๋ก๋ ํด์ผ๊ฒ ๋ค!!!!!
-- ์ฐ์ต๋ฌธ์
-- 1. buy ํ ์ด๋ธ๊ณผ member ํ ์ด๋ธ์ ์ด์ฉํ์ฌ ํ ๋ฒ์ด๋ผ๋ ๊ตฌ๋งค๊ธฐ๋ก์ด ์๋ ํ์๋ค ๋ฆฌ์คํธ ์ถ์ถํ๊ธฐ
-- ์กฐํํ ์ด : mem_id, addr.์ค๋ณต์ด ์๋๋ก.
select distinct m.mem_id, m.addr
from buy b
inner join member m
on b.mem_id = m.mem_id
order by mem_id;
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ aac outcomes.csv ์๋ฃ๊ฐ ํ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ๋ก
CREATE TABLE aac_outcomes (
age_upon_outcome varchar(15) COLLATE utf8mb4_general_ci NOT NULL,
animal_id char(7) COLLATE utf8mb4_general_ci NOT NULL,
animal_type varchar(10) COLLATE utf8mb4_general_ci NOT NULL,
breed varchar(70) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
color varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
date_of_birth datetime NOT NULL,
datetime datetime NOT NULL,
monthyear varchar(90) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
name varchar(20) COLLATE utf8mb4_general_ci NOT NULL,
outcome_subtype varchar(25) COLLATE utf8mb4_general_ci NOT NULL,
outcome_type varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
sex_upon_outcome varchar(20) COLLATE utf8mb4_general_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
์์ ์ฝ๋ ์คํํ๊ธฐ
-- 2. ์ฒ์ฌ์ง๋ณ์ผ๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์์.
-- ์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ id์ ์ด๋ฆ์ id์ ์ค๋ฆ์ฐจ์์ผ๋ก ์กฐํ
-- ์กฐํํ ์ด : animal_id, name, outs.datetime, ins.datetime
select ins.animal_id, ins.name, outs.datetime, ins.datetime
from outs.datetime outs
inner join ins.datetime ins
on outs.animal_id = ins.animal_id
where ins.datetime is null
order by animal_id;
select outs.animal_id, outs.name, outs.datetime, ins.datetime
from aac_outcomes outs
left outer join aac_intakes ins
on outs.animal_id = ins.animal_id
where ins.animal_id is null
order by outs.animal_id asc;
-- 3. ๊ด๋ฆฌ์์ ์ค์๋ก ์ผ๋ถ ๋๋ฌผ์ ์ ์์ผ์ด ์๋ชป ์ ๋ ฅ๋์์
-- ๋ณดํธ ์์์ผ๋ณด๋ค ์ ์์ผ์ด ๋ ๋น ๋ฅธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ sql๋ฌธ์ ์์ฑํ๊ธฐ
-- ๋จ, ๋ณดํธ์์์ผ์ด ๋น ๋ฅธ ์์ผ๋ก ์กฐํํด์ผํจ
-- ์กฐํํ ์ด : animal_id, name, outs.datetime, ins.datetime
select ins.animal_id, ins.name, outs.datetime outtime, ins.datetime intime
from aac_intakes ins
inner join aac_outcomes outs
on ins.animal_id = outs.animal_id
where outs.datetime <= ins.datetime
order by ins.datetime asc;
-- 4. ์์ง ์ ์์ ๋ชป ๊ฐ ๋๋ฌผ ์ค, ๊ฐ์ฅ ์ค๋ ๋ณดํธ์์ ์์๋ ๋๋ฌผ 3๋ง๋ฆฌ์ ์ด๋ฆ๊ณผ ๋ณดํธ ์์์ผ์ ์กฐํํ๋ sql๋ฌธ ์์ฑํ๊ธฐ
-- ์ด ๋, ๊ฒฐ๊ณผ๋ ๋ณดํธ์์์ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์กฐํ
-- ์กฐํํ ์ด : name, datetime
select ins.name, ins.datetime, outs.datetime
from aac_intakes ins
left outer join aac_outcomes outs
on ins.name = outs.name
where outs.datetime is null
order by outs.datetime desc
limit 3;
select ins.name, ins.datetime
from aac_intakes ins
left outer join aac_outcomes outs
on ins.animal_id = outs.animal_id
where outs.animal_id is null
and ins.name != '' -- ์ด๋ฆ์ด ๋น์นธ์ธ ๊ฒฝ์ฐ ์ ์ธ(์ ํ)
and ins.name not like '*%' -- ์ด๋ฆ์ด *๋ก ์์ํ๋ ๊ฒฝ์ฐ ์ ์ธ(์ ํ)
order by ins.datetime asc
limit 3;
-- 5. ๋ณดํธ์์์ ์ค์ฑํ ์์ ์ ๊ฑฐ์น ๋๋ฌผ ์ ๋ณด๋ฅผ ์์๋ณด๋ ค ํจ
-- ๋ณดํธ์์ ๋ค์ด์ฌ ๋น์์๋ ์ค์ฑํ๋์ง ์์์ง๋ง
-- ๋ณดํธ์๋ฅผ ๋๊ฐ ๋น์์๋ ์ค์ฑํ๋ ๋๋ฌผ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
-- ์กฐํํ ์ด : animal_id, animal_type, name, sex_upon_intake, sex_upon_outcome
-- ์ ๋ ฌ ์์ : animal_id ์ค๋ฆ์ฐจ์
select * from aac_intakes;
select ins.animal_id, ins.animal_type, ins.name, ins.sex_upon_intake, outs.sex_upon_outcome
from aac_intakes ins
inner join aac_outcomes outs
on ins.animal_id = outs.animal_id
where ins.sex_upon_intake != outs.sex_upon_outcome
order by ins.animal_id asc;
-- MySQL ๋ฐ์ดํฐ ํ์
-- ๋ฐ์ดํฐ ํ์์ ํฌ๊ฒ ์ซ์ํ,๋ฌธ์ํ, ๋ ์งํ์ด ์์
-- ์ค์ ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํํ๊ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์
-- ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ์์ ๋ฐ์ดํฐ ํ์์์ ์ธ๋ถ์ ์ผ๋ก ๋ค์ ์ฌ๋ฌ ๋ฐ์ดํฐ ํ์์ผ๋ก ๋๋จ
-- ์) ์ฌ๋์ ์ด๋ฆ์ ์ ์ฅํ๊ธฐ ์ํด 100๊ธ์๋ฅผ ์ ์ฅํ ์นธ์ ์ค๋นํ๋ ๊ฒ์ ๋นํจ์จ์ ์
-- ์ ์ํ
-- -- tinyint (์ซ์ ๋ฒ์ : -128 ~ 127)
-- -- smallint (์ซ์ ๋ฒ์ : -32768 ~ 32767)
-- -- int (์ซ์ ๋ฒ์ : ์ฝ -21์ต ~ 21์ต)
-- -- bright (์ซ์ ๋ฒ์ : ์ฝ -900๊ฒฝ ~ 900๊ฒฝ)
create table tbl_type (
tinyint_col tinyint,
smallint_col smallint,
int_col int,
bigint_col bigint); # ํ ์ด๋ธ์ ๋ง๋ค ๋๋ถํฐ ๋ฐ์ดํฐ ํ์ ์ง์
-- ๊ฐ ์ด์ ์ต๋๊ฐ๊น์ง๋ ์ด์์์ด ์ ๋ ฅ ๊ฐ๋ฅ
insert into tbl_type values(127, 32767, 2147483647, 900000000000000000);
select * from tbl_type;
-- ์ต๋๊ฐ์ 0์ ๋ ๋ถ์ฌ์ ์ ๋ ฅํด๋ณด๊ธฐ
insert into tbl_type values(1270, 327670, 21474836470, 9000000000000000000);
-- ๋ฌธ์ํ
-- ๋ฌธ์ํ์ ๊ธ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ
-- ์ ๋ ฅํ ์ต๋ ๊ธ์์ ๊ฐ์๋ฅผ ์ง์ ํด์ผ ํจ
-- -- char(๊ฐ์)
-- -- varchar(๊ฐ์)
-- char๋ Character์ ์ฝ์๋ก, ๊ณ ์ ๊ธธ์ด ๋ฌธ์ํ์ด๋ผ๊ณ ๋ถ๋ฆ
-- ์๋ฆฟ์๊ฐ ๊ณ ์ ๋จ
-- ์) char(10)์ "๊ฐ๋๋ค" 3๊ธ์๋ง ์ ์ฅํด๋ 10์๋ฆฌ๋ฅผ ๋ชจ๋ ํ๋ณดํ ํ์ ์์ 3์๋ฆฌ๋ง ์ฌ์ฉํ๊ณ ๋ค์ 7์๋ฆฌ๋ ๋ญ๋นํ๊ฒ ๋จ
-- varchar๋ ๊ฐ๋ณ๊ธธ์ด ๋ฌธ์ํ์ผ๋ก, "๊ฐ๋๋ค" 3๊ธ์๋ฅผ ์ ์ฅํ๋ฉด 3์๋ฆฌ๋ง ์ฌ์ฉํจ(Variable Character)
-- vachar๋ char๋ณด๋ค ๊ณต๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง MySQL์ ์ฒ๋ฆฌ ์๋๋ CHAR๊ฐ ๋ ๋น ๋ฆ
-- ์) ๊ฑฐ์ฃผ ์ง์ญ ์ปฌ๋ผ์ ์์ธ/๋ถ์ฐ/๊ฒฝ๋ถ/์ ๋จ๊ณผ ๊ฐ์ด ๋ชจ๋ 2๊ธ์๋ก ์ผ์ ํ ๊ฒฝ์ฐ์๋ char(2)๋ก ์ค์ ํ๋ ๊ฒ์ด ๋ ์ข์
-- ๋ฐ๋ฉด์ ๊ฐ์ ์ด๋ฆ์ ๊ธ์ ์๊ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์ varchar๋ก ์ค์ ํ๋ ๊ฒ์ด ๋ ์ข์
-- ์์์ ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก member ํ ์ด๋ธ ์์ฑ ์ฝ๋๋ฅผ ๋ค์ ์์ฑ
create table member -- ํ์ ํ ์ด๋ธ
( mem id char(8) not null primary key, -- ์ฌ์ฉ์ ์์ด๋(pk)
mem_name varchar(10) not null, -- ์ด๋ฆ
mem_number tinyint not null, -- ์ธ์์
addr char(2) not null, -- ์ง์ญ(๊ฒฝ๊ธฐ, ์์ธ, ๊ฒฝ๋จ ์์ผ๋ก 2๊ธ์๋ง ์ ๋ ฅ)
phone1 char(3), -- ์ฐ๋ฝ์ฒ์ ๊ตญ๋ฒ(02, 031, 055 ๋ฑ)
phone2 char(8), -- ์ฐ๋ฝ์ฒ์ ๋๋จธ์ง ์ ํ๋ฒํธ(ํ์ดํ ์ ์ธ)
height tinyint unsigned, -- ํ๊ท ํค # ๋ถํธ๋ฅผ ๋๋ค
debut_date date); -- ๋ฐ๋ท ์ผ์