2022.08.23 SQL

sofiaยท2022๋…„ 8์›” 23์ผ
0

SQL

๋ชฉ๋ก ๋ณด๊ธฐ
10/13
post-thumbnail

๐Ÿ“š๋ณต์Šต๋ฌธ์ œ

๐Ÿ“–๋ฌธ์ œ 1

SELECT NAME
     , TEL
     , POSITION
     , TO_CHAR(PAY,'999,999,999') "PAY"
     , RANK()OVER(PARTITION BY SUBSTR(TEL,1,INSTR(TEL,')')-1),
     POSITION  ORDER BY  PAY DESC) 
     FROM EMP2;

๐Ÿ“–๋ฌธ์ œ 2

SELECT NAME
     , BIRTHDAY
     , EMP_TYPE
     , TO_CHAR(PAY,'999,999,999')"PAY"
     , TO_CHAR(SUM(PAY) OVER(PARTITION BY EMP_TYPE),'999,999,999') "TOTAL"
FROM EMP2;

๐Ÿ“–๋ฌธ์ œ 3

SELECT
    GNAME,
    JUMIN,
    TO_CHAR(POINT, '999,999') "POINT",
    TO_CHAR(SUM(POINT)
            OVER(PARTITION BY SUBSTR(JUMIN, 1, 2)
                 ORDER BY POINT DESC),'999,999,999')    "TOTAL",
    ROUND(POINT / SUM(POINT)
                  OVER(PARTITION BY SUBSTR(JUMIN, 1, 2)) * 100,2) "RATIO(%)"
FROM customer
GROUP BY GNAME, JUMIN, POINT;

๐Ÿ“š์ง„๋„

๐Ÿ“˜(์ €๋ฒˆ์‹œ๊ฐ„์— ์ด์–ด์„œ)

์ €๋ฒˆ ์‹œ๊ฐ„์— ๋งŒ๋“ 
SCORE2, SUBJECT2, STUDENT2 ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋œ ํ˜•ํƒœ

  • ์กฐํšŒ
SELECT * FROM STUDENT2; -- A001 AA
SELECT * FROM SUBJECT2; -- 100 A1
SELECT * FROM SCORE2;
  • SCORE2์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
INSERT INTO SCORE2 VALUES('A000',111,60,'G'); -- ์‹คํ–‰ ์•ˆ๋จ Gํ•™๋ฒˆ ์—†์Œ
INSERT INTO SCORE2 VALUES('A000',111,60,'D'); -- ์‹คํ–‰ ์•ˆ๋จ 111์ด๋ž€ ์†Œ์Šค ์—†์Œ 100์€ ์žˆ์Œ
INSERT INTO SCORE2 VALUES('A000',100,60,'D'); -- ์‹คํ–‰์•ˆ๋จ A000์•ˆ๋จ A0001๋กœ ๋ฐ”๊ฟˆ
INSERT INTO SCORE2 VALUES('A0001',100,60,'D'); -- ์‹คํ–‰๋จ SCORE2์˜ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๊ฐ’๋“ค A0001 100 60 D
  • ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋ฅผ ์‹œ๋„
--๋ฐ์ดํ„ฐ ์‚ญ์ œ
DELETE FROM student2; -- ์ž์‹ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•จ.(SCORE2์— ์กด์žฌํ•จ) 
--๊ทธ๋ž˜์„œ ํ•˜๋ ค๋ฉด SCORE2๋ถ€ํ„ฐ DELETE ํ•ด์•ผํ•จ
DELETE FROM SUBJECT2; -- ์ž์‹ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•จ.(SCORE2์— ์กด์žฌํ•จ) 
--๊ทธ๋ž˜์„œ ํ•˜๋ ค๋ฉด SCORE2๋ถ€ํ„ฐ DELETE ํ•ด์•ผํ•จ
DELETE FROM SCORE2;

