μλ νμΈμ yunamom μ λλ€ :D
2023λ 6μ 10μΌμ μΉλ€μ§ μ 49ν SQLD μν 1κ³Όλͺ©, 2κ³Όλͺ© μ λ΅μ ν¬μ€ν νκ² μ΅λλ€. π©π»π»
*λ¬Έμ μμλ λ€λ₯Ό μ μμΌλ©° λ΅ μ체λ₯Ό μ μ΄λκ±°λ λ¬Έμ λ§ μ μ κ²½μ°λ μμ΅λλ€.
SQLD 49ν 1κ³Όλͺ© ( κ°κ΄μ 9λ¬Έμ / λ¨λ΅ν 1λ¬Έμ )
β λ¬Έμ 1. μλμ μ κ·ν κ²°κ³Όμ μλ§μ μ κ·νλ?
μ λ΅: 2μ°¨ μ κ·ν
ν΄μ€: μλ³μ 컬λΌκ°μ μ’ μμ± ν΄κ²°
β λ¬Έμ 2. μμ±μ΄ κ°μ§ μ μλ λ°μ΄ν° κ°μ λ²μλ₯Ό 무μμ΄λΌ νλκ°?
μ λ΅: λλ©μΈ
β λ¬Έμ 3. μ£Όμλ³μλ₯Ό ꡬμ±νλ μμ±μμ νλλ§μ΄λΌλ μ κ±°λλ©΄ μ μΌμ±μ λ§μ‘±νμ§ λͺ»νλ νΉμ±μ 무μμΈκ°?
μ λ΅: μ΅μμ±
β λ¬Έμ 4. λ€μ 보기 μ€ μλ ERDμ λν μ€λͺ μΌλ‘ λ°λ₯΄μ§ μμ κ²μ?
μ λ΅: 3λ² νλμ μνμ νμ μ£Όλ¬Έμ κ°μ§λ€
ν΄μ€: νλμ μνμ μ£Όλ¬Έμ κ°μ§μλ or κ°μ§μ§ μμμλ μλ€. ( O = or )
#π‘μμλκΈ°
ERD μ€μ (Identifying) / μ μ (Non-Identifying) μ μ°¨μ΄
1. μ€μ ( μλ³κ΄κ³ )
- λΆλͺ¨ν
μ΄λΈμ PKκ° μΈλν€λ‘μ¨, μμν
μ΄λΈμ PKμ ν¬ν¨μ΄ λλ κ²½μ°
- λΆλͺ¨, μμ κ΄κ³
2. μ μ ( λΉμλ³κ΄κ³ )
- λΆλͺ¨ν
μ΄λΈμ PKκ° μΈλν€λ‘μ¨, μμν
μ΄λΈμ PKκ° μλ *μΌλ°μμ±* μ΄ λλ κ²½μ°
- λΆλͺ¨, μμ κ΄κ³κ° μλ λͺ¨λ κ²½μ°λ₯Ό νμν¨
β λ¬Έμ 5. λλ©μΈμ νΉμ§μ΄ μλ κ² ?
μ λ΅: FK μ μ½ μ‘°κ±΄
β λ¬Έμ 6. μλ³μ κ΄κ³ νλ¦° μ μ§ κ³ λ₯΄λ λ¬Έμ
μ λ΅: 4λ². μλ³μκ΄κ³λ μμμ μ£Όμλ³μκ° λΆλͺ¨λ‘λΆν° λ 립λμ΄μκ³ , λΉμλ³μ κ΄κ³λ μμμ μ£Όμλ³μκ° λΆλͺ¨μκ² μ’ μλμ΄μλ€.
β λ¬Έμ 7. 보기μ ν΄λΉνλ μμ±μ κ³ λ₯΄μμ€.
μ
무μ νμν λ°μ΄ν° μ΄μΈμ λ°μ΄ν° λͺ¨λΈλ§μ μν΄ μ
무λ₯Ό κ·μΉννκΈ° μν μμ±μ μλ‘ λ§λ€κ±°λ
λ³ννμ¬ μ μνλ μμ±μ 무μμΈκ°?
μ λ΅: μ€κ³ μμ±
β λ¬Έμ 8. μλμ μ€λͺ μΌλ‘ μλ§μ κ²μ?
λ κ° μ΄μμ λΆλͺ¨ μν°ν°λ‘ λΆν° λ°μλκ³ μμ£Ό λ΄μ©μ΄ λ°λκ±°λ λ°μ΄ν°λμ΄ μ¦κ°λλ€.
λΆμμ΄κΈ° λ¨κ³μμλ μ λνλμ§ μμΌλ©° μμΈ μ€κ³ λ¨κ³λ νλ‘μΈμ€μ μκ΄λͺ¨λΈλ§μ μ§ννλ©΄μ λμΆλ μ μλ€.
μ λ΅: νμ μν°ν°
β λ¬Έμ 9. μλμ μλ³μ λΆλ₯μ λν μ€λͺ μΌλ‘ μ μ ν κ²μ?
μ λ΅: μ£Όλ―Όλ±λ‘λ²νΈ
β λ¨λ΅ν 1. λ κ°μ μν°ν°κ° κ΄κ³μμ μ°Έμ¬μμ μλ₯Ό νννλ κ²μ 무μμ΄λΌ νλκ°?
μ λ΅: κ΄κ³μ°¨μ ( Cardinality )
SQLD 49ν 2κ³Όλͺ© ( κ°κ΄μ 35λ¬Έμ / λ¨λ΅ν 5λ¬Έμ )
β λ¬Έμ 10. PLAYER ν μ΄λΈμμ μ μλͺ κ³Ό νλͺ μ μ€λ¦μ°¨μ, μ°λ΄μ λ΄λ¦Όμ°¨μμΌλ‘ μ‘°ννλ SQL λ‘ λ°λ₯Έκ²μ? (2λ²)
1) SELECT μ μλͺ
, νλͺ
, μ°λ΄ FROM ORDER BY μ μλͺ
DESC, νλͺ
DESC, μ°λ΄ ASC 2) SELECT μ μλͺ , νλͺ , μ°λ΄ FROM ORDER BY μ μλͺ ASC, νλͺ , 3 DESC 3) SELECT μ μλͺ , νλͺ , μ°λ΄ FROM ORDER BY μ μλͺ ASC, νλͺ ASC, μ°λ΄ 4) SELECT μ μλͺ , νλͺ , μ°λ΄ FROM ORDER BY μ μλͺ , νλͺ , DESC μ°λ΄ |
ν΄μ€: μ μλͺ ASC(μ€λ¦μ°¨μ),νλͺ (default μ€λ¦μ°¨μ), 3 DESC(3λ²μ§Έ μ΄ λ΄λ¦Όμ°¨μ)
β λ¬Έμ 11. SQL μ λΆλ₯λ‘ μ μ νμ§ μμ κ²μ?
μ λ΅: DML = RENAME
β λ¬Έμ 12. COMMITμ νκΈ° μ DMLμ λν μ€λͺ μΌλ‘ μ μ νμ§ μμ κ²μ?
μ λ΅: λ€λ₯Έ μ μ κ° λ°μ΄ν°λ₯Ό μμ ν μ μλ€.
β λ¬Έμ 13. μλμ ν μ΄λΈμμ μλ°©ν₯μΌλ‘ κ³μΈ΅ν 쿼리λ₯Ό ꡬμ±ν λ μ¬λ°λ₯Έ κ²μ?
μ λ΅: CONNECT BY PRIOR EMP_NO = MAAGER_NO
ν΄μ€: PRIOR μμ = λΆλͺ¨ ννλ₯Ό μ¬μ©νλ©΄ κ³μΈ΅ ꡬ쑰μ λΆλͺ¨ λ°μ΄ν°μμ μμ λ°μ΄ν°(λΆλͺ¨ -> μμ) λ°©ν₯μΌλ‘ μ κ°νλ μλ°©ν₯ μ κ°λ₯Ό ν¨.
# π‘μμλκΈ°
CONNECT BY PRIOR μμ = λΆλͺ¨ (λΆλͺ¨ → μμ) (μ ↓ λ°©ν₯)
CONNECT BY PRIOR λΆλͺ¨ = μμ (μμ → λΆλͺ¨) (μ ↑ λ°©ν₯)
CONNECT BY μμ = PRIOR λΆλͺ¨ (μμ → λΆλͺ¨) (μ ↑ λ°©ν₯)
CONNECT BY λΆλͺ¨ = PRIOR μμ (λΆλͺ¨ → μμ) (μ ↓ λ°©ν₯)
β λ¬Έμ 14. ORACLE DBMS μμ μλμ NULL μ²λ¦¬ ν¨μμ λν μ€λͺ μΌλ‘ μ¬λ°λ₯Έ κ²μ?
[보기]
A : 컬λΌκ°μ΄ NULLμ΄λ©΄ Bλ₯Ό μΆλ ₯
B : λκ°μ μ»¬λΌ κ°μ΄ κ°μΌλ©΄ NULL
C : NULLμ΄ λμ¬ λ κΉμ§
μ λ΅: NVL / NULLIF / COALESCE
β λ¬Έμ 15. λ€μ μ€ μλ SQLμ μ€νκ²°κ³Όλ‘ κ°μ₯ μ μ ν κ²μ? (λ Έλμ΄ 2κ³Όλͺ© 55λ²)
[TBL]
ID
---
100
100
200
200
200
999
999
[SQL]
SELECT ID FROM TBL
GROUP BY ID
HAVING COUNT(*) = 2
ORDER BY (CASE WHEN ID = 999 THEN 0 ELSE ID END)
1) 2)
ID ID
--- ---
100 999
999 100
3) 4)
ID ID
--- ---
100 999
200 200
999 100
μ λ΅: 2λ² 999, 100 μμλ‘ λμ€λ SQL κ²°κ³Ό
(CASE WHEN ID = 999 THEN 0 ELS ID END) μ λ΅ 999(첫λ²μ§Έν), 100(λλ²μ§Έν)
β λ¬Έμ 16. μλμ ν μ΄λΈμμ μ€λ₯κ° λ°μνλ SQLμ κ³ λ₯΄μμ€.
[TEAM]
ID COL1
---------
1 A
2 B
3 C
4 D
[STADIUM]
ID COL2
----------
1 A
2 B
1) SELECT * FROM TEAM A INNER JOIN STADIUM B ON A.ID = B.ID
2) SELECT * FROM TEAM A INNER JOIN STADIUM B USING(ID)
3) SELECT * FROM TEAM A NATURAL JOIN STADIUM B
4) SELECT * FROM TEAM A INNER JOIN STADIUM B ON (ID)
μ λ΅: 4λ² SELECT ... FROM A INNER JOIN B ON (STUDENT_ID)
ν΄μ€: Error : ORA-00920: invalid relational operator
ONμ μ λκ°μ 컬λΌμ‘°κ±΄μ΄ μ¬μ©λμ΄μΌ ν¨.
β λ¬Έμ 17. μλμ ν μ΄λΈμμ μ¬μμ΄ λ§€λμ μ°λ΄μ΄ 3000 μ΄νμΈ κ²°κ³Όλ₯Ό μ°Ύλ SQLμ΄ μλ κ²μ?
μ λ΅: NOT EXISTS (SELECT 'X' FROM ... WHERE A.MGR_NO = B.EMP_NO WHERE ... > 3000)
ν΄μ€: NULLμ΄ ν¬ν¨λ κ²½μ° NULLμ΄ μΆλ ₯λλ 쑰건μ NOT EXISTSλ₯Ό ꡬλΆνλ λ¬Έμ
β λ¬Έμ 18. μλμ SQL μ λν κ²°κ³Όλ‘ μ¬λ°λ₯Έκ²μ κ³ λ₯΄μμ€.
[SQL]
SELECT ...
FROM ...
WHERE (A, B) IN (SELECT A, B FROM ...)
μ λ΅: Bμ κ°μ€ νλκ° NULL μΈ κ²°κ³Ό
ν΄μ€: NOT IN μ κ²½μ° NULL μ΄ μμ λ 0 ROWS λ‘ μ²λ¦¬λ¨
β λ¬Έμ 19. μλμ SQLκ²°κ³Όλ₯Ό μΆλ ₯νλ SQLμ μμ±νμμ€. ( μ§κ³ κ΄λ ¨ λ¬Έμ )
- ROLLUPκ³Ό κ°μ ꡬ쑰μ΄λ μ€μ μ 체 ν©μ΄ μ‘΄μ¬νμ§ μλ νν
- GROUPING SET μΌλ‘ ꡬμ±λκ±°λ ROLLUP μ΄ λΆλΆμ μΌλ‘ μ¬μ©
- λ¬Έμ 보기 μ€ GROUPING SET (νμλ²νΈ, (νμλ²νΈ,μν), ()) μ΄λ° ννμΌ κ²½μ°
() μ΄ λΆλΆμΌλ‘ μ 체 ν©μ΄ λμΆλ¨
μ λ΅: GROUP BY νμλ²νΈ, ROLLUP (μν)
β λ¬Έμ 20. μλμ SQL κ²°κ³Όλ₯Ό μΆλ ₯νλ SQLμ μμ±νμμ€. (ROLLUP 컬λΌμ μμ λ¬Έμ )
[SQL]
μ€κ° 컬λΌμΌλ‘λ§ GROUP BY κ° νλ², κ·Έ μ΄νλ μμλλ‘ μ²«λ²μ§Έ, μΈλ²μ§Έ 컬λΌμ΄ λμ€λ νν
μ λ΅: ROLLUP (κ³ κ°λ±κΈ, 첫λ²μ§Έμ»¬λΌ, μΈλ²μ§Έμ»¬λΌ)
β λ¬Έμ 21. μλμ SQLμ λν κ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ? (HAVING μ μ 쑰건μ λ§μ‘±νμ§ μμ λμ λ¬Έμ )
[SQL]
SELECT COUNT(*)
FROM ...
WHERE ...
GROUP BY ID
HAVING COUNT(*) > 3
μ λ΅: 1λ² ( λ§μ‘±νλ κ²°κ³Όκ° μμΌλ―λ‘ "λ°μ΄ν°κ° μΆλ ₯λμ§ μλλ€." )
ν΄μ€: μ§κ³ κ²°κ³Όμ€ HAVING μ λ§μ‘±νμ§ λͺ»νλ―λ‘ 0 ROWS λ₯Ό λ°ννλ€.
β λ¬Έμ 22. (μ£Όλ¬Έλ²νΈ, νμλ²νΈ, μ£Όλ¬ΈκΈμ‘) ν μ΄λΈμ λ°μ΄ν°μ λν SQL κ²°κ³Όκ° μλμ κ°μ λ μ¬λ°λ₯Έ SQLμ?
[κ²°κ³Ό]
νμλ²νΈ μ΄μ£Όλ¬ΈκΈμ‘
----------------
12345 500000
μ λ΅: SELECT ... FROM (SELECT ... FROM ... ORDER BY ... DESC) WHERE ROWNUM = 1
ν΄μ€: μ΄ μ£Όλ¬Έ κΈμ‘μ΄ κ°μ₯ ν° 1κ±΄μ΄ λμ€λ, ROWNUM=1 κ³Ό ORDER BY λ₯Ό μ΄λ»κ² μ¨μΌ νλμ§μ λν λ¬Έμ
INLINE VIEW μμ ORDER BY κ²°κ³Όκ° λμ€κ³ λ©μΈμΏΌλ¦¬μμ ROWNUM = 1 μ΄ μλνλ©΄ μμ κ²°κ³Όκ° λμ΄.
β λ¬Έμ 23. μλμ ν μ΄λΈ (μ£Όλ¬Έλ²νΈ, νμλ²νΈ, μ£Όλ¬ΈκΈμ‘) μμ μ°λ΄μ μμμ λ°λ₯Έ μΆλ ₯κ²°κ³Όκ° λ€μκ³Ό κ°μ λ SQLμ μμ±νμμ€.
[κ²°κ³Ό]
X 100 0
Y 200 100
X 300 200
μ λ΅: LAG(COL1, 1, 0)
ν΄μ€: LAG, LEAD (μ΄μ κ°, λ€μκ°) λ₯Ό 묻λ λ¬Έμ
맨μμ 0μ΄ μμΌλ―λ‘ LAGλ₯Ό μμ±ν λ LAG(COL1, 1, 0) μ΄λ κ² λ°μ΄ν°κ° μμ κ²½μ° κ°μ Έμ€λ κ°μ λͺ μν΄μΌν¨.
#π‘μμλκΈ°
LAG(expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause)
LEAD(expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause)
LAG ν¨μ : μ΄μ νμ κ°μ 리ν΄
LEAD ν¨μ : λ€μ νμ κ°μ 리ν΄
expr : λμ 컬λΌλͺ
offset : κ°μ κ°μ Έμ¬ νμ μμΉ κΈ°λ³Έκ°μ 1, μλ΅κ°λ₯
default : κ°μ΄ μμ κ²½μ° κΈ°λ³Έκ°, μλ΅κ°λ₯
partition_by_clause : κ·Έλ£Ή 컬λΌλͺ
, μλ΅κ°λ₯
order_by_clause : μ λ ¬ 컬λΌλͺ
, νμ
β λ¬Έμ 24. λ€μ μ€ μλμ κ°μ ν μ΄λΈμμ SQLμ μ€νν λ κ²°κ³Όλ‘ κ°μ₯ μ μ ν κ²μ? (λ Έλμ΄ 113λ²)
[SQL]
SELECT κ³ κ°λ²νΈ, κ³ κ°λͺ
, 맀μΆμ‘,
,RANK() OVER(ORDER BY 맀μΆμ‘ DESC) AS μμ
FROM (
SELECT A.κ³ κ°λ²νΈ
,MAX(A.κ³ κ°λͺ
) AS κ³ κ°λͺ
,SUM(B.맀μΆμ‘) AS 맀μΆμ‘
FROM κ³ κ° A INNER JOIN μλ³λ§€μΆ B
ON (A.κ³ κ°λ²νΈ = B.κ³ κ°λ²νΈ)
GROUP BY A.κ³ κ°λ²νΈ
)
ORDER BY μμ;
1) 2)
κ³ κ°λ²νΈ κ³ κ°λͺ
맀μΆμ‘ μμ κ³ κ°λ²νΈ κ³ κ°λͺ
맀μΆμ‘ μμ
--------------------- ---------------------
005 μ΄κ·ν 700 1 005 μ΄κ·ν 700 1
004 μ΄μν 700 1 004 μ΄μν 700 2
002 μ΄μμ 550 3 002 μ΄μμ 550 3
001 νκΈΈλ 350 4 001 νκΈΈλ 350 4
003 κ°κ°μ°¬ 350 4 003 κ°κ°μ°¬ 350 5
3) 4)
κ³ κ°λ²νΈ κ³ κ°λͺ
맀μΆμ‘ μμ κ³ κ°λ²νΈ κ³ κ°λͺ
맀μΆμ‘ μμ
--------------------- ---------------------
005 μ΄κ·ν 700 1 003 κ°κ°μ°¬ 350 1
004 μ΄μν 700 1 001 νκΈΈλ 350 1
002 μ΄μμ 550 2 002 μ΄μμ 550 2
001 νκΈΈλ 350 3 004 μ΄μν 700 3
003 κ°κ°μ°¬ 350 3 005 μ΄κ·ν 700 3
μ λ΅: 1λ²
ν΄μ€: RANK ν¨μλ ORDER BY λ₯Ό ν¬ν¨ν 쿼리문μμ νΉμ νλͺ©μ λν μμλ₯Ό ꡬνλ ν¨μμ΄λ©° λμΌν κ°μλ λμΌν μμλ₯Ό λΆμ¬ν¨.
β λ¬Έμ 25. μλμ SQL κ²°κ³Όλ‘ μ¬λ°λ₯Έκ²μ κ³ λ₯΄μμ€.
[κ²°κ³Ό]
1
1
2
μ λ΅: DENSE_RANK() ...
ν΄μ€: μ λ ¬ μμμ λ°λ₯Έ λνΉμ΄ λμΌ λ±μ νμ©, μ°μλ λ±μκ° λμ€λ DENSE_RANK
β λ¬Έμ 26. μλμ μꡬμ¬νμ λ§μ‘±νλ SQLμ μμ±νμμ€.
...λΆμλ μ¬μμ΄ μμ κ²½μ° μ¬μμλ₯Ό 0μΌλ‘ νμνλ€.
[SQL]
SELECT ...
FROM EMP A ( ) JOIN DEPT B ...
μ λ΅: RIGHT OUTERν΄μ€: OUTER JOIN μμ LEFT / RIGHT ꡬλΆμ 묻λ λ¬Έμ
β λ¬Έμ 27. λ€μ μ€ B_Userκ° μλμ μμ μ μνν μ μλλ‘ κΆνμ λΆμ¬νλ DCLλ‘ κ°μ₯ μ μ ν κ²μ?
(λ Έλμ΄ 2κ³Όλͺ© 120λ²)
UPDATE A_User.TB_A
SET col1='AAA'
WHERE col2=3
1) GRANT SELECT, UPDATE TO B_User; 2) REVOKE SELECT ON A_User.TB_A FROM B_User; 3) DENY UPDATE ON A_User.TB_A TO B_User; 4) GRANT SELECT, UPDATE ON A_User.TB_A TO B_User; |
μ λ΅: 4λ² GRANT SELECT, UPDATE ON A_User.TB A TO B_User;
ν΄μ€: WHERE 쑰건μ λ°μ΄ν°λ₯Ό μ°ΎκΈ° μν SELECT κΆν λ° λ°μ΄ν° λ³κ²½μ μν UPDATE κΆνμ΄ νμ.
GRANT(κΆνλΆμ¬), REVOKE(κΆννμ)
DCL(Data Control Language) λ°μ΄ν° μ μ΄μ΄ μ μν¨.
β λ¬Έμ 28. μλ SQL μν ν ν μ΄λΈ Xμ λν SELECT κΆνμ κ°μ§κ³ μλ μ μ λ?
[SQL]
DBA : ... GRANT U1
DBA : ... GRANT U2 WITH GRANT OPTION
U2 : ... GRANT U3 ...
DBA : ... REVOKE U2 RESTRICT
μ λ΅: DBA, U1, U2, U3
ν΄μ€: REVOKE λμ USERμκ² κΆνμ λΆμ¬λ°μ μ μ κ° μλ€λ©΄ REVOKE κ° μ€ν¨νκ² λ¨.
μ’ λ₯ | μ€λͺ |
WITH GRANT OPTION | μμ μ΄ λΆμ¬λ°μ κΆνμμ λ€λ₯Έ μ¬μ©μμκ² κΆν λΆμ¬ κ°λ₯, κΆνμ νμν κ²½μ° μ°μμ μΌλ‘ κΆνμ΄ νμλλ€. |
CASCADE | κΆνμ κ±° λͺ λ Ήμ΄ λ‘ λΆμ¬λ κΆν νΈλ¦¬λ₯Ό λͺ¨λ μ κ±°νλ€. |
RESTRICT | κΆνμ κ±° λͺ λ Ήμ΄ λ‘ μ§μ ν κΆνμ μ κ±° ν κ²½μ° ν μ¬μ©μμκ² μν₯μ΄ κ°λ©΄ μ€ν¨ νλλ‘ μ²λ¦¬νλ λͺ λ Ήμ΄ |
β λ¬Έμ 29. μλμ SQLμ λν΄μ μλ¬κ° λμ§ μλκ²μ?
[SQL]
CREATE TABLE T1 (
A number default 9 primary key,
B number not null,
C number
);
[보기]
1) INSERT INTO T1 VALUES (7,1)
2) ...
3) ...
4) INSERT INTO T1 (B, C) VALUES (9,1)
μ λ΅: INSERT INTO T1 (B, C) VALUES (9, 1)
ν΄μ€: DEFAULTλ μ무 κ°μ μ λ ₯νμ§ μμλ κΈ°λ³Έ κ°μΌλ‘ μ€μ ν κ°μ΄ μλμΌλ‘ μ λ ₯λλ μ μ½μ‘°κ±΄μΌλ‘ NOT NULLκ³Ό λ§μ°¬κ°μ§λ‘ λ§μ΄ μ¬μ©λλ€.
A κ° DEFAULT 9 μ κ°μ§κ³ μμΌλ―λ‘ λ³΄κΈ° 4λ²μ 쿼리λ μ μμ μΌλ‘ μλλλ€.
#π‘μμλκΈ°
μ€λΌν΄ DEFAULT μ μ½μ‘°κ±΄ μΆκ°
[컬λΌλͺ
] [νμ
] DEFAULT [κΈ°λ³Έκ°]
πν
μ΄λΈ μμ±ν λ μ μΈ
CREATE TABLE T1(
A NUMBER DEFAULT 9
);
πν
μ΄λΈ μμ± ν μ μ½μ‘°κ±΄ μΆκ°ν λ
ALTER TABLE T1 MODIFY A DEFAULT 9
πDEFAULT μ μ½μ‘°κ±΄ μμ
ALTER TABLE T1 MODIFY A DEFAULT NULL
#μμ μ DEFAULT κΈ°λ³Έκ°μ NULLλ‘ μμ±νλ μ΄μ λ μ΅μ΄ ν
μ΄λΈ μ½μ
μ κ°μ΄ μμ λ NULLμ΄ λ€μ΄κ°κΈ° λλ¬Έμ΄λ€.
β λ¬Έμ 30. μλμ SQLκ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ?
INSERT ... 1
INSERT ... 2
SAVEPOINT X
UPDATE ...
DELETE ...
ROLLBACK X
INSERT ... 3
[SQL]
SELECT AVG(COL1) FROM ...
μ λ΅: 2
ν΄μ€: (1+2+3)/3 = 2
β λ¬Έμ 31. TABLEμ λν μ€λͺ μΌλ‘ μ μ νμ§ μμ κ²μ?
μ λ΅: PK (μ€λ³΅μ νμ©νλ NULLμ νμ©νμ§ μλλ€.)ν΄μ€: PK(Primary Key / κΈ°λ³Έ ν€) λ μλμ κ°μ νΉμ§μ κ°λλ€.- κ°μ΄ μ€λ³΅λμ§ μλλ€.- κ°μ λ°λμ μ λ ₯ν΄μΌ νλ€.- ν μ΄λΈ λ°μ΄ν°μ κ³ μ μΈμλ²νΈ μ΄λ€. (ν μ΄λΈλΉ νλμ κΈ°λ³Έν€λ§ μ§μ )
β λ¬Έμ 32. μλμ SQLμ λν κ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ? ( WINDOWS FUNCTION 3κ°μ λν λ¬Έμ )
[TABLE_32]
COL1 COL2 COL3
----------------
100 100 100
200 100 100
300 200 100
400 100 100
500 300 100
600 400 100
700 200 100
[SQL]
SELECT MAX(COL1) OVER(ORDER BY COL1 ROWS
BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING) AS MAX,
SUM(COL2) OVER(ORDER BY COL1 ROWS
BETWEEN 1PRECEDING AND CURRENT ROW) AS SUM,
FIRST_VALUE(COL1) OVER(ORDER BY COL1 RANGE
BETWEEN 200 PRECEDING AND 200 FOLLOWING) AS FIRST
FROM TABLE_32;
μ λ΅:
[RESULT]
MAX SUM FIRST
-----------------
300 100 100
400 200 100
500 300 100
600 300 200
700 400 300
700 700 400
700 600 500
ν΄μ€:
------------------------------
start_pointμ end_pointμ ꡬμ±
------------------------------
- start_pointλ end_pointμ κ°κ±°λ μμ κ°μ΄ λ€μ΄κ°
- Defaultκ°μ RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
- UNBOUNDED PRECEDING : start_point λ§ λ€μ΄κ° μ μμΌλ©°, νν°μ μ first row
- UNBOUNDED FOLLOWING : end_pointλ§ λ€μ΄κ° μ μμΌλ©°, νν°μ μ last row
- CURRENT ROW : start, end_point λλ€ κ°λ₯. μλμ°λ CUREENT ROWμμ start νκ±°λ end ν¨
- value_expr PRECEDING
> CURRENT ROW μ μ 물리μ /λ Όλ¦¬μ OFFSET, μμλ ννμ(EXPRESSION)μ΄ λ€μ΄κ°λ©° μμμ.
> RANGEμ μ¬μ©μ, DATE 컬λΌμ λν INTERVAL LITERALμΌ μ μμ
- value_expr FOLLOWING
> CURRENT ROW νμ 물리μ /λ Όλ¦¬μ OFFSET, value_expr PRECEDING μ μ±κ²© λμΌν¨
β
>> MAX : νν°μ (μ 체 λ‘μ°μ 첫λ²μ§Έ ν) μ΄ μμμ μ΄λ©° 2 FOLLOWING μ κΈ°μ€μ νμ¬ λ‘μ°μμ μμλ¨.
μ¦, κ° νμ λ€μ 2κ°μ΄κΉμ§κ° λμ μ΄ λ¨.
>> SUM : μμμ μ νμ¬ λ‘μ°μ 1λ²μ§Έ μ ν λΆν° λμ μ νμ¬ λ‘μ°λ‘ SUM μ΄ λ¨
>> FIRST_VALUE : μμμ μ νμ¬ λ‘μ°μ λ²μ κΈ°μ€μΌλ‘ 200 λ¨μ μ (500 μ΄λ©΄ 300λΆν°) λΆν° λμ μ νμ¬ λ‘μ°μ λ²μ κΈ°μ€μΌλ‘ 200 λ¨μ ν (500μ΄λ©΄ 700κΉμ§) μ λ²μμμ 첫λ²μ§Έ κ°
β λ¬Έμ 33. μλμ ν μ΄λΈκ³Ό λ°μ΄ν°μ λν SQLκ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ?
[TAB1]
COL1 COL2
-----------
1 A
1 A
1 B
1 B
SELECT COUNT(COL1), COUNT(COL2)
FROM (
SELECT DISTINCT COL1, COL2
FROM TAB1
)
μ λ΅: 2, 2
β λ¬Έμ 34. μλμ SQLμ λν μ€λͺ μΌλ‘ κ°μ₯ μ μ ν κ²μ? ( NULLμ΄ μμλ AVGμ COUNTκ° μ΄λ»κ² λλμ§ λ¬»λ λ¬Έμ )
[SQL]
SELECT SUM(C2) / COUNT(*) AVG1,
SUM(C2) / COUNT(C2) AVG2,
AVG(C2) AVG3
μ λ΅: AVG2μ AVG3κ° κ°λ€. (NULLμ΄ μμΌλ©΄ λΉ μ§κ³ νκ· )
β λ¬Έμ 35. μλμ ν μ΄λΈμ΄ μμ λ SQL κ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ? ( CROSS JOINλ μ΄ν κ²°κ³Όμμ μ‘°μΈλ ν μ΄λΈ RULL μ¬μ© )
[TAB1]
ID NAME
--------
1 SMITH
2 ALICE
3 SCOTT
4 ...
[TAB2]
ID RULE
--------
1 S%
2 %T%
[SQL]
SELECT * FROM TAB1 A, TAB2 B
WHERE A.NAME LIKE B.RULE;
μ λ΅:
ID NAME ID RULE
------------------------
1 SMITH 1 S%
3 SCOTT 1 S%
1 SMITH 2 %T%
3 SCOTT 2 %T%
ν΄μ€: RULE 컬λΌμ λ΄μ©μ΄ λ€μ΄κ° LIKE μ μμ± -> CROSS JOINν LIKEμ 체ν¬
β λ¬Έμ 36. μλμ λ°μ΄ν°μ λν SQL κ²°κ³Όκ° λ€λ₯Έ κ²μ?
1) SELECT COUNT(DISTINCT COL1)
2) SELECT DISTINCT COUNT(*)
3) SELECT * FROM ... GROUP BY ...
4) ...
μ λ΅: 2
β λ¬Έμ 37. μλμ SQLκ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ?
[SQL]
SELECT SUBSTR('123456789', -4, 2) FROM DUAL
μ λ΅: 67
ν΄μ€: SUBSTR('λ¬Έμμ΄', μμμμΉ, κΈΈμ΄)
-4 (λ€μμ 4λ²μ§Έ μ리μ λΆν°), 2μ리 κΉμ§ μ΄λ―λ‘ 67 (λ€μμ λΆν° λ¬Έμμ΄μ μλ₯Όλ μμμμΉμ λ§μ΄λμ€ κ°μ μ λ ₯ν΄μ€)
*λ€μμλΆν° λ¬Έμμ΄μ μλ₯Ό λλ μμμμΉμ μμ(-) κ°μ μ
λ ₯
SUBSTR('λ¬Έμμ΄', μμμμΉ, κΈΈμ΄)
SUBSTR('123456789', 2): λ¬Έμμ΄μ λ λ²μ§Έ μμΉ(2)λΆν° λ¬Έμμ΄ λκΉμ§ (κ²°κ³Ό: 23456789)
SUBSTR('123456789', 2, 3): λ¬Έμμ΄μ λ λ²μ§Έ μμΉ(2)λΆν° μΈ μ리(4)κΉμ§ (κ²°κ³Ό: 234)
SUBSTR('123456789', -5): λ¬Έμμ΄μ λ€μμ λ λ²μ§Έ μμΉ(5)λΆν° λ¬Έμμ΄ λκΉμ§ (κ²°κ³Ό: 56789)
SUBSTR('123456789', -5, 3): λ¬Έμμ΄μ λ€μμ λ λ²μ§Έ μμΉ(8)λΆν° λ¬Έμμ΄ λκΉμ§ (κ²°κ³Ό: 567)
β λ¬Έμ 38. μλμ SQLκ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ? ( LENGTH κ²°κ³Ό μ°Ύλ λ¬Έμ )
[SQL]
SELECT LENGTH('SQL EXPERT') FROM DUAL
μ λ΅: 10
β λ¬Έμ 39. μλμ μꡬμ¬νμ λ§λ SQLλ‘ μ μ ν κ²μ? ( μꡬμ¬νμ λ§μΆ SQL μμ± )
[μꡬμ¬ν]
λ±κΈμ F λλ G μ΄λ©°, λ²μλ 2000 ~ 50000 μ¬μ΄ ...
μ λ΅: AND (COL1 = F OR COL1 = G) AND ...
β λ¬Έμ 40. μλμ λ°μ΄ν°μ λν SQLκ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ? (NULL μ΄ μμ λ μ€λΌν΄μμ μ λ ¬λλ μμ)
[TABLE40]
COL1
-----
NULL
NULL
1
2
3
[SQL]
SELECT * FROM TABLE40 ORDER BY COL1 ASC;
μ λ΅: μ€λΌν΄ NULLμ κ°μ₯ ν°κ°μΌλ‘ μΈμλλ―λ‘ ASCλ‘ μ λ ¬ν κ²½μ° λ§¨ λ§μ§λ§μ λμ€κ² λλ€.
COL1
-----
1
2
3
NULL
NULL
SELECT * FROM TABLE40 ORDER BY COL1 DESC;
#DESC μΌκ²½μ° μλμ κ°μ κ²°κ³Όκ° λμ΄.
COL1
-----
NULL
NULL
3
2
1
β λ¬Έμ 41. SQL μ§ν© μ°μ°μμμ κ΅μ§ν©μ ν΄λΉνλ κ²μ?
μ λ΅: INTERSECT
β λ¬Έμ 42. μλμ SQLμ λν μ€λͺ μΌλ‘ κ°μ₯ μ μ ν κ²μ? (λΆμλ³ μ°λ΄μ΄ μ μΌ λμ μ¬λ μ°Ύλ λ΄μ©)
β λ¬Έμ 43. μλμ SQLꡬ문μ λν κ²°κ³Όλ‘ μλ§μ κ²μ? (MERGE INTO ꡬ문μ λν μ€λͺ )
[TABLE_43_1]
ID COL1
--------
1 A
2 B
[TABLE_43_2]
ID COL2
---------
1 C
2 D
3 E
4 F
[SQL]
MERGE INTO TABLE_43_1
USING TABLE_43_2
ON ...
MATCH ... UPDATE
NOT MATCH INSERT
β λ¬Έμ 44. μλμ κ°μ SQLλ¬Έμ λν΄ μ½μ μ΄ μ±κ³΅νλ SQL λ¬Έμ? ( λ Έλμ΄ 2κ³Όλͺ© 20λ² )
CREATE TABLE TBL (
ID NUMBER PRIMARY KEY,
AMT NUMBER NOT NULL,
DEGREE VARCHAR2(1)
)
κ°. INSERT INTO TBL VALUES(1, 100)
λ. INSERT INTO TBL(ID, AMT, DEGREE) VALUES(2, 200, 'AB')
λ€. INSERT INTO TBL(ID, DEGREE) VALUES(4, 'X')
λΌ. INSERT INTO TBL(ID, AMT) VALUES(3, 300)
λ§. INSERT INTO TBL VALUES(5, 500, NULL)
1) κ°, λ 2) λ, λ€ 3) λ€, λΌ 4) λΌ, λ§ |
μ λ΅: 4λ² λΌ, λ§
ν΄μ€: κ° - μ½μ 컬λΌμ λͺ μνμ§ μμμ κ²½μ° λͺ¨λ 컬λΌμ μ½μ ν΄μΌ ν¨λ - DEGREE 컬λΌμ κΈΈμ΄λ VARCHAR2(1) μ΄λ€. 'AB'λ μ»¬λΌ κΈΈμ΄λ₯Ό μ΄κ³Όν¨λ€ - NOT NULL 컬λΌμΈ AMT 컬λΌμ λͺ μνμ§ μμμ
β λ¨λ΅ν 2. λ€λ₯Έ ν μ΄λΈμμ νμλ ν μ΄λΈλ‘, 물리μ λ°μ΄ν°κ° μ μ₯λλ κ²μ΄ μλ λ Όλ¦¬μ μΌλ‘ μ‘΄μ¬νλκ²μ 무μμ΄λΌ νλκ°?
μ λ΅: VIEW (λ·°)
β λ¨λ΅ν 3. μλμ SQL κ²°κ³Όλ₯Ό μμ±νμμ€.
COUNT(*) , HAVING > 2 μ΄λ©° GROUP BY κ΄λ ¨λ 쿼리
[TAB1]
ID COL1
-----------
A 1
A 2
B 3
B 4
C 5
C 6
C 7
D 8
[SQL]
SELECT COUNT(*)
FROM TAB1
GROUP BY ID
HAVING COUNT(*) > 2;
μ λ΅: 3
ν΄μ€: ID, COUNT(*) κ²°κ³Όλ₯Ό HAVING 쑰건μ 체ν¬ν μ΅μ’ κ²°κ³Όλ '3'
SQL> SELECT COUNT(*) FROM TAB1 GROUP BY ID HAVING COUNT(*) > 2;
COUNT(*)
----------
3
β λ¨λ΅ν 4. μλμ SQLκ²°κ³Όκ° λμ¬ μ μλλ‘ λΉμΉΈμ μ±μ°μμ€.
SELECT ...
FROM ...
WHERE COL ...
OR COL ( )
μ λ΅: IS NULL
β λ¨λ΅ν 5. μλμ SQL κ²°κ³Όμ λ§λ SQL μ μμ±νμμ€.
[κ²°κ³Ό]
ROLLUP μ κ΄λ ¨λ λ¬Έμ
μ λ΅: ROLLUP
β λ¨λ΅ν 6. NTILE(3) μ κ²°κ³Όλ₯Ό μ±μλ£μΌμμ€. ( μ΄ 7건μ λ‘μ° )
[κ²°κ³Ό]
NT COUNT(*)
( γ± ) ( γ΄ )
2 2
3 2
μ λ΅: γ±: 1 / γ΄: 3
μΆμ² : λ°μ΄ν° μ λ¬Έκ° ν¬λΌ 'μμΌλ£¨' λ μΈ νμλλ€π¨π»π»π©π»π»
'ITμκ²©μ¦ κ³΅λΆ > SQLD μμ볡μ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[SQLD] 2023λ SQLD 51ν κΈ°μΆλ³΅μ (1κ³Όλͺ©/2κ³Όλͺ©) (10) | 2023.11.18 |
---|---|
[SQLD] 2023λ SQLD 50ν κΈ°μΆλ³΅μ (1κ³Όλͺ©/2κ³Όλͺ©) (7) | 2023.09.09 |
[SQLD] 2023λ SQLD 48ν ( 1κ³Όλͺ©/2κ³Όλͺ© μ λ΅ ) (6) | 2023.03.20 |
[SQLD] 47ν SQLD ( 1κ³Όλͺ©/2κ³Όλͺ© μ λ΅ ) (4) | 2022.11.07 |
[SQLD] 46ν SQLD ( 1κ³Όλͺ©/2κ³Όλͺ© μ λ΅ ) (3) | 2022.09.05 |