์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ์ค๋ผํด
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- JavaScript
- ์๋ฐ
- ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ๋ฐ
- ์ํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊น๋ฏธ๊ฒฝ
- Python
- ๋ผํ๋ผ์ค์๋ง๋
- ์๋ฐ์คํฌ๋ฆฝํธ
- database
- ์ฝ๋ฉ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ๋ฐ์ํ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์ฑ
- K๋ฐฐํฐ๋ฆฌ
- css
- ComputerScience
- html
- Java
- ๊นํ๋จ
- ์ปดํจํฐ๊ณผํ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ์ฅํธ์์ค
- ๋ ์
- ํ์ด์ฌ
- Today
- Total
๋ชฉ๋กfull stack/database (20)
JiYoung Dev ๐ฅ
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/nD9vT/btsqKxFlKPx/dV8oIuRUaPAcLH7oPP1G51/img.png)
ํธํ๊ฒ ์ฌ์ฉํ๋ ค๋ฉด autoincrement ์ฌ์ฉํ๋ ํ์id ๊ฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์ปฌ๋ผ์ด ์๋ค๋ฉด ์ด๋ฅผ pk๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํจ db ์ค๊ณ์ ๊ณ ๋ คํ ์ 1. ๊ฐ๊ฐ ํ ์ด๋ธ์ pk๋ ์ ์ค์ ์ด ๋์ด ์๋๊ฐ? 2. ์ธ๋ํค ์ค์ ์ด ์ ๋์๋๊ฐ? ๊ผญ ์ธ๋ํค๋ ์ค์ ์ํด๋ ๋จ → ํ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ ๋ ๊ด๋ จ๋ ๋ฐ์ดํฐ ์ง์ฐ๊ณ ์ถ์ ๋, ํ์์ด ์์ด์ผ๋ง ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ ๋ ์ฌ์ฉ → ์ฐ๊ด๊ด๊ณ๋ ์ค์ ํ๋ ์ธ๋ํค ์ค์ ์ ์ํด๋ ๋จ 3. ๊ฐ๊ฐ์ ์์ฑ์ด ๊ผญ ํ์ํ ์์ฑ์ธ๊ฐ? 4. ์ฃผ์ํฐํฐ ๋จผ์ ํ๋ก๊ทธ๋จ ๊ตฌํ ํ ๋ฉ์ธ ์ํฐํฐ , ํ์ ์ํฐํฐ ์์ผ๋ก ๊ฐ๋ฐํ๋ฉด ํธํ๋ค.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b4B9zF/btsqCtRk58r/fLexAxfbVjV5JXS5X5aHd1/img.png)
ํ๋ก์์ SQL์ ์ ์ฐจ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ์ฌ ์ฌ์ฉํ๋ ๊ธฐ์ SQL์ ๋ํ์ ์ธ ๋น์ ์ฐจํ ์ธ์ด SET SERVEROUTPUT ON; SELECT * FROM TB_CUST; CREATE OR REPLACE PROCEDURE P_SOLD_OUT_YN_DEL AS v_cnt NUMBER := 0; BEGIN DBMS_OUTPUT.PUT_LINE(v_cnt); SELECT COUNT(*) INTO v_cnt FROM TB_CUST ; DBMS_OUTPUT.PUT_LINE(v_cnt); EXCEPTION WHEN OTHERS THEN NULL ; END ; / EXEC P_SOLD_OUT_YN_DEL; ๋ณ์ ์ ์ธ CREATE OR REPLACE PROCEDURE P_SOLD_OUT_YN_DEL AS v_cust_id..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bA0VUr/btsqKyploJz/wS95cCWJkflZzIvGLnUA1K/img.png)
๊ณ์ธต ์ฟผ๋ฆฌ ํ์ฉ์ ๋ฉ๋ด, ๊ฒ์ํ์ ๋๊ธ, ๋๋๊ธ์ ๋ง๋ค ์ ์์ ์์ ์ฟผ๋ฆฌ SELECT ๋ฉ๋ดID , ์์๋ฉ๋ดID , ๋ฉ๋ด์ด๋ฆ , LEVEL , LPAD(' ' , ( LEVEL -1 ) * 2 , ' ' ) || ๋ฉ๋ด์ด๋ฆ FROM ๋ฉ๋ด WHERE 1=1 -- WHERE ์กฐ๊ฑด์ด ์์ผ๋ฉด ๋ฐ๋ก ์์จ๋ ๋จ START WITH ์์๋ฉ๋ดID IS NULL CONNECT BY NOCYCLE ์์๋ฉ๋ดID = PRIOR ๋ฉ๋ดID ORDER SIBLINGS BY ๋ฉ๋ดID ; ์ ํ ์กฐ์ธ(SELF JOIN) SELECT * FROM ๋ฉ๋ด A, ๋ฉ๋ด B WHERE A.์์๋ฉ๋ดID = B.๋ฉ๋ดID; -- ์ ํ์กฐ์ธ (๊ณ์ธต ์ฟผ๋ฆฌ๊ฐ ์๋ ์์ ์ ๊ณ์ธต์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉ) ๋๋๊ธ ๊ตฌํ SELECT ๋๊ธID , ์์๊ธ , ์์ฑ๊ธ , C..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/IiqUq/btsqKitoHUL/NSqYusKNqPaKf3SLUeopM0/img.png)
FULL SCAN ์ธ๋ฑ์ค ์ธ๋ฑ์ค ์์ฑ CREATE INDEX IDX_PRD ON TB_PRD ( PRD_TYPE ) ; ์ธ๋ฑ์ค ์ฌ์ฉ ๋ชฉ์ : ์กฐํ ์ฑ๋ฅ ํฅ์ ๋์ DML ์ฑ๋ฅ์ด ๊ฐ์ํจ ์ธ๋ฑ์ค ํ์ฉ : NL์กฐ์ธ (Nested Loop / ์ค์ฒฉ์กฐ์ธ) ์ธ๋ฑ์ค์ ํจ๊ป ์ฌ์ฉํ์ ๋ ํจ์จ์ด ๋์์ง ํน์ง PRIMARY KEY ์์ฑ ==> ์์ด์ ๊ทธ PK์ ๋ํ ์ธ๋ฑ์ค ํ๋ ์์ฑ๋จ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ง์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ผ ํจ
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dOt6fP/btsqJsppdlH/NoTdCGsgfekY5DP8nfx6ik/img.png)
SELECT PRD_ID , PRD_NAME , PRD_AMT , DENSE_RANK() OVER (ORDER BY PRD_AMT DESC) AS ๊ฐ๊ฒฉ๋์์ FROM TB_PRD; ์๋์ฐํจ์ : ํ ์ด๋ธ์ ํ๊ณผ ํ๊ฐ์ ๊ด๊ณ๋ฅผ ์ด์ฉํด์ ์๋ฏธ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฝ๋๋ค. RANK : ์ค๋ณต๋ ์์ ๋ค์ ์ซ์ ๊ฑด๋๋ DENSE_RANK : ์ค๋ณต๋ ์์ ๋ค์ ์ซ์ ๊ฑด๋๋ฐ์ง ์์ ROW_NUMBER : ๊ณ ์ ํ ์ซ์ ์คํ์์ ์ธ๋ผ์ธ๋ทฐ๋ฅผ ์ด์ฉํด์ ์กฐ๊ฑด ๋ถ์ฌ ๊ฐ๋ฅ SELECT * FROM ( SELECT PRD_ID , PRD_NAME , PRD_AMT , DENSE_RANK() OVER (ORDER BY PRD_AMT DESC) AS ๊ฐ๊ฒฉ๋์์ FROM TB_PRD ) WHERE ๊ฐ๊ฒฉ๋์์
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/basGKM/btsqBp741SK/5ABHWKAD2tjSfGPtONfkd0/img.png)
UNION : ์ค๋ณต ์ ๊ฑฐ UNION ALL : ์ค๋ณต ํฌํจ ํน์ง1. ์ปฌ๋ผ์ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ ๋ฐ๋ผ๊ฐ๋ค. SELECT ์๋งค๋ฒํธ, ๋ฎค์ง์ปฌ์ด๋ฆ, ๋ฎค์ง์ปฌ๊ฐ๊ฒฉ FROM ๋ฎค์ง์ปฌ์๋งค๋ด์ญ UNION ALL SELECT ์๋งค๋ฒํธ, ์ฝ์ํธ์ด๋ฆ, ์ฝ์ํธ๊ฐ๊ฒฉ FROM ์ฝ์ํธ์๋งค๋ด์ญ UNION ALL SELECT ์๋งค๋ฒํธ, ๊ทน์ด๋ฆ, ๊ทน๊ฐ๊ฒฉ FROM ๊ทน์ฅ์๋งค๋ด์ญ ; ํน์ง 2. ์ปฌ๋ผ์ ๊ฐ์์ ์๋ฃํ์ด ์ผ์นํด์ผ ํจ! ์ง์ ๋ฌธ์ํ์ด๋ NULL๊ฐ์ ์ง์ ํ์ฌ ํด๋น ์ปฌ๋ผ์ ์ฌ์ฉํ ์ ์๋ค. oracle ๋ฒ์ ์ ๋ฐ๋ฅธ ์ฐจ์ด ์ค๋ณต์ ๊ฑฐ + ์ ๋ ฌ = union ์ค๋ณต x + ์ ๋ ฌ x = union all (๊ณต๊ณต๊ธฐ๊ด ๋ฑ์์ ๊ฐ์ฅ ๋ง์ด ์ฐ๋ ๋ฒ์ ) union = ์ค๋ณต union all = ์ค๋ณตx ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ด๋ ์๋ชป ์ ๊ทธ๋ ์ด๋ํ๋ค๊ฐ ๊ธฐ์กด๊ฒ ์๋์ํ ์ ์์
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bsBhaB/btsqBwF84uv/PNK726qMPJkd1ox3aLv300/img.png)
๋ฐฑ์ ํ ์ด๋ธ ์์ฑ CTAS : CREATE TABLE AS SELECT(CTAS) SELECT ๋ฌธ์ ๊ฒฐ๊ณผ๋ก๋ถํฐ ์ ํ ์ด๋ธ์ ์์ฑํ๋ค. CREATE TABLE TB_CUST_BAK AS SELECT * FROM TB_CUST; --๋ฐ์ดํฐ์ ์๋ฃํ๊น์ง ํ๋ฒ์ ๋ค์ด๊ฐ(PK, FK ๋ณต์ฌ๋ ๋ถ๊ฐ) CREATE TABLE TB_CUST_BAK AS SELECT * FROM TB_CUST WHERE 1=0; -- TB_CUST์ ๋๊ฐ์ ํํ์ ํ ์ด๋ธ ์์ฑ (๋ฐ์ดํฐ X)
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bFfpST/btsqtaxqcl7/ycrhim21LK4GV7wfsb602K/img.png)
-- MERGE MERGE INTO TB_CUST_TEL USING DUAL ON ( CUST_ID = 'C0007' AND TEL_DVCD = 'ํด๋ํฐ') WHEN MATCHED THEN UPDATE SET TEL_NO = '010-7777-7777' WHEN NOT MATCHED THEN INSERT (CUST_ID, TEL_DVCD, TEL_NO) VALUES ('C0007', 'ํด๋ํฐ', '010-7777-7777'); SELECT * FROM TB_CUST_TEL;
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ZovKN/btsqvke6Bmr/JHOg55ZhDEGn5E7vKvcd60/img.png)
์กฐ์ธ ๋ฌธ๋ฒ -- ์กฐ์ธ์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ SELECT A.CUST_ID , A.CUST_NAME , A.SCORE , B.GRADE_NAME FROM TB_CUST A , TB_GRADE B WHERE A.SCORE BETWEEN B.STS_SCORE AND B.END_SCORE; ์๋ธ์ฟผ๋ฆฌ ๋ฌธ๋ฒ -- ์๋ธ ์ฟผ๋ฆฌ๋ก ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ SELECT A.CUST_ID , A.CUST_NAME , A.SCORE , ( SELECT GRADE_NAME FROM TB_GRADE WHERE A.SCORE BETWEEN STS_SCORE AND END_SCORE) AS GRADE_NAME FROM TB_CUST A; DECODE ๋ฌธ๋ฒ -- DECODE๋ก ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ SELECT A.CUST_ID , A.CUST_NAME ,..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/DzsHz/btsqtXJNEUU/vKbkr2FCKGFjPJ7S0IE8d0/img.png)
EXISTS ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ๋ ์ฌ์ฉ ๋ํ์ ์ธ ์๊ด์๋ธ์ฟผ๋ฆฌ ์๋ธ์ฟผ๋ฆฌ : ์ฟผ๋ฆฌ ์์ ๋ค์ด์๋ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ์๊ด์๋ธ์ฟผ๋ฆฌ : ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์ปฌ๋ผ์ ์ฌ์ฉํ ๋ ์คํ์์ = ๋ฉ์ธ์ฟผ๋ฆฌ๋ถํฐ ์คํ ๋น์๊ด์๋ธ์ฟผ๋ฆฌ : ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์ปฌ๋ผ์ ์ฌ์ฉํ์ง ์์ ๋ ์คํ์์ = ์๋ธ์ฟผ๋ฆฌ๋ถํฐ EXISTS ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ; ์ฑ๋ฅ NOT EXISTS : ์กด์ฌํ์ง ์๋ ์กฐ๊ฑด์ ์ฐพ๋ ๋ฌธ๋ฒ