LEE_BOMB 2021. 9. 12. 11:49
SQL Basic (data type)

์Šคํ‚ค๋งˆ : ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๊ตฌ์กฐ

ํ•œ๊ธ€ ํ•˜๋‚˜ : 3๋ฐ”์ดํŠธ

โ€‹

Oracle ์ฃผ์š” ์ž๋ฃŒํ˜•(=data type)

1. number(n) : nํฌ๊ธฐ ๋งŒํผ ์ˆซ์ž(์‹ค์ˆ˜, ์†Œ์ˆ˜์  ์žˆ๋Š”)๋ฅผ ์ €์žฅ

2. int : 4๋ฐ”์ดํŠธ ํฌ๊ธฐ๋กœ ์ •์ˆ˜ ์ €์žฅ

3. varcahr2(n) : nํฌ๊ธฐ ๋งŒํผ ๊ฐ€๋ณ€๊ธธ์ด ๋ฌธ์ž ์ €์žฅ

4. char(n) : nํฌ๊ธฐ ๋งŒํผ ๊ณ ์ •๊ธธ์ด ๋ฌธ์ž ์ €์žฅ

5. date : ๋‚ ์งœ/์‹œ๊ฐ„ ์ €์žฅ

 

์ œ์•ฝ์กฐ๊ฑด

1. primary key : ๊ธฐ๋ณธํ‚ค (์ค‘๋ณต๋ถˆ๊ฐ€+null๋ถˆ๊ฐ€)

2. not null : null๊ฐ’ ํ—ˆ์šฉ ์•ˆ ํ•จ = ์ƒ๋žต ๋ถˆ๊ฐ€

3, unique : ์œ ์ผ๊ฐ’ (์ค‘๋ณต๋ถˆ๊ฐ€)โ€‹

โ€‹

โ€‹

1. table ์ƒ์„ฑ

create table st(
sid int primary key, -- ํ•™๋ฒˆ (์ค‘๋ณต/null ๋ถˆ๊ฐ€)
name varchar(20) not null, -- ์ด๋ฆ„ (null ๋ถˆ๊ฐ€) null : ๊ฐ’์ด ์—†์Œ
phone varchar(30) unique, --์ „ํ™”๋ฒˆํ˜ธ (ํ•˜์ดํ”ˆ ๋˜ํ•œ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ varchar, ์ œ์•ฝ์กฐ๊ฑด unique๋Š” ์ค‘๋ณต๋ถˆ๊ฐ€)
email char(50), -- ์ด๋ฉ”์ผ (์ œ์•ฝ์กฐ๊ฑด์ด ์—†์Œ = null ํ—ˆ์šฉ)
enter_date date not null -- ์ž…ํ•™๋…„๋„ (๋‚ ์งœ/์‹œ๊ฐ„, null ๋ถˆ๊ฐ€)
);

์Šคํ‚ค๋งˆ

โ€‹โ€‹

2. ๋ ˆ์ฝ”๋“œ(ํ–‰, row) ์‚ฝ์ž…

insert into st values(2021001, 'ํ™๊ธธ๋™', '010-111-1111', 'hong@naver.com', sysdate); --sysdate : ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ์ธ์‹ํ•˜๊ณ  ์žˆ๋Š” ๋‚ ์งœ
insert into st values(2021002, '์ด์ˆœ์‹ ', '010-222-2222', 'lee@naver.com', sysdate);
insert into st values(2021003, '๊ฐ•๊ฐ์ฐฌ', '010-333-3333', 'kang@naver.com', sysdate);

โ€‹

3. ๋ ˆ์ฝ”๋“œ ์กฐํšŒ(๊ฒ€์ƒ‰)

select*from st; -- * : stํ…Œ์ด๋ธ”์ด ๊ฐ€์ง„ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์กฐํšŒ

โ€‹

* ์ œ์•ฝ์กฐ๊ฑด ์œ„๋ฐฐ ์‚ฌ๋ก€

insert into st values(2021003, '์œ ๊ด€์ˆœ', '010-444-4444', 'yoo@naver.com', sysdate); -- ์œ ์ผ๊ฐ’
insert into st values(2021004, '', '010-555-5555', 'yoo@naver.com', sysdate); -- null๊ฐ’