๊ทธ๋Ÿฌ๋‚˜
student2์™€ SUBJECT2๋Š” ์‚ญ์ œ ์•ˆ๋จ.(์ž์‹ ๋ฐ์ดํ„ฐ๊ฐ€ SCORE2์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ)
โ‡’ ์‚ญ์ œํ•˜๋ ค๋ฉด SCORE2๋ฅผ ์‚ญ์ œํ•ด์•„ํ•จ.

์ด๋Ÿฌ๋Š” ๊ณผ์ •์ด ๋„ˆ๋ฌด ๊ท€์ฐฎ์Œ.
๊ตณ์ด ์ž์‹์„ ์ง€์šฐ๊ณ  ๋ถ€๋ชจ๋ฅผ ์ง€์›Œ์•ผํ•˜๋Š”๊ฐ€? ํ•œ๋ฒˆ์— ๋ถ€๋ชจ, ์ž์‹๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์ง€์šฐ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”

๐Ÿ“˜ON DELETE CASCADE

DROP TABLE SCORE2; ์‹คํ–‰ํ•˜๊ณ ,SCORE2 ํ…Œ์ด๋ธ” ์žฌ์ƒ์„ฑํ•œ ๋‹ค์Œ

CREATE TABLE SCORE2(
    STU_ID CHAR(5) CONSTRAINT SCORE2_STU_ID_NN NOT NULL,
    SUB_ID NUMBER(3) CONSTRAINT SCORE2_SUB_ID_NN NOT NULL,
    SCORE NUMBER(3) CONSTRAINT SCORE2_SCORE_NN NOT NULL,
    GRADE CHAR(1) CONSTRAINT SCORE2_GRADE_CK CHECK(GRADE IN('A','B','C','D','F')),
    CONSTRAINT SCORE2_PK PRIMARY KEY(STU_ID, SUB_ID),
    --CONSTRAINT SCORE2_FK1 FOREIGN KEY (STU_ID) REFERENCES STUDENT2(STU_ID),
    --CONSTRAINT SCORE2_FK2 FOREIGN KEY (SUB_ID) REFERENCES SUBJECT2(SUB_ID),
    CONSTRAINT SCORE2_FK1 FOREIGN KEY (STU_ID) REFERENCES STUDENT2(STU_ID) ON DELETE CASCADE,
    CONSTRAINT SCORE2_FK2 FOREIGN KEY (SUB_ID) REFERENCES SUBJECT2(SUB_ID) ON DELETE CASCADE
);

์‹คํ–‰

ON DELETE CASCADE ์‚ฌ์šฉ

์‹ค์ œ๋กœ DELETE FROM STUDENT2; ์‹คํ–‰ํ•˜๋ฉด STUDENT2์˜ ๋ฐ์ดํ„ฐ์™€ ์ž์‹๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” SCORE2์˜ ๋ฐ์ดํ„ฐ๋„ ๋ชจ๋‘ ์‚ฌ๋ผ์ง

ROLLBACK;ํ›„ DELETE FROM SUBJECT2; ์‹ค์‹œ

๊ทธ๋Ÿฌ๋ฉด SUBJECT2์™€ SCORE2์˜ ๊ฐ’๋งŒ ์‚ฌ๋ผ์ง
(์—ฌ๊ธฐ์„œ ํ˜น์‹œ๋‚˜ ์‹ถ์–ด์„œ ์ด์•ผ๊ธฐ ํ•˜์ง€๋งŒ ROLLBACK;ํ•ด์„œ STUDENT2๋Š” ๋ฐ์ดํ„ฐ๋Š” ์กด์žฌํ•จ)

๐Ÿ“˜๋ธŒ๋ผ์šฐ์ €


๋ณด๊ธฐ์˜ Data Modeler โ‡’ ๋ธŒ๋ผ์šฐ์ €

