TIL 23.09.04

ν™©μ€ν•˜Β·2023λ…„ 9μ›” 4일
0

TIL

λͺ©λ‘ 보기
72/146

πŸ“ŒToday I Learned

였라클

ex24_pseudo

μ˜μ‚¬ 컬럼, Pseudo Column

  • μ‹€μ œ 컬럼이 μ•„λ‹Œλ° 컬럼처럼 ν–‰λ™ν•˜λŠ” 객체

rownum

  • ν–‰λ²ˆν˜Έ

  • μ‹œν€€μŠ€ 객체 상관X

  • ν˜„μž¬ ν…Œμ΄λΈ”μ˜ ν–‰λ²ˆν˜Έλ₯Ό κ°€μ Έμ˜€λŠ” μ—­ν• 

  • ν…Œμ΄λΈ”μ— μ €μž₯된 값이 μ•„λ‹ˆλΌ, select μ‹€ν–‰ μ‹œ λ™μ μœΌλ‘œ κ³„μ‚°λ˜μ–΄ λ§Œλ“€μ–΄μ§„λ‹€.(μ€‘μš”)

  • from절이 싀행될 λ•Œ 각 λ ˆμ½”λ“œμ— rownum을 ν• λ‹Ήν•œλ‹€.(맀우 μ€‘μš”)

  • where절이 싀행될 λ•Œ 상황에 따라 rownum이 μž¬κ³„μ‚°λœλ‹€.(맀우 μ€‘μš”) > fromμ ˆμ—μ„œ λ§Œλ“€μ–΄μ§„ rownum은 where절이 싀행될 λ•Œ 변경될 수 μžˆλ‹€.

  • rownum이 1이 ν¬ν•¨λ˜κ³ , μŒ“μ΄λŠ” ν˜•νƒœκ°€ μ•„λ‹ˆλ©΄ μ‚¬μš©ν•  수 μ—†λ‹€.

  • λ‚΄κ°€ μ›ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μ •λ ¬ ν›„ > rownum을 ν• λ‹Ήν•˜λŠ” 방법 > μ„œλΈŒμΏΌλ¦¬ μ‚¬μš©(μ€‘μš”)

  1. λ‚΄κ°€ μ›ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μ •λ ¬
  2. 1을 μ„œλΈŒμΏΌλ¦¬λ‘œ λ¬ΆλŠ”λ‹€. + rownum(rnum)
  3. 2λ₯Ό μ„œλΈŒμΏΌλ¦¬λ‘œ λ¬ΆλŠ”λ‹€. + rownum(λΆˆν•„μš”) + rnum (μ‚¬μš©***)

νŽ˜μ΄μ§• > λ‚˜λˆ μ„œ 보기 > ν•œ λ²ˆμ— 20λͺ…μ”© 보기 + μ΄λ¦„μˆœμœΌλ‘œ μ •λ ¬(κ³΅μ‹μ²˜λŸΌ 써)

SELECT * FROM tbladdressbook;	-- 2,000 건

-- 1.
SELECT * FROM tbladdressbook ORDER BY name ASC;

-- 2. 이 λ•Œμ˜ rownum이 ν•„μš”ν•œλ‹€.
SELECT a.*, rownum FROM (
	SELECT *
	FROM tbladdressbook 
	ORDER BY name ASC) a;

-- 3. rownum을 쑰건 μ‚¬μš© > ν•œ 번 더 μ„œλΈŒμΏΌλ¦¬
SELECT * FROM (SELECT a.*, rownum FROM (
	SELECT *
	FROM tbladdressbook 
	ORDER BY name ASC) a);

κ°€μž₯ λ°”κΉ₯μͺ½ μ„œλΈŒμΏΌλ¦¬λŠ” 뷰둜 λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

ex25_transaction

νŠΈλžœμž­μ…˜, Transaction

  • 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” μ—…λ¬΄μ˜ 물리적(μ‹œκ°„μ ) λ‹¨μœ„(ν–‰λ™μ˜ λ²”μœ„)
  • 1개 μ΄μƒμ˜ λͺ…λ Ήμ–΄λ₯Ό λ¬Άμ–΄ 놓은 λ‹¨μœ„

νŠΈλžœμž­μ…˜ κ΄€λ ¨ λͺ…λ Ήμ–΄, DCL(TCL)

  1. COMMIT
  2. ROLLBACK
  3. SAVEPOINT

μš°λ¦¬κ°€ ν•˜λŠ” 행동 > μ‹œκ°„μˆœμœΌλ‘œ κΈ°μ–΅(μ€‘μš”)

둜그인 직후(접속) > νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λ¨
νŠΈλžœμž­μ…˜ > λͺ¨λ“  λͺ…λ Ήμ–΄ (X) > INSERT, UPDATE, DELETE λͺ…λ Ήμ–΄λ§Œ νŠΈλžœμž­μ…˜μ— ν¬ν•¨λœλ‹€.
INSERT, UPDATE, DELETE μž‘μ—… > 였라클 적용(x), μž„μ‹œ λ©”λͺ¨λ¦¬ 적용(o)

μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘ν•˜λŠ” μ‹œμ 

  1. ν΄λΌμ΄μ–ΈνŠΈ 접속 직후
  2. commit μ‹€ν–‰ 직후
  3. rollback μ‹€ν–‰ 직후

