๐กํผ๋๋ฐฑ Tip
1. SQL Developer ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์์์ NULL ํ๊ธฐ
Putty ํฐ๋ฏธ๋์ ์ด์ฉํ์ฌ ์ค๋ผํด SQL ์ฟผ๋ฆฌ ํด๋ณด๊ธฐ
- putty๋ฅผ ์ด์ฉํ์ฌ VM ์ ์
- Oracle DBMS ์ ์
$ sqlplus scott/
SCOTT> SELECT DISTINCT COMM FROM EMP;
2. ๋๋๋ก SQL์์ R-Value๊ฐ ํ์ ์ด ๋ณํ๋๋ก ํด์ผ ํ๋ค.
3. ์ซ์/๋ ์ง, ๋ฌธ์ ์์์ ํ์ ์บ์คํ
๐ ORDER BY
์ซ์
: ~ ์์ ์/ํฐ ์ ๋น๊ต
EX) 123 < 456
๋ฌธ์
: ์ํ๋ฒณ ์์(ASCII)
EX) โSCOTT' < โT'
โ ๋ฌธ์๋ ์ฒซ ๊ธ์๋ฅผ ๋์์ผ๋ก ๋น๊ต๋๋ค.
๋ ์ง
: ์ซ์์ ๋์ผ
EX) โ2003/11/16' > โ19990916'
โ DBMS ๋ด๋ถ์์๋ ์ซ์๋ก ์ ์ฅ๋๊ณ , ์ถ๋ ฅ ์์๋ ๋ฌธ์์ด๋ก ํ๊ธฐ
โ ๋ฐ๋ผ์ ์ซ์ ๋น๊ต์ ๋์ผํ๋ค.
NULL
: Oracle DBMS ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ๊ฐ์ฃผ , MS SQL-Server: ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๊ฐ์ฃผ
[์ ๋ ฌ ๋ฐฉํฅ(๋ฐฉ๋ฒ)]
ASC
: ์ค๋ฆ์ฐจ์(ASCENDING ORDER) , DEFAULT
DESC
: ๋ด๋ฆผ์ฐจ์(DESCENDING ORDER)SELECT ENAME, HIREDATE, SAL, COMM FROM EMP ORDER BY ENAME ;

// SQL ๊ฐ๋
์ฑ์ ์ํด ASC ๋ช
์ํ๋ ๊ฒ์ด ์ข๋ค.
โก SELECT ENAME, HIREDATE, SAL, COMM FROM EMP ORDER BY ENAME asc;

// ๋ ์ง ๊ธฐ์ค ์ ๋ ฌ
โข SELECT ENAME, HIREDATE, SAL, COMM FROM EMP ORDER BY HIREDATE desc;

โ ๋ ์ง ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ๋์๋ค.
// column name ๊ธฐ์ค ์ ๋ ฌ
โฃ SELECT ENAME, HIREDATE, SAL, COMM FROM EMP ORDER BY ENAME;

// column position ๊ธฐ์ค ์ ๋ ฌ
โค SELECT ENAME, HIREDATE, SAL, COMM FROM EMP ORDER BY 2;

โ ๋๋ฒ์งธ ์ปฌ๋ผ HIREDATE๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์๋ค.
// ORDER BY ์ Column Alias์ฌ ์ ์๋ค.
โฅ SELECT ENAME, SAL*12 as ์ฐ๋ด FROM EMP ORDER BY ์ฐ๋ด;

โ SAL*12์ Alias์ธ ์ฐ๋ด ์ปฌ๋ผ์ ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์๋ค.
// expression, NULL ์์น
โฆ
1) SELECT ENAME, HIREDATE, SAL, COMM FROM EMP ORDER BY COMM * 12;

โ ORDER BY ๋ค์์ ๊ณ์ฐ ์์ด ์ฌ ์ ์๋ค.
โ COMM * 12์ ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์๋ค.
2) SELECT ENAME, HIREDATE, SAL, COMM FROM EMP ORDER BY COMM * 12 NULLS FIRST;

