์๋ธ์ฟผ๋ฆฌ๋?
subquery๋ SELECT,INSERT,UPDATE,DELETE๋ฌธ์ด๋ ๋ค๋ฅธ ํ์ ์ฟผ๋ฆฌ ๋ด๋ถ์ ์ค์ฒฉ๋ SELECT ์ฟผ๋ฆฌ
์์ด ํ์๋๋ ๋ชจ๋ ์์น์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋จ๋ ์ผ๋ก ์คํ์ด ๊ฐ๋ฅํ๋ค.
subquery
WITH
์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋ธ๋กํํด์ ์ฌ์ฉํ๊ธฐ
WITH tmp AS(
SELECT TO_CHAR(sDate,'YYYY')๋
๋,s.cNum,cName,SUM(bPrice*qty)๊ธ์ก,
RANK()OVER(PARTITION BY TO_CHAR(sDate,'YYYY')ORDER BY SUM(bPrice*qty)DESC)์์
FROM book b
JOIN dsale d ON b.bCode = d.bCode
JOIN sale s ON d.sNum = s.sNum
JOIN cus c ON s.cNum = c.cNum
GROUP BY TO_CHAR(sDate,'YYYY'),s.cNum,cName
)
SELECT ๋
๋,cNum,cName,๊ธ์ก FROM tmp WHERE ์์ = 1;
๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ
- ์๋ธ ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ ํ๋์ ํ๊ณผ ํ๋์ ๊ฐ์ ๋ฐํ ๋ฐ๋๋ค.
SELECT empNO,name,sal,sal-AVG(sal)OVER()์ฐจ์ด
FROM emp;
SELECT empNO,name,sal,sal-(SELECT AVG(sal)FROM emp)์ฐจ์ด
FROM emp;
--์๋ธ ์ฟผ๋ฆฌ ์ฌ์ฉ
๋ค์คํ ์๋ธ์ฟผ๋ฆฌ
- ์๋ธ ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ ๋๊ฐ ์ด์์ ๊ฐ์ ๋ฐํ ๋ฐ๋๋ค.
SELECT bCode,bName
FROM book
WHERE bCode IN(SELECT DISTINCT bCode FROM dsale);
ANY(some)
๋น๊ต ์กฐ๊ฑด์ด ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒ์ ๊ฒฐ๊ณผ์ ํ๋ ์ด์์ด ์ผ์นํ๋ฉด ์ฐธ์ธ ์ฐ์ฐ์
SELECT empNo,name,sal
FROM emp
WHERE sal>ANY(2000000,2500000,3000000);
EXISTS
๋น๊ต ์กฐ๊ฑด์ด ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์ค์์ ๋ง์กฑํ๋ ๊ฐ์ด ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ์ฐธ์ธ ์ฐ์ฐ์
SELECT * FROM book
WHERE EXISTS(SELECT * FROM dsale WHERE qty >= 10);
UPDATE
UPDATE JOIN VIEW ์ด์ฉํ์ฌ ๋น ๋ฅธ ์
๋ฐ์ดํธ(์๋ธ์ฟผ๋ฆฌ ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค.) ํ
์ด๋ธ์ ์กฐ์ธํ์ฌ UPDATE
tb_a ํ
์ด๋ธ์ ๋ด์ฉ(new_addr1, new_addr2)์ tb_b์ ์กด์ฌํ๋ ๋ด์ฉ(n_addr1, n_addr2)์ผ๋ก ์์ ์กฐ์ธ ์กฐ๊ฑด์ ์ปฌ๋ผ์ด UNIQUE ์์ฑ์ด์ด์ผ ๊ฐ๋ฅํ๋ฉฐ(๊ด๊ณ๊ฐ 1:1) ๊ทธ๋ ์ง ์์ผ๋ฉด ORA-01779 ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
CREATE TABLE tb_a (
num NUMBER PRIMARY KEY
,addr1 VARCHAR2(255)
,addr2 VARCHAR2(255)
,new_addr1 VARCHAR2(255)
,new_addr2 VARCHAR2(255)
); --ํ
์ด๋ธ a์์ฑ
CREATE TABLE tb_b (
num NUMBER PRIMARY KEY
,n_addr1 VARCHAR2(255)
,n_addr2 VARCHAR2(255)
);--ํ
์ด๋ธ b์์ฑ
INSERT INTO tb_a VALUES(1,'์์ธ1-1', '์์ธ1-2','๋๋ก1-1', '๋๋ก1-2');
INSERT INTO tb_a VALUES(2,'์์ธ2-1', '์์ธ2-2','๋๋ก2-1', '๋๋ก2-2');
INSERT INTO tb_a VALUES(3,'์์ธ3-1', '์์ธ3-2','๋๋ก3-1', '๋๋ก3-2');
INSERT INTO tb_a VALUES(4,'์์ธ4-1', '์์ธ4-2','๋๋ก4-1', '๋๋ก4-2');
INSERT INTO tb_a VALUES(5,'์์ธ5-1', '์์ธ5-2','๋๋ก5-1', '๋๋ก5-2');
INSERT INTO tb_b VALUES(1,'์ธ์ข
1-1', '์ธ์ข
1-2');
INSERT INTO tb_b VALUES(3,'์ธ์ข
3-1', '์ธ์ข
3-2');
INSERT INTO tb_b VALUES(5,'์ธ์ข
5-1', '์ธ์ข
5-2');
COMMIT;
--๋ฐ์ดํฐ ์ฝ์
SELECT a.new_addr1,a.new_addr2,b.n_addr1,b.n_addr2
FROM tb_a a, tb_b b
WHERE a.num = b.num;
--UPDATE ํ
์ด๋ธ๋ช
SET ์ปฌ๋ผ๋ช
= ๊ฐ, ์ปฌ๋ผ๋ช
= ๊ฐ WHERE ์กฐ๊ฑด;
UPDATE
(
SELECT a.new_addr1,a.new_addr2,b.n_addr1,b.n_addr2
FROM tb_a a, tb_b b
WHERE a.num = b.num
)
SET new_addr1 = n_addr1,new_addr2 = n_addr2;
'๐ป > ORACLE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ORACLE] 9์ผ์ฐจ : ๊ณ ๊ธ์ฟผ๋ฆฌ (1) | 2024.03.22 |
---|---|
[ORACLE] 9์ผ์ฐจ : ๋ทฐ ๋ฐ ์ํ์ค, ์๋ ธ๋ (0) | 2024.03.21 |
[ORACLE] 8์ผ์ฐจ : ์กฐ์ธ๊ณผ ์๋ธ ์ฟผ๋ฆฌ (0) | 2024.03.20 |
[ORACLE] 7์ผ์ฐจ : ํ ์ด๋ธ , ์ ์ฝ ์กฐ๊ฑด ๊ด๋ จ ์ฝ๋ ์ ๋ฆฌ (0) | 2024.03.20 |
[ORACLE] 7์ผ์ฐจ : ๋ฐ์ดํฐ ๋์ ๋๋ฆฌ์ ์ ์ฝ์กฐ๊ฑด - 2 (0) | 2024.03.20 |