Search
Duplicate

κ³„μΈ΅ν˜• 쿼리 CONNECT BY

κ³„μΈ΅ν˜• 쿼리

계측적인 데이터 κ΅¬μ‘°μ—μ„œ λΆ€λͺ¨-μžμ‹ 관계λ₯Ό κ°€μ§„ 데이터λ₯Ό κ²€μƒ‰ν•˜κ±°λ‚˜ μ‘°μž‘ν•˜λŠ” 쿼리
주둜 쑰직도, 트리 ꡬ쑰 데이터 등을 μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

문법

SELECT [ν‘œν˜„μ‹λ“€] FROM [ν…Œμ΄λΈ”λͺ…] START WITH [μ‹œμž‘ 쑰건] CONNECT BY [μž¬κ·€ 쑰건];
SQL
볡사
β€’
κΈ°λ³Έ ꡬ성 μš”μ†Œ
ꡬ문
μ„€λͺ…
SELECT [ν‘œν˜„μ‹λ“€]
μ‘°νšŒν•  열을 μ§€μ •ν•©λ‹ˆλ‹€. 계측 ꡬ쑰λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ μ—΄κ³Ό 좔가적인 열이 포함될 수 μžˆμŠ΅λ‹ˆλ‹€.
FROM [ν…Œμ΄λΈ”λͺ…]
κ³„μΈ΅ν˜• 쿼리λ₯Ό μˆ˜ν–‰ν•  λŒ€μƒ ν…Œμ΄λΈ”μ„ μ§€μ •ν•©λ‹ˆλ‹€.
START WITH [μ‹œμž‘ 쑰건]
계측 ꡬ쑰의 μ‹œμž‘μ μ„ μ •μ˜ν•©λ‹ˆλ‹€. μ§€μ •λœ 쑰건을 λ§Œμ‘±ν•˜λŠ” 행이 μ‹œμž‘μ μ΄ λ©λ‹ˆλ‹€.
CONNECT BY [μž¬κ·€ 쑰건]
μž¬κ·€μ μΈ 관계λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. μ§€μ •λœ 쑰건을 λ§Œμ‘±ν•˜λŠ” 행이 이전 ν–‰κ³Ό μ—°κ²°λ˜μ–΄ 계측 ꡬ쑰λ₯Ό ν˜•μ„±ν•©λ‹ˆλ‹€.
PRIOR
CONNECT BY 절과 ν•¨κ»˜ μ‚¬μš©λ˜λ©°, 이전 행을 μ˜λ―Έν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€. PRIOR μžμ‹ = λΆ€λͺ¨ (μ •λ°©ν–₯) : λΆ€λͺ¨ μžμ‹ PRIOR λΆ€λͺ¨ = μžμ‹ (μ—­λ°©ν–₯) : μžμ‹ λΆ€λͺ¨
β€’
CONNECT BY ν‚€μ›Œλ“œ
ν‚€μ›Œλ“œ 및 ν•¨μˆ˜
μ„€λͺ…
CONNECT BY
계측적 쿼리λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•œ ν‚€μ›Œλ“œλ‘œ, λΆ€λͺ¨-μžμ‹ κ°„μ˜ 관계λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
LEVEL
ν˜„μž¬ ν–‰μ˜ 계측 λ ˆλ²¨μ„ λ‚˜νƒ€λ‚΄λŠ” μ˜μ‚¬ μ—΄μž…λ‹ˆλ‹€.
CONNECT_BY_ROOT
계측 κ΅¬μ‘°μ—μ„œ μ΅œμƒμœ„ λΆ€λͺ¨λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ˜μ‚¬ μ—΄μž…λ‹ˆλ‹€.
CONNECT_BY_ISLEAF
ν˜„μž¬ 행이 리프(말단) λ…Έλ“œμΈμ§€ μ—¬λΆ€λ₯Ό νŒλ³„ν•˜λŠ” μ˜μ‚¬ μ—΄μž…λ‹ˆλ‹€.
SYS_CONNECT_BY_PATH
계측적 μΏΌλ¦¬μ—μ„œ ν–‰μ˜ 경둜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
NOCYCLE
μˆœν™˜(cycle)을 λ°©μ§€ν•˜κΈ° μœ„ν•œ μ˜΅μ…˜μž…λ‹ˆλ‹€.
CONNECT_BY_ISCYCLE
ν˜„μž¬ 행이 μˆœν™˜ ꡬ쑰에 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό νŒλ³„ν•˜λŠ” μ˜μ‚¬ μ—΄μž…λ‹ˆλ‹€.
ORDER BY SIBLINGS BY 컬럼
같은 LEVEL λ…Έλ“œ μ‚¬μ΄μ—μ„œ 정렬을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

κ³„μΈ΅ν˜• 쿼리둜 쑰직도λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ‹œ μ½”λ“œ

SELECT LEVEL , employee_id , first_name , last_name , job_id , manager_id FROM employees START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id;
SQL
볡사
β€’
START WITH manager_id IS NULL: μ΅œμƒμœ„ λΆ€μ„œμ˜ 직원듀을 μ„ νƒν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” μ΅œμƒμœ„ 직원이 λ§€λ‹ˆμ €κ°€ μ—†λŠ” μ§μ›λ“€μž…λ‹ˆλ‹€.
β€’
CONNECT BY PRIOR employee_id = manager_id: 각 행을 이전 ν–‰κ³Ό μ—°κ²°ν•©λ‹ˆλ‹€. 이전 ν–‰(PRIOR)의 employee_idκ°€ ν˜„μž¬ ν–‰μ˜ manager_id와 같은 경우, κ³„μΈ΅μ μœΌλ‘œ μ—°κ²°λ©λ‹ˆλ‹€.
β€’
LEVEL: 각 ν–‰μ˜ 계측 λ ˆλ²¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
β—¦
1 : λŒ€ν‘œ
β—¦
2 : λΆ€μ„œμž₯ (상사)
β—¦
3 : 직원 (λΆ€ν•˜)