//
โง SELECT DEPTNO,JOB,ENAME FROM EMP ORDER BY DEPTNO;

// ORDER BY์ ๋ณต์ ๊ฐ์ ์ปฌ๋ผ
// ์ฒซ๋ฒ์งธ ์ปฌ๋ผ ๊ธฐ์ค ์ ๋ ฌ ํ, ๋๋ฒ์งธ ์ปฌ๋ผ ๊ธฐ์ค ์ ๋ ฌ (์กฐํฉ์ ์์์)
โจ SELECT DEPTNO,JOB,ENAME FROM EMP ORDER BY DEPTNO,JOB;

// DEPTNO๋ ์ค๋ฆ์ฐจ์, JOB์ ๋ด๋ฆผ์ฐจ์
โฉ SELECT DEPTNO,JOB,ENAME FROM EMP ORDER BY DEPTNO,JOB desc;
// ์ฐจ์ด์ ์?

๐ DISTINCT
SELECT JOB FROM EMP;

// ์ง๊ตฐ ์ข
๋ฅ, Oracle
โก SELECT UNIQUE JOB FROM EMP;

// DISTINCT - ANSI
โข SELECT DISTINCT JOB FROM EMP;

โ DISTINCT
์ UNIQUE
๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
โ DISTINCT
ํค์๋๊ฐ ANSI ํ์ค์ด๋ฏ๋ก ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
โฃ SELECT DISTINCT DEPTNO, JOB FROM EMP;
// ์ค๋ณต ๋ฐ์ดํฐ(?)
- ์ปฌ๋ผ(๋ค)์ ์กฐํฉ์ ์ค๋ณต ํํฐ๋ง

โค SELECT JOB FROM EMP ORDER BY JOB;
- distinct ์ฐ์ฐ ๋ด๋ถ ์๊ณ ๋ฆฌ์ฆ: Oracle 9i: Sort , 10g: Hash

โฅ SELECT DISTINCT JOB, DISTINCT DEPTNO FROM EMP;
// ๋ฒ์?
โฆ SELECT JOB, DISTINCT DEPTNO FROM EMP;
// ์์น?
DISTINCT
๋ ๋งจ ์์ ์์นํด์ผ ํ๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก ์กฐํฉ์ ๋ํ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ฒ ์ด๋ฏ๋ก, JOB์ ๋จผ์ select ํ๊ณ ์ดํ ์ค๋ณต์ ๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ๋ค.
โง SELECT COMM FROM EMP WHERE COMM IS NOT NULL;
// 4 Rows

โNULL์ด ์๋, ๊ฐ์ ๊ฐ์ง ์ปฌ๋ผ๋ค์ด ์ถ๋ ฅ๋์๋ค.
โจ SELECT DISTINCT COMM FROM EMP;
// 5 Rows ??
- * NULL๊ณผ DISTINCT

โ NULL ๊ฐ๋ DISTINCT ์ฒ๋ฆฌ๋์ด ๊ฐ ์ค๋ณต์ด ์ ๊ฑฐ๋ ํญ๋ชฉ์ด ๋์จ๋ค.
๐ SQL ์ฐ์ฐ์
BETWEEN
- ๋ฒ์ ์ฐ์ฐ์ (ํํ ๊ฐ๊ณผ ์ํ ๊ฐ ์ฌ์ด์ ๋ฒ์ ๊ฒ์ ์ฐ์ฐ์)
SELECT ENAME,SAL,HIREDATE FROM EMP WHERE SAL between 1000 and 2000;

// ๋น๊ต ์ฐ์ฐ์ ์ฌ์ฉ
โก SELECT ENAME,SAL,HIREDATE FROM EMP WHERE SAL >= 1000 and SAL <= 2000;