๋ธŒ๋ผ์šฐ์ €์—์„œ ์šฐํด๋ฆญ โ‡’ ๋ฐ์ดํ„ฐ ์ €์žฅ (D:\model์ƒ์„ฑํ•˜์—ฌ model๋กœ ์ €์žฅ)


๊ทธ๋Ÿฌ๋ฉด

๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์— Relationa_1์ด ์ƒ์„ฑ๋จ

! ๋งŒ์•ฝ์— ์ด ๊ณผ์ •์ด ์•ˆ๋˜๋ฉด ์˜ค๋ผํด ํ™ˆํŽ˜์ด์ง€์—์„œ SQL Developer Data Modeler ๋ฅผ ๋‹ค์šด ๋ฐ›์•„์•ผํ•จ !

์ƒˆํ…Œ์ด๋ธ” ์ƒ์„ฑ

๊ทธ ํ›„, Relationa_1์˜ ์šฐํด๋ฆญ , ํ‘œ์‹œ ํด๋ฆญํ•˜๋ฉด ๋ณด์ง€ ๋ชปํ•œ ๋ฉ”๋‰ด๋“ค์ด ๋‚˜์˜ด


์—ฌ๊ธฐ์„œ ์ƒˆํ…Œ์ด๋ธ” ํด๋ฆญ

ํ…Œ์ด๋ธ” ๋ช… userTBL์„ ์ž‘์„ฑํ•œ ๋’ค ์ ์šฉ โ‡’ ์™ผ์ชฝ ์—ด ํด๋ฆญํ•˜์—ฌ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ํ›„ ์ž…๋ ฅ



์ด๋Ÿฐ์‹์œผ๋กœ

์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ปฌ๋Ÿผ ์ƒ์„ฑ ์ ์šฉ ํ›„ ํ™•์ธ ํ•˜๋ฉด ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ ๋œ๋‹ค.

์œ„์˜ ๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ตฌ๋งคํ…Œ์ด๋ธ”๋„ ์ƒ์„ฑ

์™ธ๋ž˜ํ‚ค ์ถ”๊ฐ€


์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ƒˆ ์™ธ๋ž˜ํ‚ค ํด๋ฆญํ›„ userTBL ํด๋ฆญ ํ›„ buyTBL ํด๋ฆญ (๋“œ๋ž˜๊ทธ ์•„๋‹˜!!!)

ํŒ๋ณ„์ž ์—ด์„ userId๋กœ ๋ฐ”๊พผ ํ›„
์ ์šฉ ํ›„ ํ™•์ธ

์ด์ œ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์„ ํƒ์‚ฌํ•ญ์ด ๋จ

(์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๊ทธ์ „์—๋Š” ๊ฐ€์ž…ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ๋ฌผ๊ฑด ๊ตฌ๋งคํ•ด์•ผํ–ˆ๋Š”๋ฐ,ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ๋ฌด์กฐ๊ฑด ๋ฌผ๊ฑด์„ ๊ตฌ๋งคํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ฒŒ๋” ๋งŒ๋“ค์—ˆ์Œ.)


์—ฌ๊ธฐ์„œ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์šฐํด๋ฆญํ•ด์„œ DDL ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•˜๋ฉด ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ฟผ๋ฆฌ๊ฐ€ ๋ณด์—ฌ์ง

์ด ์ฟผ๋ฆฌ๋กœ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•ด๋„ ๋จ~!

DDL ์ƒ์„ฑ



DDL ์ƒ์„ฑ ํด๋ฆญ ํ›„, ์ƒ์„ฑ ํด๋ฆญ


๊ทธ๋Ÿผ Relationa_1์ด ๋‚˜์˜ค๋Š”๋ฐ, ์ฒดํฌํ›„, ํ™•์ธ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜์˜ด