โ€‹โ€‹

โ€‹4. ์ž‘์—…ํ•œ ๋‚ด์šฉ DB๋ฐ˜์˜

commit;

 

 

 

 

 

 

SQL Select (Data type)

1. ์ „์ฒด ๊ฒ€์ƒ‰ (ํŠน์ • ์นผ๋Ÿผ ๊ฒ€์ƒ‰)

SELECT * FROM emp; -- ์‚ฌ์› ํ…Œ์ด๋ธ” ์ „์ฒด ์กฐํšŒ (14๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ)

โ€‹

1) ํŠน์ • ์นผ๋Ÿผ ์กฐํšŒ

SELECT empno, ename, sal, job FROM emp; -- 4๊ฐœ ์นผ๋Ÿผ ์กฐํšŒ
SELECT ename, sal, sal+300 FROM emp; -- ์‚ฐ์ˆ ํ‘œํ˜„(+, _, *, /)
SELECT ename, sal, sal*1.1 FROM emp;-- ex) ๊ธ‰์—ฌ 10% ์ธ์ƒ

โ€‹โ€‹

2) null ์ฒ˜๋ฆฌ (= ๊ฒฐ์ง‘์ฒด. ๊ฐ’์ด ์—†๋Š” ์ƒํƒœ)

SELECT empno, ename, sal, comm, sal+comm/100 FROM emp -- null ์ฒ˜๋ฆฌ X
SELECT empno, ename, sal, comm, sal+ NVL(comm,0)/100 FROM emp; -- null ์ฒ˜๋ฆฌ O

โ€‹

โ€‹3) NVL (ํ•จ์ˆ˜. ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์นผ๋Ÿผ๋ช…, ํ•ด๋‹น ์นผ๋Ÿผ์ด null ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๋ฌด์—‡์œผ๋กœ ๋Œ€์ฒดํ•  ๊ฒƒ์ธ์ง€)

SELECT empno, ename, sal, comm, sal*12+ NVL(comm,0)/100 FROM emp; -- sal*12์ˆ˜์‹์œผ๋กœ ์—ฐ๋ด‰ ๊ณ„์‚ฐ

โ€‹

4) AS ๋ณ„์นญ ํ‘œํ˜„ (=์—ด์ด๋ฆ„)

SELECT empno, ename, sal, comm, sal*12+ NVL(comm,0) AS "์—ฐ๋ด‰" FROM emp;

โ€‹

5) ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž || (shift ํ‚ค+enter์œ„ ์›ํ™” ํ‚ค)

SELECT ename, job FROM emp;
SELECT ename || ' ' || job FROM emp;
SELECT ename || ' ' || job AS "์‚ฌ์›์ง์ฑ…" FROM emp;

โ€‹

6) DISTINCT ๋ช…๋ น๋ฌธ (์ค‘๋ณต ๊ฐ’ ์ œ๊ฑฐ)

SELECT ename, job From emp;
SELECT DISTINCT job From emp; -- ์œ ์ผํ•œ ๊ฐ’๋งŒ ํ•„ํ„ฐ๋งํ•ด์„œ ๋ณด๊ณ ์ž ํ•  ๋•Œ
SELECT DISTINCT deptno, job FROM emp; -- DISTINCT ๋’ค์—๋Š” ๋ฒ”์ฃผํ˜• ์นผ๋Ÿผ๋งŒ ์˜ฌ ์ˆ˜ ์žˆ์Œ

 

โ€‹

 

 

 

 

 

์—ฐ์Šต๋ฌธ์ œ

1. ๋‹ค์Œ ๋ฌธ์žฅ์—์„œ ์—๋Ÿฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •(๋…„๋ด‰์€ ๋ณ„์นญ)

SELECT empno,ename,sal X 12 ๋…„๋ด‰ FROM emp;
SELECT empno,ename,sal * 12 ๋…„๋ด‰ FROM emp;

โ€‹

2. EMP ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ ํ™•์ธํ•˜๊ธฐ : ํ˜•์‹) DESC ํ…Œ์ด๋ธ”