โ โ ,โก๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค. BETWEEN ์ฐ์ฐ์๋ฅผ ๋ชฐ๋ผ๋, ๋น๊ต ์ฐ์ฐ์ ํตํด ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋ค. โ BETWEEN ์ฐ์ฐ์๋ DBMS์์ ๋ด๋ถ์ ์ผ๋ก ๋น๊ต ์ฐ์ฐ์๋ก ๋ณํํ์ฌ ์ฒ๋ฆฌํ๋ค.
// ์ด์ ๋?
โข SELECT ENAME,SAL,HIREDATE FROM EMP WHERE SAL between 2000 and 1000;

โ between์ ํํ ๊ฐ and ์ํ ๊ฐ ์ผ๋ก ๋ช
์ํด์ผ ํ๋ค.
// ๋ฌธ์ ํ์
โฃ SELECT ENAME,SAL,HIREDATE FROM EMP WHERE ENAME BETWEEN 'C' AND 'Kโ;

// ๋ฌธ์ โ ๋ ์ง ํ์
, ์์์ ๋ฐ์ดํฐํ๋ณํ
โค SELECT ENAME,SAL,HIREDATE FROM EMP
WHERE HIREDATE BETWEEN '81/02/20' AND '82/12/09โ;

// ๋ ์ง ํ์
, ๋ช
์์ ํ๋ณํ, ๊ฒ์์ด ์๋๋ ์ด์ ๋ ?
โฅ
SELECT ENAME,SAL,HIREDATE FROM EMP
WHERE HIREDATE BETWEEN to_date('81/02/20','yy/mm/dd') AND to_date('82/12/09','yy/mm/dd');

โ โrr/mm/ddโ ๋ก ํฌ๋ฉง์ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
// ๋ ์ง ํ๊ธฐ ํฌ๋ฉง ์ดํด ์๊ธฐ
โฆ SELECT ENAME,HIREDATE,
TO_CHAR(HIREDATE,'YYYY/MM/DD'),
TO_CHAR(HIREDATE,'YYYY/MM/DD HH24:MI:SS'), // Date์ ์๊ฐ์ ๋ณดํ์ธ
TO_CHAR(HIREDATE,'RRRR/MM/DD HH24:MI:SS'),
TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') // sysdate์ ์๊ฐ์ ๋ณดํ์ธ
FROM EMP;


SELECT ENAME,SAL,HIREDATE FROM EMP
WHERE HIREDATE BETWEEN to_date('81/02/20โ,โrr/mm/dd') AND to_date('82/12/09','yy/mm/dd');

โง SELECT ENAME,SAL,HIREDATE FROM EMP
WHERE HIREDATE BETWEEN to_date('1981/02/20','yyyy/mm/dd') AND to_date('1982/12/09','yyyy/mm/dd');
โจ SELECT ENAME,SAL,HIREDATE FROM EMP
WHERE HIREDATE BETWEEN to_date('81/02/20','rr/mm/dd') AND to_date('82/12/09','rr/mm/dd');
โฉ SELECT ENAME,SAL,HIREDATE FROM EMP
WHERE HIREDATE BETWEEN to_date('2081/02/20','yyyy/mm/dd') AND to_date('2082/12/09','yyyy/mm/dd');
LIKE
%
: 0๊ฐ ์ด์์ ๋ชจ๋ ๋ฌธ์
โก _
: 1๊ฐ์ ๋ชจ๋ ๋ฌธ์, ์์น๊ฐ ์๋ฏธ๋ฅผ ๊ฐ์ง.
* ๋ฐ์ดํฐ ์์ด ๋ง์์ง ๊ฒฝ์ฐ like ์ฌ์ฉ์ ์์ ํ์.SELECT ENAME FROM EMP WHERE ENAME like 'A%';

โ ENAME์ด A๋ก ์์ํ๋ ๊ฒ
โก SELECT ENAME FROM EMP WHERE ENAME like '_A%';

โ ENAME์ด ๋๋ฒ์งธ์ A๊ฐ ๋ค์ด๊ฐ ๊ฒ
โข SELECT ENAME FROM EMP WHERE ENAME like '%L%E%';

โ ENAME์ด ์ค๊ฐ์ L๊ณผ E๊ฐ ๋ค์ด๊ฐ ๊ฒ
โฃ SELECT ENAME FROM EMP WHERE ENAME like '%LE%';

