union all ==> ์ค๋ณต๋ ๊ฐ๋ ๊ฐ์ด ๋ณด์ฌ์ค๋ค
union ==> ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ณด์ฌ์ค๋ค.
subquery :
์ง๋ฌธ์ ์ผ๋ง๋ ์งง๊ฒ ์ง๋ฌธ์ ์ชผ๊ฐ๋๋์ ์ธ์.
์ฅ์ 1. ์์์ ์ชผ๊ฐ์ ์ง๋ฌธ์ ๋ง๋ค๋ค๋ณด๋ฉด, ๋ฐ์ดํฐ๊ฐ ์์ ํ๊ฒ ํ๋ฌ๋์ค๋ ๊ฒ์ ์ ๊ฒํ ์ ์์.
์ฅ์ 2. ์๋ฌ์จ์ด ๋จ์ด์ง๋ค.
์ฅ์ 3. ์ ๋ ๋ฆ์ด์ง์ง ์๋๋ค.
SubQuery01.SQL
-- SubQuery01.sql --
smith ์ ๊ฐ์ job์ ๊ฐ์ง ์ง์๋ค์ ์ด๋ฆ, job์?
1) smith ์ job์?
SELECT JOB
FROM emp
WHERE (ENAME = 'SMITH');
2) CLERK job์ ๊ฐ์ง ์ง์๋ค์ ์ด๋ฆ, job์ ?
SELECT ENAME, JOB
FROM EMP
WHERE (JOB = 'CLERK');
-- 3) ๊ฒฐํฉ
SELECT ENAME, JOB
FROM EMP
WHERE (JOB =(SELECT JOB
FROM emp
WHERE (ENAME = 'SMITH')));
-------------------------------------
-- smith์ ๊ฐ์ ๊ธ์ฌ ๋ฑ๊ธ์ ๊ฐ์ง ์ง์๋ค์ ์ด๋ฆ,๊ธ์ฌ, ๊ธ์ฌ ๋ฑ๊ธ์?
-- 1) ์ค๋ฏธ์ค ๊ธ์ฌ๋ฑ๊ธ
SELECT s.grade
from emp e, salgrade s
where (e.sal BETWEEN s.losal and s.hisal)
and e.ename = 'smith';
-- 2) ๊ทธ ๊ธ์ฌ๋ฑ๊ธ ์ง์๋ค ์ด๋ฆ, ๊ธ์ฌ, ๊ธ์ฌ๋ฑ๊ธ?
SELECT e.ename , e.sal , s.grade
from emp e, salgrade s
where (s.grade = (SELECT s.grade
from emp e, salgrade s
where (e.sal BETWEEN s.losal and s.hisal)
and e.ename = 'smith'));
smith์ ๊ฐ์ ๋ถ์์ธ ์ง์๋ค์ ์ด๋ฆ, ๋ถ์๋ช
์?
-- 1) ์ค๋ฏธ์ค ๋ถ์
SELECT d.dname
from emp e, dept d
where e.deptno = d.deptno
and e.ename = 'smith';
-- 2)๊ทธ ๋ถ์ ์ง์๋ค ์ด๋ฆ, ๋ถ์๋ช
SELECT e.ename , d.dname
from emp e , dept d
where d.dname = (SELECT d.dname
from emp e, dept d
where e.deptno = d.deptno
and e.ename = 'smith');
-- 2)๊ทธ ๋ถ์ ์ง์๋ค ์ด๋ฆ, ๋ถ์๋ช
(๊ตณ์ด ์๋๋ฌ๋๋ )
SELECT e.ename , d.dname
from emp e , dept d
where e.deptno = d.deptno
and (e.deptno = (SELECT d.deptno
from emp e
where (e.ename = 'smith')));
-- smith์ ๊ฐ์ ๋ถ์์ธ ์ง์๋ค์ ์ด๋ฆ, job์?
SELECT e.ename , e.job
from emp e , dept d
where (d.dname = (SELECT d.dname
from emp e, dept d
where e.deptno = d.deptno
and e.ename = 'smith'));
ํด์ค:
SELECT ename, job
from emp
where (deptno = (select deptno
from emp
where (ename = 'smith') ) );
์ ์ง์์ ํ๊ท ๊ธ์ฌ๋ณด๋ค ๊ธ์ฌ๋ฅผ ๋ง์ด ๋ฐ๋ ์ง์๋ค์ ์ด๋ฆ, ๊ธ์ฌ, ๊ธ์ฌ๋ฑ๊ธ?
-- 1) ์ ์ง์ ํ๊ท ๊ธ์ฌ?
SELECT AVG(e.sal)
from emp e ;
2) ๊ทธ ๊ฒ๋ณด๋ค ๋ง์ด ๋ฐ๋ ์ง์ ์ด๋ฆ, ๊ธ์ฌ, ๊ธ์ฌ ๋ฑ๊ธ?
SELECT e.ename , e.sal , s.grade
from emp e , salgrade s
where (e.sal BETWEEN s.losal and s.hisal)
having (e.sal > (SELECT AVG(e.sal)
from emp e));
------------------------------------------
allen์ ์ง์์๊ด๊ณผ ๊ฐ์ ์๊ด์ ๋ชจ์๋ ์ง์๋ค์
์ด๋ฆ, ์ฌ๋ฒ, ๋ถ์๋ช
, ์ง์์๊ด์ด๋ฆ์?
(๋จ, allen ์ ์ธ)
1)allen์ ์ง์ ์๊ด ์ฌ๋ฒ ? -- ๋ฌด์์ ์ ํํ ๊ฑด์ง ๊ณ ๋ฏผํ๋ฉด์ ๋ณด์์ผ
SELECT mgr
from emp
WHERE ename = 'allen';
2) ๊ทธ ์๊ด(์ฌ๋ฒ)์ ๋ชจ์๋ ์ง์๋ค ์ด๋ฆ, ์ฌ๋ฒ, ๋ถ์๋ช
, ์ง์์๊ด?
SELECT e1.ename , e1.empno , d.dname , e2.ename
from emp e1, emp e2, dept d
where (e1.deptno = d.deptno)
and (e1.mgr = e2.empno )
and (e1.mgr = (SELECT mgr
from emp
WHERE ename = 'allen'));
3) Allen ์ ์ธ
SELECT e1.ename , e1.empno , d.dname , e2.ename
from emp e1, emp e2, dept d
where (e1.deptno = d.deptno)
and (e1.mgr = e2.empno )
and (e1.mgr = (SELECT mgr
from emp
WHERE ename = 'allen'))
and (e1.ename != 'allen');
sales ๋ถ์ ์ง์๋ค์ ๊ธ์ฌ๋ณด๋ค ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์๋ค์
์ด๋ฆ, ๊ธ์ฌ๋?
1) sales ๋ถ์ ์ง์๋ค์ ๊ธ์ฌ?
SELECT e.sal
from dept d , emp e
where(d.deptno = e.deptno)
and (d.dname = 'sales');
2) ๋ง์ด ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์๋ค์ ์ด๋ฆ, ๊ธ์ฌ?
SELECT ename, sal
from emp
where (sal > x);
3) ๊ฒฐํฉ;
SELECT ename, sal
from emp e
where (sal > all (SELECT e.sal
from dept d, emp e
where ( d.deptno = e.deptno)
and (d.dname = 'sales')));
sales ์
๋ฌด๋ฅผ ํ๋ ์ง์๋ค์ ๊ธ์ฌ๋ณด๋ค ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์๋ค์ ์ด๋ฆ, ๊ธ์ฌ๋?
1) sales ์
๋ฌด ์ง์๋ค ๊ธ์ฌ
SELECT e.sal
from emp e
where job = 'salesman';
SELECT ename, sal
from emp e
where (sal > all (SELECT e.sal
from emp e
where job = 'salesman'));
1. ๋ฐ์ดํฐ ์์ ์์ฒด๋ ์ํํ๋ค
2. ์์น ์์ ํ ๋๋, ์ผ๋จ ์ถ๋ ฅํ๊ณ , ์์ ๋ฌธ์ผ๋ก ๋ฐ๊ฟ์ค๋ค (update / set)
DML01.SQL
-- DML01.sql --
-- ---------------- INSERT ------------------------
SELECT * FROM dept2;
INSERT into dept2 (deptno, dname, loc) values(50, 'IT', 'SEOUL');
INSERT into dept2 ( dname, loc, deptno) values('OP', 'BUSAN', 60); -- ์ปฌ๋ผ๋ช
์ ์ ์ํ๋ฉด ์์ ๋ฐ๊ปด๋ ๊ด์ฐฎ์
INSERT into dept2 values (70, 'AD', 'ILSAN');
INSERT into dept2 values (80, 'MKT', 'Jeju'),
(90, 'DEV', 'Jeju');
SELECT * FROM dept2 d ;
desc dept; -- dept์ ์ ํ์๋ ๊ฒ์ ์ ๋ฆฌํด๋ณด์
-- deptno int primary key
-- dname varchar(20)
-- loc varchar (20)
-- -----------------------
create table dept3 (deptno INT auto_increment primary key,
dname varchar(20),
loc varchar(20));
insert into dept3 values(null, 'IT', 'SEOUL');
insert into dept3 values(null, 'OP', 'JEJU');
insert into dept3 values(null, 'AD', 'Busan');
alter table dpet3 auto_increment = 100;
insert into dept3 values(null, 'IT', 'SEOUL');
insert into dept3 values(null, 'OP', 'JEJU');
insert into dept3 values(null, 'AD', 'Busan');
set @@auto_increment_increment = 3; -- 3์ฉ ์ฆ๊ฐ
insert into dept3 values(null, 'IT', 'SEOUL');
insert into dept3 values(null, 'OP', 'JEJU');
insert into dept3 values(null, 'AD', 'Busan');
SELECT * from dept3;
-------------------------
-- Data ๊ฐ ๋ค์ด์๋ ํ
์ด๋ธ ๋ณต์ฌ
create table dept4
select * from dept;
SELECT * from dept4;
------------------------------------------
create table dept5 (deptno int primary key,
dname varchar(20),
loc varchar(20));
select * from dept5;
-- ๋น์ด์๋ table์ ๋ฐ์ดํฐ๋ง ๋ณต์ฌ
insert into dept5
select * from dept;
select * from dept5;
-----------------------
-- data ์์ : update
select * from dept2;
--> 90๋ฒ ๋ถ์์ ์์น๋ฅผ LA๋ก ์์ .
1) ์ผ๋จ ํ๋ฉด์ ์ถ๋ ฅ์ ํ๊ณ ,
select loc
from dept2
WHERE (deptno = 90);
2) ์์ ๋ฌธ์ผ๋ก ๋ณ๊ฒฝ
update dept2
set loc = 'LA'
WHERE (deptno = 90);
SELECT * FROM DEPT2;
-- > 70, 90๋ฒ ๋ถ์์ ์์น๋ฅผ Jeju๋ก ์์ ํด์ฃผ์ธ์.
SELECT loc
from dept2
where (deptno = 70 or deptno = 90);
UPDATE dept2
set loc = 'Jeju'
where (deptno in(70, 90));
-- > 80๋ฒ ๋ถ์ ์ด๋ฆ์ Admin, ์์น๋ Busan์ผ๋ก ์์ ํด์ฃผ์ธ์.
SELECT d.dname , loc
from dept2 d
where d.deptno = 80;
UPDATE dept2 d
set d.dname = 'Admin', d.loc = 'Busan'
where d.deptno = 80;
SELECT * from dept2 d ;
-- ๋ฐ์ดํฐ ์ญ์ : DELETE
80๋ฒ ๋ถ์๋ฅผ ์ญ์
select *
from dept2
where (deptno = 80);
DELETE from dept2
where (deptno = 80);
SELECT * from dept2;
70๋ฒ ๋ถ์, Jeju ์์น์ธ ๋ถ์๋ฅผ ์ญ์ :
SELECT *
from dept2
where deptno = 70
and loc = 'Jeju';
select *
from dept2
where(deptno, loc) in ((70, 'jeju'));
DELETE from dept2
where deptno = 70
and loc = 'Jeju';
delete
from dept2
where(deptno, loc) in ((70, 'jeju'));
SELECT * from dept2;
-- emp์์
-- clerk ์
๋ฌด๋ฅผ ํ๋ฉด์ research ๋ถ์์ธ ์ง์๊ณผ
-- manager ์
๋ฌด๋ฅผ ํ๋ฉด์ accounting ๋ถ์์ธ ์ง์๋ค์ ์ฌ๋ฒ, ์ด๋ฆ, job, ๋ถ์ ์ถ๋ ฅ.
SELECT e.empno , e.ename , e.job , d.dname
from emp e , dept d
where(e.job, d.dname) in (('clerk', 'research'))
or (e.job, d.dname) in (('manager', 'accounting'));
select e.ename, e.empno, e.job, d.dname
from emp e, dept d
where (e.deptno = d.deptno)
and (e.job,d.dname) in (('clerk','Research') , ('manager','Accounting'));
์ซ์ ๋ฐ์ดํฐ ํ์:
๋ ์ง์ ์๊ฐ ๋ฐ์ดํฐ ํ์:
๊ธฐํ๋ฐ์ดํฐ: ์ํ, ๋๋ณธ ๋ฑ ๋ฐ์ดํฐ๊ฐ ์ปฌ๋ผ ํ๋์ ์ ์ฅ ๊ฐ๋ฅํ๋ค.
๋ณ์๋ ๋ด์ผ ํจ์์ฒ๋ฆฌ ํ ๋ ๋ชฐ์์ ํ ๊ฒ.
p313
8.1 ํ ์ด๋ธ
ํ ์ด๋ธ์ ์์ฑ ๋ฐ ์ฌ์ฉ์ ์ง๊ธ๊น์ง ๊ณ์ ํด์๋ค. ์ฟผ๋ฆฌ๋ก ์ง์ ๋ง๋ค์ด๋ณด๋ ๊ฒ์ด ์ค์.
p313 ์ํ ์๋ฅผ ๊ฐ์ง๊ณ ์ด์ผ๊ธฐ ํด๋ณด์.
๋ง์ฝ ์ผํ๋ชฐ์ ๋ง๋ ๋ค.
๊ทธ๋ฌ๋ฉด
1. ํ์ ํ ์ด๋ธ
2. ๊ตฌ๋งค ํ ์ด๋ธ
์ด๊ฑด ์ฝ๊ฒ ๋ง๋๋ ๊ฒ์ด๊ณ ,
์ ์์ ์ผ๋ก ๋ง๋ค๋ ค๋ฉด ๋ชจ๋ธ๋ง์ด๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํจ.
ํ ์ด๋ธ ๋ง๋ค๋,
์ด๋ฆ๋ช ๋ฌด์์ผ๋ก ํ ์ง, ์ปฌ๋ผ๋ช ๋ฌด์์ผ๋ก ํ ์ง, ๋ฐ์ดํฐ ํ์ ๋ฌด์์ผ๋ก ํ ์ง, Null๊ฐ ์ฒ๋ฆฌ ํ ์ง๋ง์ง
์ธ์ด๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ํ์ํ๊ฑด DB ์ค๊ณ์(์ ์์)
๊ทธ ๋ค์์ ๋ค์ด๊ฐ ๊ฒ์ ์ ์ฝ์กฐ๊ฑด.
์ ์ฝ์กฐ๊ฑด:
DBํํ๋ค๋ ๊ฒ์: DBMS (DB Management system)
- ์ฃผ Data (ํ ๋จ์ Record)
- DB Object(Table ๊ด๋ฆฌ)
- ํต์ (TCP/IP) --> ๋๊ตฌ๋ ๋์์
- ๋ณด์(์ธ์ฆ/์ธ๊ฐ)
- ๊ด๋ฆฌ(๋ฐฑ์ /๋ณต์, ์ด์คํ)
Table ์์ฑํ ๋, ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ง์ผ์ผ ํ๋ค.: <-- ๋ฐ์ดํฐ์ ์ด์ํ ๊ฐ์ด ๋ค์ด์ค์ง ์๋๋ก ๋ฐฉ์ดํด์ฃผ์ด์ผ
1. DataType - ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๋ฌด๊ฒฐ์ฑ์ ์ง์ผ์ผ (๋์ด์ a๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋จ, ์์์ ์ผ๋ก ์ดํดํ ์ ์๋ ๋ฐ์ดํฐ)
2. ์ ์ฝ์กฐ๊ฑด(Constraint) <-- ๋์ด์ ์์, 1000์ด ๋ฑ์ด ์์ผ๋ฉด ์๋จ
3. ์ฐธ์กฐ <-- ๊ฐ์ ํ์ง ์์ ๋๊ตฐ๊ฐ๊ฐ ๋ฌผ๊ฑด์ ์ฐ ํ์ ? ์๋จ.
์ ์ฝ์กฐ๊ฑด(Constraint) : 5 + @๊ฐ
- PK (Primary Key) : ๊ธฐ๋ณธํค ์ ์ฝ์กฐ๊ฑด ==> Unique + Null( X ) --> ํ ์ด๋ธ ๋น ํ๋
- UK(Unique) :์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด ==> Unique + Null( O ) --> ํ ์ด๋ธ ๋น n
- FK: ์ธ๋ํค ==> ์๊ธฐ/๋ค๋ฅธ table unique ํ ์ปฌ๋ผ ์ฐธ์กฐ
- CK(Check) : ==> ๋ฒ์(age between 1 and 120) , ์ด๊ฑฐ ( gender in ('M', 'F')
- NN : Not Null ==> Null ํ์ฉ ์ฌ๋ถ
- DF(Default) : ๊ธฐ๋ณธ๊ฐ์ ์ ์ ==> ๊ฐ์ด ๋ค์ด์ค์ง ์์์ ๋ ๊ธฐ๋ณธ๊ฐ์ ์ ๋ ฅ
์ ์ฝ์กฐ๊ฑด๋ ์ด๋ฆ์ ์ค ์ ์๋ค. (์๋ Mob1 ์ฒ๋ผ)
๊ฐ์ฌ๋ ๊ฐ ์ฌ๋ก ์ ์กํ๊ธฐ !
๊ณผ์ 1.
์ ์ถ ์ ๋ค์ด๋ฐ: [๊ณผ์ ]_2021.11.29_ํ๊ธธ๋_(selectํด์ฆ)
-- Q. Martin์ job ์์ ์ง์๋ค์ ํ๊ท ๊ธ์ฌ๋ณด๋ค ๊ธ์ฌ๋ฅผ ๋ฎ๊ฒ ๋ฐ๋ ์ง์๋ค์ ์ด๋ฆ,job, ๋ถ์๋ช
, ๊ธ์ฌ, ๊ธ์ฌ๋ฑ๊ธ, ์๊ด์ด๋ฆ, ์๊ด๋ถ์๋ช
์?
โ
-- 1) martin์ ๋ฌด์จJOB? --> salesman
โ
SELECT e1.job
from emp e1
where (e1.ename ='Martin');
โ
โ
โ
-- 2)ํด๋น job์ ํ๊ท ๊ธ์ฌ๋? --> 1400
โ
SELECT AVG(e1.sal)
from emp e1
where e1.job = (SELECT e1.job
from emp e1
where (e1.ename ='Martin'));
โ
โ
-- 3) ๊ทธ ๊ธ์ฌ๋ณด๋ค ๋ฎ์ ๊ธ์ฌ๋ฅผ ๋ฐ๊ณ ์๋ ์ง์๋ค์ ์ด๋ฆ,job, ๋ถ์๋ช
, ๊ธ์ฌ, ๊ธ์ฌ๋ฑ๊ธ, ์๊ด์ด๋ฆ, ์๊ด๋ถ์๋ช
์? (e1. ๋ถํ , e2. ๋งค๋์ )
โ
SELECT e1.ename , d1.dname , e1.sal, s1.grade , e2.ename , d2.dname
from emp e1, dept d1, salgrade s1, emp e2, dept d2
where (e1.mgr = e2.empno)
and (e1.sal BETWEEN s1.losal and s1.hisal )
and ( e1.deptno = d1.deptno )
and ( e2.deptno = d2.deptno )
and (e1.sal < (SELECT AVG(e1.sal)
from emp e1
where e1.job = (SELECT e1.job
from emp e1
where (e1.ename ='Martin'))));
๊ณผ์ 2
์ ์ถ ์ ๋ค์ด๋ฐ: [๊ณผ์ ]_2021.11.29_ํ๊ธธ๋_(Table ์ค๊ณ)
ํ ์ด๋ธ ์ค๊ณ. ์น ๊ฒ์ํ๊น์ง ์ฐ๊ฒฐ
ํ ์ด๋ธ ์ค๊ณ๋๋ฅผ ์์ ๋ก ๋ง๋ค๊ธฐ (์ ์์ ๋๋์ฒ๋ผ)
ํ์ Table
๊ฒ์ํ Table
๋ญ ๊ต์ฅํ ๋ง์ด ํ๋๋ฐ ๋ณต์ต์ ์ข ํด์ผ๊ฒ ๋ค
(๏ฝก•ฬ๏ธฟ•ฬ๏ฝก)
์คํ์์ ์ ์ด ๋์ ๐ผ๐ป
'PlayData > MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Day 18 | MySQL] DAO, VO๋ฑ (์ดํด ing) (2) | 2021.12.02 |
---|---|
[Day 16 | MySQL] Table, Variable, ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, (0) | 2021.12.01 |
[Day14 | MySQL] Join(ANSI Join, inner join, outer join, cross join etc.) (0) | 2021.11.26 |
[Day13 | MySQL] SQL ๊ธฐ๋ณธ RDB, where, groupby, having (0) | 2021.11.25 |
[Day12 | MySQL] MySQL, Workbench, ํ๊ฒฝ๋ณ์ ์ค์ , select, order by, distinct, ๋ณ๋ช (0) | 2021.11.24 |