DESC emp;

โ€‹

3. EMP ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋‚ด์šฉ ์กฐํšŒํ•˜๊ธฐ

SELECT * FROM EMP;

โ€‹

4. EMP ํ…Œ์ด๋ธ”์—์„œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” empno๋ฅผ ์ถœ๋ ฅ

SELECT DISTINCT deptno From emp;

โ€‹

5. EMP ํ…Œ์ด๋ธ”์˜ ename๊ณผ job๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์ถœ๋ ฅ

SELECT ename ||' '|| job FROM emp;

โ€‹

6. DEPT ํ…Œ์ด๋ธ”์˜ dname๊ณผ aread๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์ถœ๋ ฅ

SELECT dname ||' '|| loc AS "๋ถ€์„œ๋ช…๊ณผ ์œ„์น˜" FROM dept;

โ€‹

7. EMP ํ…Œ์ด๋ธ”์˜ job๊ณผ sal๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์ถœ๋ ฅ

SELECT job ||' '|| sal AS "์ง์ฑ…๊ณผ ๊ธ‰์—ฌ" FROM emp;

 

โ€‹-- ๋ฌธ8) gift ํ…Œ์ด๋ธ”์„ ๋Œ€์ƒ์œผ๋กœ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ <์ถœ๋ ฅ ํ˜•์‹>๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ

/* <์ถœ๋ ฅ ํ˜•์‹>

์„ ๋ฌผ๋ฒˆํ˜ธ ์„ ๋ฌผ์ด๋ฆ„

1 ์ฐธ์น˜์„ธํŠธ

2 ์ƒดํ‘ธ์„ธํŠธ */

SELECT DISTINCT gno AS ์„ ๋ฌผ๋ฒˆํ˜ธ, gname AS ์„ ๋ฌผ์ด๋ฆ„ FROM gift;

 

 

 

 

 

 

 

2. ์กฐ๊ฑด ๊ฒ€์ƒ‰ (ํŠน์ • ํ–‰ ๊ฒ€์ƒ‰)

 

๋น„๊ต ์—ฐ์‚ฐ์ž

= ๊ฐ™๋‹ค

> ๋ณด๋‹ค ํฌ๋‹ค

>= ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค

< ๋ณด๋‹ค ์ž‘๋‹ค

<= ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค

<>, !=, ^= ๊ฐ™์ง€ ์•Š๋‹ค

NOT Column_name = ๊ฐ™์ง€ ์•Š๋‹ค

NOT Column_name > ๋ณด๋‹ค ํฌ์ง€ ์•Š๋‹ค

โ€‹

โ€‹

โ€‹

โ€‹

1) ์ˆซ์ž ์นผ๋Ÿผ : ๋Œ€์†Œ ๋น„๊ต

SELECT empno, ename, job, sal
FROM emp
WHERE sal >= 3000; -- ๊ธ‰์—ฌ 3000 ์ด์ƒ์ธ ์‚ฌ๋žŒ

โ€‹โ€‹

2) ๋ฌธ์ž ์นผ๋Ÿผ : ๋™๋“ฑ ๋น„๊ต

SELECT empno, ename, job, sal, deptno
FROM emp
WHERE job = 'MANAGER'; -- ๋งค๋‹ˆ์ € ์ง์ฑ…์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ.

* ์ฃผ์˜! ๋ฌธ์ž ์ƒ์ˆ˜(=๋ฆฌํ„ฐ๋„) : ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„

โ€‹

SELECT empno, ename, job, sal, deptno
FROM emp
WHERE job != 'MANAGER'; -- ๋งค๋‹ˆ์ € ์ง์ฑ…์ด ์•„๋‹Œ ์‚ฌ๋žŒ

โ€‹

โ€‹

3) ๋‚ ์งœ ์นผ๋Ÿผ (๋ฌธ์ž ์ปฌ๋Ÿผ์ด์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ˆซ์žํ˜•์œผ๋กœ ์ฒ˜๋ฆฌ)