โ ENAME์ด LE๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ
โค SELECT ENAME FROM EMP WHERE ENAME like '%A%';

โ ENAME์ A๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ
โฅ SELECT ENAME FROM EMP WHERE ENAME NOT like '%A%';

โ A๊ฐ ํฌํจ๋์ง ์์ ๋ฐ์ดํฐ
// ๋ ์ง , ์์์ ํ๋ณํ
โฆ SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE like '81%';

โ HIREDATE์ โ81โ๋
๋์ ๋ฐ์ดํฐ ์ถ๋ ฅ
โ HIREDATE๋ ๋ ์ง ํ์
์ด๋ค.
โ ์๋ ๋๋ก๋ผ๋ฉด, ๋ ์ง ํ์
์ด ๋ฌธ์์ด ํ์
๋ณด๋ค ์ฐ์ ์ด์ง๋ง,
like
ํน์ฑ ์ ๋ฌธ์์ด์ ํจํด ๋งค์นญ ์ฐ์ฐ์์ด๋ฏ๋ก HIREDATE ์ปฌ๋ผ ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ณํ๋๋ค.
// ์ซ์ ,
โง SELECT ENAME,SAL FROM EMP WHERE SAL like 2%;
โ (์๋ฌ) like ๋ค์์ ํญ์ ๋ฌธ์๊ฐ ์์ผ ํ๋ค!!
// ์์์ ํ๋ณํ
โจ SELECT ENAME,SAL FROM EMP WHERE SAL like '2%';

โ L-Value์ธ SAL์ด ๋ฌธ์ ํ์ผ๋ก ์์์ ํ์ ๋ณํ๋์ด ํจํด ๋งค์นญ๋ ๊ฐ์ด ์ถ๋ ฅ ๋๋ค.
// ๋ช
์์ ํ๋ณํ
โฉ SELECT ENAME,SAL FROM EMP WHERE TO_CHAR(SAL) like '2%';

โ 9๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ช ์์ ์ผ๋ก ํ์ ๋ณํ์ ์ ์ด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
HIREDATE like โ81%โ
// ์ซ์
SAL like 2%
// ์ซ์
SAL like โ2%โ
// ๋ฌธ์
to_char(SAL) like โ2%โ
IN
SELECT EMPNO, JOB FROM EMP WHERE EMPNO IN (7369,7521,7654);


// ์ฐจ์ด์ ?
โก SELECT EMPNO, JOB FROM EMP WHERE EMPNO = 7369 or EMPNO = 7521 or EMPNO=7654;

โ โ ,โก์ ๊ฒฐ๊ณผ ๊ฐ์ ๊ฐ๋ค. IN์ ๋ชฐ๋ผ๋ OR ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ๋์ผํ ๋ก์ง์ ๊ตฌํํ ์ ์๋ค.
โ IN์ ์ฒ๋ฆฌ๋ DBMS ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ด OR์ฐ์ฐ์ผ๋ก ๋ณํ๋์ด ์ฒ๋ฆฌํด์ค๋ค.
// ๋ฌธ์
โข SELECT EMPNO,ENAME,JOB FROM EMP WHERE JOB IN ('clerk','manager');

โ ์กฐํ๊ฐ ์๋๋ค. ๋ฐ์ดํฐ๋ ๋์๋ฌธ์ ๊ตฌ๋ณ์ด ๋๋ฏ๋ก, โCLERKโ๊ณผ โMANAGERโ๋ก ์์ ํด์ผ ํ๋ค.
SELECT EMPNO,ENAME,JOB FROM EMP WHERE JOB IN ('CLERK','MANAGER');

// ๋ ์ง?
โฃ SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE HIREDATE IN ('81/05/01','81/02/20');

โ ์์์ ํ๋ณํ ๋ฐ์
โ IN ๋ค ๋ฌธ์์ด ํ์
์ด ๋ ์ง ํ์
์ผ๋ก ์บ์คํ
๋์ด ์ฒ๋ฆฌ๋๋ค.
// ๋ค์ค์ปฌ๋ผ๋ฆฌ์คํธ , in (1..1000)
โค SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP
WHERE (JOB,DEPTNO) in (('MANAGER',20),('CLERK',20));