๊ทธํ›„, ์ €์žฅ(D:\model์— modelSchema.ddl๋กœ ์ €์žฅํ•˜๊ณ  ์ƒˆ๋กœ์šด๊ณ„์ •์œผ๋กœ ์ƒ์„ฑํ•œ ddl๋ฅผ ๋งŒ๋“ค๊ฑฐ์ž„.

์‚ฌ์šฉ์ž ์ƒ์„ฑ (์‚ฌ์šฉ์ž ๋ช… : MODEL , ๊ธฐ๋ณธํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค USERS, ์ž„์‹œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค TEMP๋กœ ์ง€์ •)
๊ทธํ›„, ๋ถ€์—ฌ๋œ ๋ฃฐ์—์„œ CONNECT, RESOURCE๋ฅผ ์ฒดํฌ(๊ถŒํ•œ์ด ๋ถ€์—ฌ๋จ, ๊ธฐ๋ณธ๊ฐ’์—๋งŒ!)
๊ทธ๋ฆฌ๊ณ  ํ• ๋‹น๋Ÿ‰์— USERS ๋ถ€๋ถ„์— ํ• ๋‹น๋Ÿ‰ 10, ๋‹จ์œ„ M ์ž…๋ ฅ(10M)
๊ทธ๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— MODEL์ด ์ƒ์„ฑ๋œ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜์žˆ๋‹ค.


๊ทธ ํ›„, ์ ‘์†์„ ๋ˆŒ๋Ÿฌ์„œ(์•„๋ž˜์‚ฌ์ง„) ์ €์žฅํ›„, ์ ‘์†

๊ทธํ›„ ์ €์žฅํ–ˆ๋˜ modelSchema.ddl๋ฅผ ๋ถ€๋ฆ„(local-model ์ ‘์†)
๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋œ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Œ

์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํŒŒ์ผ์„ ์ฃผ๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ์˜ฎ๊ธฐ๊ธฐ ํ• ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ(๊ตณ์ด ์ฟผ๋ฆฌ ์˜คํƒ€๋‚ด๋ฉด์„œ ์ž‘์„ฑํ•˜์ง€ ์•ˆํ•ด๋„ ๋จ)

๋˜ํ•œ ์š”์•ฝ์„ ๋ณด๊ณ , ์˜ค๋ผํด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋Ÿฌ ๋””์ž์ธ์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Œ
(์•„๋ž˜ ์‚ฌ์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋ฉด ์ƒ์„ฑ๋จ




(์™„๋ฃŒ ํด๋ฆญ)
๋ณ‘ํ•ฉ ํด๋ฆญ
๊ทธ๋Ÿฌ๋ฉด Relationa_1์— ๊ธฐ์กด๊ณผ ๋™์ผํ•œ ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ“˜์ •๊ทœํ™”

: ํ…Œ์ด๋ธ”์˜ ์†์„ฑ๋“ค์€ ์„œ๋กœ ์ข…์†์ ์ธ ๊ด€๊ณ„๋กœ, ์ข…์†๊ด€๊ฒŒ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ ์˜ ํ…Œ์ด๋ธ”๋กœ ๋ถ„ํ•ดํ•˜๋Š” ๊ณผ์ •

  • ๋ชฉ์  : ์ค‘๋ณต ์ œ๊ฑฐํ•˜์—ฌ ์ด์ƒํ˜„์ƒ(์‚ฝ์ž…/์‚ญ์ œ/๊ฐฑ์‹ )์˜ ๋ฐœ์ƒ์„ ์ค„์ž„

  • ์ •๊ทœํ™” ๋‹จ๊ณ„

  1. 1์ •๊ทœํ™”(1NF) : ๋„๋ฉ”์ธ์ด ์›์ž๊ฐ’(๋”์ด์ƒ ์ชผ๊ฐœ์ง€์ง€ ์•Š๋Š”)
  2. 2์ •๊ทœํ™”(2NF) : ๋ถ€๋ถ„ํ•จ์ˆ˜์  ์ข…์† ์ œ๊ฑฐ(์™„์ „ํ•จ์ˆ˜์  ์ข…์†)
  3. 3์ •๊ทœํ™”(3NF) : ์ดํ–‰ํ•จ์ˆ˜์  ์ข…์† ์ œ๊ฑฐ

์ฃผ๋ฌธ๋„์„œ ํ™•์ธ ์˜ˆ์‹œ


์œ„์™€ ๊ฐ™์ด ํ…Œ์ด๋ธ” ์ƒ์„ฑ
1.

: ๊ณ ๊ฐ์€ ๋ฌด์กฐ๊ฑด ์ฃผ๋ฌธํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Œ(์ ์„ ํ‘œ์‹œ)

2.

์ฃผ๋ฌธ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋Š”๊ฑด ์ฃผ๋ฌธ ํšŒ์›์ด ์žˆ๋‹ค๋Š” ๋ง!
๊ทธ๋ž˜์„œ ๋ฌด์กฐ๊ฑด ํ•„์ˆ˜(์‹ค์„ )๋กœ ์ฒดํฌ๋˜์–ด์žˆ์Œ


์ฑ…์ด ๋“ค์–ด์™€์•ผ์ง€ ์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์Œ(์ ์„ )
์ฃผ๋ฌธ์„ ํ•˜์˜€์ง€๋งŒ ๋„์„œ ์žฌ๊ณ ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ์Œ

๐Ÿ“š JOIN (PPT Chapter 4)

Join

: ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ

SELECT COUNT(*) FROM EMP;  --12๊ฑด
SELECT COUNT(*) FROM DEPT;  --4๊ฑด

SELECT * FROM EMP;
SELECT * FROM DEPT;

--์นดํ‹ฐ์…˜ ๊ณฑ(Cartesian Product)
SELECT * FROM EMP,DEPT; --48๊ฑด (12*4)
-- ์—ฐ๊ฒฐ๋œ key๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๋‚˜์˜ด.

-- ๋“ฑ๊ฐ€ ์กฐ์ธ(EQUI Join)
SELECT * 
  FROM EMP A, DEPT B 
  WHERE A.DEPTNO = B.DEPTNO;  --12๊ฑด
  -- ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ณตํ†ต ์ปฌ๋Ÿผ์„ ํ™œ์šฉํ•˜์—ฌ 
  -- ๊ฐ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์— ์ผ์น˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ(๊ต์ง‘ํ•ฉ)

-- Oravle Join (์ด๋ฉด์„œ ๋“ฑ๊ฐ€ ์กฐ์ธ)
SELECT ENAME, DNAME
  FROM EMP A, DEPT B 
  WHERE A.DEPTNO = B.DEPTNO;  --12๊ฑด

-- ANSI JOIN (์ด๋ฉด์„œ ๋“ฑ๊ฐ€ ์กฐ์ธ)
SELECT ENAME, DNAME
  FROM EMP A JOIN DEPT B 
  ON A.DEPTNO = B.DEPTNO;  --12๊ฑด

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 1

SELECT A.NAME "STU_NAME", B.NAME "PROF_NAME"
  FROM STUDENT A, PROFESSOR B 
  WHERE A.PROFNO = B.PROFNO;

๋‘˜ ๋‹ค ๋™์ผํ•จ

SELECT A.NAME "STU_NAME", B.NAME "PROF_NAME"
  FROM STUDENT A JOIN PROFESSOR B 
  ON A.PROFNO = B.PROFNO;

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 2

-- 2๊ฐ€์ง€ ์ผ€์ด์Šค(ํ•™์ƒ ๋ถ€์„œ๋ฒˆํ˜ธ1, ๊ต์ˆ˜ ๋ถ€์„œ๋ฒˆํ˜ธ)
SELECT A.NAME "STU_NAME"
     , B.NAME "PROF_NAME"
     , C.DNAME DEPARTMENT
  FROM STUDENT A
  JOIN PROFESSOR B 
  ON A.PROFNO = B.PROFNO
  JOIN DEPARTMENT C
  ON  A.DEPTNO1 = C.DEPTNO; --15๊ฑด , ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์„ STUDENT๋กœ ์žก์Œ

SELECT A.NAME "STU_NAME", B.NAME "PROF_NAME"
  FROM STUDENT A , PROFESSOR B, DEPARTMENT C
  WHERE A.PROFNO = B.PROFNO
  AND  B.DEPTNO = C.DEPTNO
  ORDER BY A.NAME; --15๊ฑด , ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์„ PROFESSOR๋กœ ์žก์Œ

SELECT A.NAME "STU_NAME", B.NAME "PROF_NAME"
  FROM STUDENT A , PROFESSOR B, DEPARTMENT C
  WHERE A.PROFNO = B.PROFNO
  AND A.DEPTNO1 = C.DEPTNO
  AND B.DEPTNO = C.DEPTNO 
  ORDER BY A.NAME; --14๊ฑด(์‚ฌ์ง„๊ณผ ๋‹ค๋ฆ„)

-- ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ์ด์œ  : ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์ด ์ฐจ์ด ๋‚˜๊ธฐ ๋–„๋ฌธ
SELECT * FROM STUDENT;  --Steve Martin 201 4003
SELECT * FROM DEPARTMENT;
SELECT * FROM PROFESSOR; --Nicole Kidman 202
-- ์—ฌ๊ธฐ์„œ ์ฐจ์ด๊ฐ€ ๋‚จ. ๊ทธ๋ž˜์„œ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์— ๋”ฐ๋ผ์„œ ๊ฐ’์ด ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜์žˆ๋‹ค.

๋ณธ์ธ์€

SELECT A.NAME "STU_NAME"
     , B.NAME "PROF_NAME"
     , C.DNAME DEPARTMENT
  FROM STUDENT A
  JOIN PROFESSOR B 
  ON A.PROFNO = B.PROFNO
  JOIN DEPARTMENT C
  ON  A.DEPTNO1 = C.DEPTNO;

๋ฐฉ๋ฒ• ์‚ฌ์šฉ

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 3

SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S
  JOIN PROFESSOR P
    ON  S.PROFNO = P.PROFNO
	 -- WHERE S.DEPTNO1=101 ;
    AND  S.DEPTNO1=101;
SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S
  , PROFESSOR P
   WHERE  S.PROFNO = P.PROFNO
    AND  S.DEPTNO1=101;

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 4

๋‚ด ๋ฐฉ๋ฒ•

SELECT C.GNAME "CUST_NAME"
     , TO_CHAR(POINT,'999,999')"POINT"
     , G.GNAME "GIFT_NAME"
  FROM CUSTOMER C, GIFT G 
  WHERE G_START< POINT AND POINT<G_END;
SELECT C.GNAME "CUST_NAME"
     , TO_CHAR(POINT,'999,999')"POINT"
     , G.GNAME "GIFT_NAME"
  FROM CUSTOMER C JOIN GIFT G 
  ON G_START< POINT AND POINT<G_END;

๊ฐ•์‚ฌ๋‹˜ ๋ฐฉ๋ฒ•(BETWEEN ..AND )

-- ๋น„๋“ฑ๊ฐ€ ์กฐ์ธ (Non-Equi Join)
SELECT C.GNAME "CUST_NAME"
     , TO_CHAR(POINT,'999,999')"POINT"
     , G.GNAME "GIFT_NAME"
 FROM CUSTOMER C , GIFT G 
 WHERE C.POINT BETWEEN G_START AND G_END;

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 5

SELECT S.NAME "STU_NAME"
     , C.TOTAL
     , H.GRADE "CREDIT"
  FROM STUDENT S, SCORE C ,HAKJUM H
  WHERE S.STUDNO = C.STUDNO 
  AND C.TOTAL BETWEEN MIN_POINT AND MAX_POINT;
SELECT S.NAME "STU_NAME"
     , C.TOTAL
     , H.GRADE "CREDIT"
  FROM STUDENT S, SCORE C ,HAKJUM H
  WHERE S.STUDNO = C.STUDNO 
  AND C.TOTAL >= MIN_POINT 
  AND C.TOTAL <= MAX_POINT;

๐Ÿ“–LEFT (OUTER) JOIN

-- LEFT (OUTER) JOIN
SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S, PROFESSOR P
  WHERE S.PROFNO = P.PROFNO(+);
  -- (+)๋ฅผ ํ•˜๋ฉด NULL์ด ์ถœ๋ ฅ๋จ.

๐Ÿ“–LEFT (OUTER) JOIN

SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S, PROFESSOR P
  WHERE S.PROFNO = P.PROFNO(+);
  -- (+)๋ฅผ ํ•˜๋ฉด NULL์ด ์ถœ๋ ฅ๋จ.

๐Ÿ“–(INNER) JOIN = EQUI JOIN

-- (INNER) JOIN = EQUI JOIN
SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S, PROFESSOR P
  WHERE S.PROFNO = P.PROFNO;

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 6


์œ„ ์‚ฌ์ง„ ์ฒ˜๋Ÿผ ์ฟผ๋ฆฌ ์งœ๋ผ
(์ฐธ๊ณ  ์ฟผ๋ฆฌ)

SELECT NAME
  FROM STUDENT;  --20๊ฑด
  
SELECT NAME
  FROM PROFESSOR;  --16๊ฑด

๋‚ด๊ฐ€ ํ•œ ๋ฐฉ๋ฒ•(์„œ์น˜ํ•จ.)

SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S FULL JOIN PROFESSOR P
  ON S.PROFNO = P.PROFNO
  ORDER BY S.NAME ;

๊ต์ˆ˜๋‹˜ ๋ฐฉ๋ฒ•

SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S ,PROFESSOR P
  WHERE S.PROFNO = P.PROFNO(+)
 UNION
SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S ,PROFESSOR P
  WHERE S.PROFNO(+) = P.PROFNO;

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

SELECT S.NAME "STU_NAME"
     , P.NAME "PROF_NAME"
  FROM STUDENT S FULL OUTER JOIN PROFESSOR P
  ON S.PROFNO = P.PROFNO ;

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 7


SELECT * FROM EMP; ์ฐธ๊ณ ํ•˜์—ฌ ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ถœ๋ ฅํ•˜์‹œ์˜ค

-- SELF JOIN
SELECT A.EMPNO  "ENO"
     , A.ENAME "ENAME"
     , B.EMPNO "MGRNO"
     , B.ENAME "MGR_NAME"
  FROM EMP A ,EMP B
  WHERE A.MGR = B.EMPNO;

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 8

-- ANSI JOIN
SELECT NAME "STU_NAME"
     , DEPTNO1
     , DNAME "DEPT_NAME"
  FROM STUDENT A JOIN DEPARTMENT B 
  ON A.DEPTNO1 = B.DEPTNO;

-- Oravle Join
SELECT NAME "STU_NAME"
     , DEPTNO1
     , DNAME "DEPT_NAME"
  FROM  STUDENT A, DEPARTMENT B 
  WHERE A.DEPTNO1 = B.DEPTNO;

๐Ÿ“–์˜ˆ์ œ ๋ฌธ์ œ 9

SELECT A.NAME
     , B.POSITION
     , TO_CHAR(A.PAY,'999,999,999')"PAY"
     , TO_CHAR(B.S_PAY,'999,999,999')"Low PAY"
     , TO_CHAR(B.E_PAY,'999,999,999')"High PAY"
  FROM EMP2 A ,P_GRADE B 
  WHERE A.POSITION = B.POSITION;

0๊ฐœ์˜ ๋Œ“๊ธ€