SELECT empno,ename,job,sal,hiredate,deptno
FROM emp
WHERE hiredate >= to_date('1982/01/01', 'yyyy/mm/dd'); -- 1982.01.01์ดํ›„ ์ž…์‚ฌํ•œ ์‚ฌ์›
-- to_date () : ๋ฆฌํ„ฐ๋„ -> ๋‚ ์งœํ˜• ๋ณ€ํ™˜
SELECT empno,ename,job,sal,hiredate,deptno
FROM emp
WHERE hiredate >= '1982/01/01'; -- ์œ„์™€ ๊ฒฐ๊ณผ๊ฐ’์€ ๊ฐ™์Œ

 

4) SQL ์—ฐ์‚ฐ์ž ์ด์šฉ

SELECT ename, job, sal, deptno
FROM emp
WHERE sal BETWEEN 1300 AND 1500;
SELECT empno,ename,job,sal,hiredate
FROM emp
WHERE empno IN (7902,7788,7566); -- ์—†๋Š” ํ•ญ๋ชฉ์€ ์ž๋™์œผ๋กœ ์ƒ๋žต
SELECT empno,ename,job,sal,deptno
FROM emp
WHERE deptno IN (10, 30);

โ€‹โ€‹

5) ๊ด€๊ณ„์—ฐ์‚ฐ์ž & ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž

* ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ : ๊ด„ํ˜ธ > ์‚ฐ์ˆ  > ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž > ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž (NOT > AND > OR)

SELECT empno,ename,job,sal,hiredate,deptno
FROM emp
where hiredate >= to_date('1982/01/01', 'yyyy/mm/dd') and -- ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž and : TRUE์ธ ์ขŒ์šฐ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚ค๋Š”
hiredate <= to_date('1982/12/31', 'yyyy/mm/dd');
SELECT empno,ename,job,sal,hiredate,deptno
FROM emp
WHERE hiredate BETWEEN to_date('1982/01/01', 'yyyy/mm/dd')
AND to_date('1982/12/31', 'yyyy/mm/dd'); -- ์œ„์™€ ๊ฒฐ๊ณผ๊ฐ’์€ ๋™์ผ

 

6) LIKE '%' ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ๋Œ€์‹  or '_' ์˜ค์ง ํ•œ ๊ฐœ์˜ ๋ฌธ์ž๋งŒ ๋Œ€์‹ 

SELECT empno,ename,job,sal,hiredate,deptno
FROM emp
WHERE hiredate LIKE '87%'; -- ์ž…์‚ฌ๋…„๋„๊ฐ€ 87๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ์›
SELECT empno,ename,job
FROM emp
WHERE ename LIKE 'S%'; -- ์ด๋ฆ„์ด S๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ์›
SELECT empno,ename,job
FROM emp
WHERE ename LIKE '%M%'; -- ์ด๋ฆ„์— M๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์›
SELECT empno,ename,job
FROM emp
WHERE ename LIKE '%S'; -- ์ด๋ฆ„์ด S๋กœ ๋๋‚˜๋Š” ์‚ฌ์›
SELECT* FROM emp WHERE ename LIKE '%L_K%'; -- ๊ฒฐ๊ณผ๊ฐ’ : BLAKE

โ€‹

7) IS NULL

SELECT empno,ename,job,sal,comm,deptno
FROM emp
WHERE comm IS NULL; -- ์ˆ˜๋‹น์„ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์‚ฌ์›
SELECT empno,ename,job,sal,comm,deptno
FROM emp
WHERE comm IS NOT NULL; -- ์ˆ˜๋‹น์„ ๋ฐ›๋Š” ์‚ฌ์› (0๊ฐ’๋„ ํฌํ•จ)

โ€‹โ€‹

8) ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž : AND, OR, NOT