โ ๋ด๋ถ์ ์ธ ๊ดํธ ๋ด ์ฝค๋ง๋ AND์ ์ญํ ์ ํ๊ณ , ๋ฐ๊นฅ ์ฝค๋ง๋ OR ์ญํ ์ ํ๋ค.
ANY(or), ALL(and)
ALL :๋ฆฌ์คํธ๋ด์ ๋ชจ๋ ๊ฐ์ด ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ๊ฒฐ๊ณผ ๋ฆฌํด (AND)
โ SELECT ENAME, SAL FROM EMP WHERE SAL > (1500,2450,3000);
// Error ?? ๋จ์ผ๊ฐ ๋น๊ต ์ฐ์ฐ์
โก SELECT ENAME, SAL FROM EMP WHERE SAL > ANY(1500,2450,3000);
// OR , SAL > 15000
โข SELECT ENAME, SAL FROM EMP WHERE SAL >= ALL(1500,2450,3000);
// AND , SAL >= 3000
โฃ SELECT ENAME, SAL FROM EMP WHERE SAL = ANY (1500,2450,3000);
// ANY = SOME
โค SELECT ENAME, SAL FROM EMP WHERE SAL = SOME (1500,2450,3000);
SELECT ENAME, SAL FROM EMP WHERE SAL IN (1500,2450,3000);
// 0 Rows๊ฐ ๊ฒ์๋๋ ์ด์ ?
โฅ SELECT ENAME, SAL FROM EMP WHERE SAL = ALL (1300,2450,3000);
๐์ผ์ผ ๊ณผ์
1. EMP ํ
์ด๋ธ์์ ์ฌ๋ฒ,์ด๋ฆ,์ง๋ฌด,๊ธ์ฌ,๋ถ์๋ฒํธ ๋ฐ์ดํฐ ์ฌ์ด์ ๊ตฌ๋ถ์ ,
๋ฅผ ์ฝ์
ํ๋ ์์ SQL ์์ฑ
$ sqlplus scott/tiger
a) SPOOL, SQL Script file ์ฌ์ฉํด์ emp_list.csv ํ์ผ์์ฑ >> excel
SPOOL emp_list.csv
SELECT empno || ',' || ename || ',' || job || ',' || sal || ',' || deptno FROM EMP
SPOOL off;

b) set ๋ช ๋ น์ด(SQL*PLUS) ์ฌ์ฉ >> excel
b_1)
-- ํ์ด์ง ํฌ๊ธฐ๋ฅผ 0์ผ๋ก ์ค์ ํ์ฌ ํ์ด์ง ๊ตฌ๋ถ์ ์์ฑ๋๋ค.
set pagesize 0
-- ์ถ๋ ฅ๋ ๋ฐ์ดํฐ์ ์ข์ฐ ์ฌ๋ฐฑ์ ์ ๊ฑฐํฉ๋๋ค.
set trimspool on
-- ์ปฌ๋ผ๋ช
๊ณผ ๋ฐ์ดํฐ ์ฌ์ด์ ๊ตฌ๋ถ์๋ฅผ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
set headsep off
-- ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
set feedback off
-- ์ถ๋ ฅํ ํ ์ค์ ์ต๋ ๊ธธ์ด๋ฅผ 2000์ผ๋ก ์ค์ ํฉ๋๋ค.
set linesize 2000
-- NUMBER ํ์
๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ๋ ์ต๋ ์๋ฆฟ์๋ฅผ 2000์ผ๋ก ์ค์ ํฉ๋๋ค.
set numw 2000
-- ์คํ ์๊ฐ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
set timing off
spool emp_list.csv;
SELECT EMPNO || ',' || ENAME || ',' || JOB || ',' || SAL || ',' || DEPTNO FROM EMP;
spool off;
@good.sql