ν˜„μž¬ νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ˜λŠ” μ‹œμ 

  1. commit > ν˜„μž¬ νŠΈλžœμž­μ…˜μ„ DB에 반영
  2. rollback > ν˜„μž¬ νŠΈλžœμž­μ…˜μ„ μ’…λ£Œ + DB에 반영
  3. ν΄λΌμ΄μ–ΈνŠΈ 접속 μ’…λ£Œ
    a. 정상 μ’…λ£Œ
    - ν˜„μž¬ νŠΈλžœμž­μ…˜μ— 아직 반영이 μ•ˆλœ λͺ…λ Ήμ–΄κ°€ λ‚¨μ•„μžˆλŠ”λ° > μ–΄λ–»κ²Œ? 질문
    b. 비정상 μ’…λ£Œ
    - λ©”λͺ¨λ¦¬ 상(νŠΈλžœμž­μ…˜)의 λͺ¨λ“  μž‘μ—…μ΄ 반영이 λ λ§Œν•œ ν‹ˆμ΄ 없이 κ°•μ œ μ’…λ£Œ
    - rollback
  4. DDL μ‹€ν–‰
    • CREATE, ALTER, DROP > μ‹€ν–‰ > μ¦‰μ‹œ commit μ‹€ν–‰
    • DDL 성격 > ꡬ쑰 λ³€κ²½ > 데이터 영ν–₯ 끼침 > 사전에 미리 μ €μž₯(commit)

ex26_hierarchical

rownum

  • 였라클 μ „μš©
  • MS-SQL(top n)
  • MySQL(limit n, m)

κ³„μΈ΅ν˜• 쿼리, Hierarchical Query

  • 였라클 μ „μš© 쿼리
  • λ ˆμ½”λ“œμ˜ 관계가 μ„œλ‘œκ°„μ— μƒν•˜ 수직 ꡬ쑰인 κ²½μš°μ— μ‚¬μš©
  • 자기 μ°Έμ‘°λ₯Ό ν•˜λŠ” ν…Œμ΄λΈ”μ—μ„œ μ‚¬μš© > μ…€ν”„ 쑰인
  • μžλ°”μ˜ 트리ꡬ쑰

κ³„μΈ΅ν˜• 쿼리

  1. start with 절 + connect by 절
  2. κ³„μΈ΅ν˜• μΏΌλ¦¬μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•œ μ˜μ‚¬ μ»¬λŸΌλ“€
    a. prior: μžκΈ°μ™€ μ—°κ΄€λœ λΆ€λͺ¨ λ ˆμ½”λ“œλ₯Ό μ°Έμ‘°
    b. level: μ„ΈλŒ€μˆ˜(depth, generation)

prior: λΆ€λͺ¨ λ ˆμ½”λ“œ μ°Έμ‘° > 직속 상사
connect_by_root: μ΅œμƒμœ„ λ ˆμ½”λ“œ μ°Έμ‘° > 홍사μž₯
connect_by_isleaf: 말단 λ…Έλ“œ

κ³„μΈ΅ν˜• μΏΌλ¦¬μ—μ„œμ˜ μ •λ ¬ - order siblings by

join ν•˜κΈ°

  • depth κ³ μ • > ν…Œμ΄λΈ” λ”°λ‘œ 생성
  • depth λ―Έκ³ μ • > 자기 μ°Έμ‘°

ex27_rank

μˆœμœ„ ν•¨μˆ˜

  • rownum > 기반으둜 λ§Œλ“€μ–΄μ§„ ν•¨μˆ˜
  1. rank() over(order by 컬럼λͺ… [asc|desc])
  2. dense_rank() over(order by 컬럼λͺ… [asc|desc])
  3. row_number() over(order by 컬럼λͺ… [asc|desc])

μˆœμœ„ ν•¨μˆ˜ + order by
μˆœμœ„ ν•¨μˆ˜ + partition by + order by > μˆœμœ„ ν•¨μˆ˜ + group by > 그룹별 μˆœμœ„ κ΅¬ν•˜κΈ°

ex28_with

/*
	[WITH <Sub Query>]
    SELECT column_list
    FROM table_name
    [WHERE search_condition]
    [GROUP BY group_by_expression]
    [HAVING search_condition]
    [ORDER BY order_expression [ASC|DESC]]
    
    
    from 절 μ„œλΈŒμΏΌλ¦¬ > 이름 μ—†λŠ” ν…Œμ΄λΈ” > 1회용 ν…Œμ΄λΈ”
    from ν…Œμ΄λΈ” > 이름 μžˆλŠ” ν…Œμ΄λΈ” > N회용 ν…Œμ΄λΈ”
    
    with 절
    - 인라인뷰(from 절 μ„œλΈŒμΏΌλ¦¬)에 이름을 λΆ™μ΄λŠ” 기술
    
    with μž„μ‹œν…Œμ΄λΈ”λͺ… as (μ„œλΈŒ 쿼리)
    select λ¬Έ
*/

SELECT * FROM (SELECT name, buseo, jikwi FROM tblinsa WHERE city = 'μ„œμšΈ');

WITH seoul AS (SELECT name, buseo, jikwi FROM tblinsa WHERE city = 'μ„œμšΈ')
SELECT * FROM seoul; -- 미리 μœ„λ‘œ μ˜¬λ €μ„œ 이름을 지어둔 것. 가독성 ν–₯상

null ν•¨μˆ˜

null value
null을 μΉ˜ν™˜ν•˜λŠ” ν•¨μˆ˜

  1. nvl(컬럼, κ°’)
  2. nvl2(컬럼, κ°’, κ°’)
SELECT 
	name, nvl2(population, '인ꡬ수O', '인ꡬ수X')  -- 값이 있으면 인ꡬ수O, null이면 인ꡬ수X
FROM tblcountry;
profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€