SELECT empno,ename,job,sal,hiredate,deptno
FROM emp
WHERE sal >= 1100 AND job = 'MANAGER'; -- AND (๋…ผ๋ฆฌ๊ณฑ) : ๋‘๊ฐœ๋ฅผ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚ค๋Š”
SELECT empno,ename,job,sal,hiredate,deptno
FROM emp
WHERE sal >= 1100 OR job = 'MANAGER'; -- OR (๋…ผ๋ฆฌํ•ฉ) : ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ๋งŒ์กฑ์‹œ์ผœ๋„ ๋˜๋Š”
SELECT empno,ename,job,sal,deptno
FROM emp
WHERE job NOT IN ('MANAGER','CLERK'); -- NOT(๋ถ€์ •) : ๋งค๋‹ˆ์ €์™€ ์‚ฌ์› ์ง์ฑ…์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”
FROM emp
WHERE job NOT IN ('MANAGER','CLERK'); -- NOT(๋ถ€์ •) : ๋งค๋‹ˆ์ €์™€ ์‚ฌ์› ์ง์ฑ…์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”

โ€‹

9) ๊ด„ํ˜ธ ์ด์šฉ : ์šฐ์„ ์ˆœ์œ„ ๋ณ€๊ฒฝ

SELECT empno,ename,job,sal
FROM emp
WHERE job = 'SALESMAN' OR job = 'PRESIDENT' AND sal > 1500;
SELECT empno,ename,job,sal
FROM emp
WHERE (job = 'SALESMAN' OR job = 'PRESIDENT') AND sal > 1500; -- AND๋ณด๋‹ค OR๋ฅผ ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘ 

 

 

 

 

 

 

 

์—ฐ์Šต๋ฌธ์ œ

๋ฌธ1) sal์ด 3000์ด์ƒ์ธ ์‚ฌ์›์˜ empno, ename, job, sal ์ถœ๋ ฅ

SELECT empno, ename, job
FROM emp
WHERE sal>=3000;

โ€‹

๋ฌธ2) empno๊ฐ€ 7788์ธ ์‚ฌ์›์˜ ename๊ณผ deptno ์ถœ๋ ฅ

SELECT empno, ename
FROM emp
WHERE empno IN 7788;

โ€‹

๋ฌธ3) sal์ด 1500์ด์ƒ์ด๊ณ  deptno๊ฐ€ 10,30์ธ ์‚ฌ์›์˜ ename๊ณผ sal๋ฅผ ์ถœ๋ ฅ

SELECT ename, sal
FROM emp
WHERE sal>=1500 AND deptno IN (10, 30);

โ€‹

๋ฌธ4) hiredate๊ฐ€ 1982๋…„ ์ž…์‚ฌํ•œ ์‚ฌ์›์˜ ๋ชจ๋“  ์ •๋ณด ์ถœ๋ ฅ(ํžŒํŠธ : between ~ and ~)

SELECT *
FROM emp
WHERE hiredate BETWEEN '1982/01/01' AND '1982/12/31';
SELECT *
FROM emp
WHERE hiredate LIKE '82%';

 

๋ฌธ5) comm์— NULL์ด ์•„๋‹Œ ์‚ฌ์›์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ถœ๋ ฅ(ํžŒํŠธ : is not null)

SELECT *
FROM emp
WHERE comm IS NOT NULL;

 

๋ฌธ6) comm์ด sal๋ณด๋‹ค 10%๊ฐ€ ๋งŽ์€ ๋ชจ๋“  ์‚ฌ์›์— ๋Œ€ํ•˜์—ฌ ename,sal,comm ์ถœ๋ ฅ

SELECT ename, sal, comm
FROM emp
WHERE comm >= (sal*1.1);

 

๋ฌธ7) job์ด CLERK์ด๊ฑฐ๋‚˜ ANALYST์ด๊ณ  sal์ด 1000,3000,5000์ด ์•„๋‹Œ ๋ชจ๋“  ์‚ฌ์› ์ถœ๋ ฅ(ํžŒํŠธ : in, not in)

SELECT *
FROM emp
WHERE (job='CLERK' OR job= 'ANALYST') AND sal NOT IN (1000,3000,5000);

 

๋ฌธ8) ename์— L์ด ๋‘ ์ž๊ฐ€ ์žˆ๊ณ  deptno๊ฐ€ 30์ด๊ฑฐ๋‚˜ ๋˜๋Š” mgr์ด 7782์ธ ๋ชจ๋“  ์‚ฌ์› ์ถœ๋ ฅ(ํžŒํŠธ : like)

SELECT *
FROM emp
WHERE ename LIKE '%L%L%' AND (deptno=30 OR mgr=7782);