b_2) create_csv_emp.sql
-- ','๋ก ๊ตฌ๋ถ๋ ์ปฌ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด ๊ตฌ๋ถ์๋ฅผ ','๋ก ์ค์ ํฉ๋๋ค.
SET COLSEP ','
-- ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์์ ํค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
SET HEADING OFF
-- ์ถ๋ ฅ๋ ๋ฐ์ดํฐ์ ์ข์ฐ ์ฌ๋ฐฑ์ ์ ๊ฑฐํฉ๋๋ค.
set trimspool on
-- ์ปฌ๋ผ๋ช
๊ณผ ๋ฐ์ดํฐ ์ฌ์ด์ ๊ตฌ๋ถ์๋ฅผ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
set headsep off
-- ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ์ ๋ฉ์์ง๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
SET FEEDBACK OFF
-- ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ฌ๋ฌ ํ์ด์ง๋ก ๋๋์ง ์๊ณ , ํ ํ์ด์ง์ ์ถ๋ ฅํฉ๋๋ค.
SET PAGESIZE 0
-- ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ CSV ํ์์ผ๋ก ๋งํฌ์
ํฉ๋๋ค.
SET MARKUP CSV ON
SPOOL emp_list.csv
SELECT empno, ename, job, sal, deptno FROM EMP;
SPOOL OFF
-- ๋งํฌ์
์ ํด์ ํฉ๋๋ค.
SET MARKUP CSV OFF
@create_csv_emp.sql
cf) export๋ก csv ํ์ผ ๋ง๋ค๊ธฐ



2. โข SQL ์คํ ๊ฒฐ๊ณผ๊ฐ Oracle 9i ์์๋ ์ ๋ ฌ๋์ด ๋ํ๋์ง๋ง Oracle 10g์ดํ ๋ฒ์ ๋ถํฐ๋ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋์ง ์๋๋ค. ์ด์ ๋ฅผ ์ฐพ์ ์ค๋ช
3. โฅโฆ SQL์ด ์ ์๋ฌ๊ฐ ๋๋์ง Select Syntax Diagram์ ๋ณด๊ณ ์ค๋ช
SELECT DISTINCT JOB, DISTINCT DEPTNO FROM EMP;
// ๋ฒ์?
โฆ SELECT JOB, DISTINCT DEPTNO FROM EMP;
// ์์น?
DISTINCT
๋ ๋งจ ์์ ์์นํด์ผ ํ๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก ์กฐํฉ์ ๋ํ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ฒ ์ด๋ฏ๋ก, JOB์ ๋จผ์ select ํ๊ณ ์ดํ ์ค๋ณต์ ๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ๋ค.
4. Interactive SQL ๊ณผ Embedded SQL๋ฅผ ์ค๋ช ํ๊ณ ๊ฐ๊ฐ์ ์ฌ์ฉ์์๋ฅผ ์ฐพ์์ ๋ฐํ
Interactive SQL์ ์ฌ์ฉ์๊ฐ SQL ๋ช ๋ น์ DBMS๋ก ์ง์ ์ ์กํ๋ ๋ฐฉ์์ผ๋ก ์ํธ ์์ฉํฉ๋๋ค. ์ฌ์ฉ์๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅํ๊ณ ์คํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋ณผ ์ ์์ต๋๋ค.
Embedded SQL์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์: C, C++, Java) ๋ด์์ SQL ์ฝ๋๋ฅผ ๋ด์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ฝ๋ ๋ด์ SQL ๋ฌธ์ ์ฝ์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
- Java - Host Language
- SQL -
๊ฐ๊ฐ์ ์ฌ์ฉ ์์๋ก, ์ฐ๋ฆฌ๊ฐ ์ค์ต์ผ๋ก SQL Developer๋ฅผ ํ์ฉํ์ฌ DBMS ์๋ฒ์ ์ง์ SQL ์ฟผ๋ฆฌ๋ฅผ ์ ์กํ๋ ๊ฒ์ด Interactive SQL ๋ฐฉ๋ฒ์ด๊ณ , ์ถํ JAVA์์ JDBC๋ฅผ ํ์ฉํ์ฌ SQL ์ฝ๋๋ฅผ ๋ด์ฅํ์ฌ ์ฟผ๋ฆฌํ๋ ๊ฒ์ด Embedded SQL์ ์์ ์ ๋๋ค.
5. SELECT * FROM SALGRADE
WHERE 3000 BETWEEN LOSAL AND HISAL;
๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ค๋ช

"salgrade" ํ ์ด๋ธ์์ "losal"๊ณผ "hisal" ์ฌ์ด์ 3000์ด ํฌํจ๋๋ ํ์ ์ ํํ๋ ๊ฒ์ ๋๋ค.
"salgrade" ํ ์ด๋ธ์ ๊ธ์ฌ ๋ฒ์์ ํด๋น ๋ฒ์์ ๋ํ ๋ฑ๊ธ์ ํฌํจํ๋ ํ ์ด๋ธ์ด๋ค. ๋ฐ๋ผ์ ์ด ์ฟผ๋ฆฌ๋ 3000๋ฌ๋ฌ์ ๊ธ์ฌ๊ฐ ์ด๋ค ๋ฑ๊ธ์ ์ํ๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ค.
6. ์๋์ SQL ์คํ์ ๋ฐ์ดํฐ ๊ฒ์์ด ์๋๋ ์ด์ ๋ฅผ ๋ ์ง ํฌ๋งท YY ์ RR์ ์ฐจ์ด์ ์ ์กฐ์ฌํ ํ ์ค๋ช
SELECT ENAME,SAL,HIREDATE FROM EMP
WHERE HIREDATE BETWEEN to_date('81/02/20','yy/mm/dd')
AND to_date('82/12/09','yy/mm/dd');


yy
: 0์ ๊ธฐ์ค์ผ๋ก 100๋
์ฃผ๊ธฐ๋ก ์ฐ๋๋ฅผ ํ๊ธฐํจ. ๋ฐ๋ผ์, 2000๋
๋๋ง ํ๊ธฐํ ์ ์๊ณ , 1900๋
๋๋ ํ๊ธฐํ ์ ์๋ค.
rr
: 50์ ๊ธฐ์ค์ผ๋ก 100๋
๋๋ฅผ ๋๋๋ค. ๋ฐ๋ผ์, 00์์ 49๊น์ง๋ 2000๋
์์ 2049๋
๊น์ง์ ์ฐ๋๋ก, 50์์ 99๊น์ง๋ 1950๋
์์ 1999๋
๊น์ง์ ์ฐ๋๋ก ํด์๋๋ค.
โ ๋ฐ๋ผ์ ์ SQL ์ฝ๋๋ฅผ yy
๋ก๋ 2081๋
, 2082๋
๋๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฏ๋ก ํด๋น ์ฐ๋์ ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ์ถ๋ ฅ๋์๋ค.
โ rr
์ ์ฌ์ฉํ ๊ฒฝ์ฐ 1981๋
, 1982๋
์ผ๋ก ์ ์ ์ธ์๋์ด ์ ์์ ์ผ๋ก ํด๋น ์ฐ๋์ ์ํ ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋์๋ค.
7. LIKE ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ENAME์ '_' ๊ฐ ๋ค์ด๊ฐ ์๋ ์ฌ์๋ค์ ์ฐพ๋ SQL ์์ฑ ENAME ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์์ (UPDATE)ํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ ์์ ์ถ๋ ฅ -ํํธ : escape option
EMP ํ ์ด๋ธ ENAME ์ปฌ๋ผ ๋ฐ์ดํฐ ์์ (UPDATE)
update emp
set ENAME = '_'||ENAME
WHERE (JOB = 'SALESMAN');
โ_โ๊ฐ ๋ค์ด๊ฐ ์๋ ์ฌ์ ์ฐพ๋ SQL ์์ฑ
select * from emp
where ENAME LIKE '%\_%' escape '\';
Uploaded by N2T