TIL 23.08.31

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

TIL

λͺ©λ‘ 보기
69/146

πŸ“ŒToday I Learned

였라클

ex18_having

[WITH ]
SELECT column_list
FROM table_name
[WHERE search_condition][GROUP BY group_by_expression]
[HAVING search_condition]ORDER BY order_expression [ASC|DESC]]

select 컬럼리슀트 5. 컬럼 지정(보고싢은 컬럼만 κ°€μ Έμ˜€κΈ°)
from ν…Œμ΄λΈ” ----- 1. ν…Œμ΄λΈ” 지정
where 쑰건 ------ 2. 쑰건 지정(λ ˆμ½”λ“œμ— λŒ€ν•œ 쑰건 - 개인 쑰건)
group by κΈ°μ€€ --- 3. (λ ˆμ½”λ“œλΌλ¦¬) 그룹을 λ‚˜λˆˆλ‹€.
having 쑰건 ------ 4. 쑰건 지정(그룹에 λŒ€ν•œ 쑰건)
order by μ •λ ¬κΈ°μ€€; 6. μˆœμ„œλŒ€λ‘œ

SELECT
	buseo,
	round(avg(basicpay))
FROM								-- 1. 60λͺ…
	tblinsa
GROUP BY							-- 2. 60λͺ… > κ·Έλ£Ή
	buseo
HAVING avg(basicpay) >= 1500000;	-- 3. 집합에 λŒ€ν•œ 쑰건 > 집계 ν•¨μˆ˜ 쑰건

rollup()

  • group by의 집계 κ²°κ³Όλ₯Ό μ’€ 더 μžμ„Έν•˜κ²Œ λ°˜ν™˜
  • 그룹별 쀑간 톡계

cube()

  • group by의 집계 κ²°κ³Όλ₯Ό μ’€ 더 μžμ„Έν•˜κ²Œ λ°˜ν™˜
  • 그룹별 쀑간 톡계

rollup > 닀쀑 κ·Έλ£Ή 컬럼 > μˆ˜μ§κ΄€κ³„(전체 인원 총계, λΆ€μ„œλ³„ 총계)
cube > 닀쀑 κ·Έλ£Ή 컬럼 > μˆ˜ν‰κ΄€κ³„(전체 인원 총계, λΆ€μ„œλ³„ 총계, μ§μœ„λ³„ 총계)

ex19_subquery

SQL

  1. Main Query, 일반 쿼리
  • ν•˜λ‚˜μ˜ λ¬Έμž₯ μ•ˆμ— ν•˜λ‚˜μ˜ select(insert, update, delete)둜 λ˜μ–΄ μžˆλŠ” 쿼리
  1. Sub Query, μ„œλΈŒ 쿼리, 뢀속 질의
  • ν•˜λ‚˜μ˜ λ¬Έμž₯ μ•ˆμ— (select, insert, update, delete) 또 λ‹€λ₯Έ λ¬Έμž₯(select)이 λ“€μ–΄μžˆλŠ” 쿼리
  • ν•˜λ‚˜μ˜ select μ•ˆμ— 또 λ‹€λ₯Έ select문이 λ“€μ–΄μžˆλŠ” 쿼리
  • μ‚½μž… μœ„μΉ˜ > select절, from절, where절, group by절, having절, order by절
  • 컬럼(κ°’)을 넣을 수 μžˆλŠ” μž₯μ†Œλ©΄ μ„œλΈŒμΏΌλ¦¬κ°€ λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

μ„œλΈŒμΏΌλ¦¬ λ¨Όμ € λ§Œλ“€κ³  메인 쿼리 λ§Œλ“€λ©΄ 쉽닀.

μ„œλΈŒμΏΌλ¦¬ μ‚½μž… μœ„μΉ˜

  1. 쑰건절 > λΉ„κ΅κ°’μœΌλ‘œ μ‚¬μš©
    a. λ°˜ν™˜κ°’μ΄ 1ν–‰ 1μ—΄ > 단일값 λ°˜ν™˜ > μƒμˆ˜ μ·¨κΈ‰ > κ°’ 1개 > ex) λͺΈλ¬΄κ²Œκ°€ κ°€μž₯ 많이 λ‚˜κ°€λŠ” μ‚¬λžŒμ˜ 이름?
    b. λ°˜ν™˜κ°’μ΄ nν–‰ 1μ—΄ > 닀쀑값 λ°˜ν™˜ > μ—΄κ±°ν˜• 비ꡐ > in μ‚¬μš© (μ€‘μš”) > ex) κΈ‰μ—¬κ°€ 260λ§Œμ› 이상 λ°›λŠ” 직원이 κ·Όλ¬΄ν•˜λŠ” λΆ€μ„œμ˜ 직원 λͺ…단을 κ°€μ Έμ˜€μ‹œμ˜€.
    c. λ°˜ν™˜κ°’μ΄ 1ν–‰ nμ—΄ > 닀쀑값 λ°˜ν™˜ > κ·Έλ£Ή 비ꡐ > N컬럼:N컬럼 (μ€‘μš”) > ex) '홍길동'κ³Ό 같은 지역, 같은 λΆ€μ„œμΈ 직원 λͺ…단을 κ°€μ Έμ˜€μ‹œμ˜€. (μ„œμšΈ, κΈ°νšλΆ€)
    d. λ°˜ν™˜κ°’μ΄ nν–‰ nμ—΄ > 닀쀑값 λ°˜ν™˜ > 2 + 3 > in + κ·Έλ£Ή 비ꡐ > ex) κΈ‰μ—¬κ°€ 260λ§Œμ› 이상 λ°›λŠ” 직원과 같은 λΆ€μ„œ, 같은 지역 > 직원 λͺ…단

  2. 컬럼리슀트 > 좜λ ₯κ°’μœΌλ‘œ μ‚¬μš©

    • λ°˜λ“œμ‹œ 결과값이 1ν–‰ 1열이어야 ν•œλ‹€. > 슀칼라 쿼리 > μ›μžκ°’ λ°˜ν™˜
      a. 정적 쿼리 > λͺ¨λ“  행에 λ™μΌν•œ 값을 λ°˜ν™˜
      b. 상관 μ„œλΈŒ 쿼리(***) > μ„œλΈŒμΏΌλ¦¬μ˜ κ°’κ³Ό λ°”κΉ₯μͺ½ λ©”μΈμΏΌλ¦¬μ˜ 값을 μ„œλ‘œ μ—°κ²°
  3. fromμ ˆμ—μ„œ μ‚¬μš©

    • μ„œλΈŒμΏΌλ¦¬μ˜ κ²°κ³Ό ν…Œμ΄λΈ”μ„ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ΄λΌκ³  μƒκ°ν•˜κ³  메인 쿼리λ₯Ό μ‹€ν–‰
    • 인라인 λ·°(Inline View)

ORA-00904: "SSN": invalid identifier -> λ°˜λ“œμ‹œ 별칭 뢙이기
인라인뷰의 컬럼 별칭 > λ°”κΉ₯μͺ½ 메인 μΏΌλ¦¬μ—μ„œ κ·ΈλŒ€λ‘œ 전달 + μ‚¬μš©

-- tblComedian. λͺΈλ¬΄κ²Œκ°€ κ°€μž₯ 많이 λ‚˜κ°€λŠ” μ‚¬λžŒμ˜ 이름?
SELECT
	*
FROM
	tblcomedian
WHERE
	weight = (
	SELECT
		max(weight)
	FROM
		tblcomedian);

-- κΈ‰μ—¬κ°€ 260λ§Œμ› 이상 λ°›λŠ” 직원이 κ·Όλ¬΄ν•˜λŠ” λΆ€μ„œμ˜ 직원 λͺ…단을 κ°€μ Έμ˜€μ‹œμ˜€.
SELECT
	*
FROM
	tblinsa
WHERE
	buseo IN (
	SELECT
		buseo
	FROM
		tblinsa
	WHERE
		basicpay >= 2600000);

-- '홍길동'κ³Ό 같은 지역, 같은 λΆ€μ„œμΈ 직원 λͺ…단을 κ°€μ Έμ˜€μ‹œμ˜€. (μ„œμšΈ, κΈ°νšλΆ€)
SELECT
	*
FROM
	tblinsa
WHERE (city, buseo) = (SELECT city, buseo FROM tblinsa WHERE name = '홍길동');

-- κΈ‰μ—¬κ°€ 260λ§Œμ› 이상 λ°›λŠ” 직원과 같은 λΆ€μ„œ, 같은 지역 > 직원 λͺ…단
SELECT
	*
FROM
	tblinsa
WHERE (buseo, city) in (SELECT buseo, city FROM tblinsa where basicpay >= 2600000);


ex20_join

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ΄ μ§€μ–‘ν•˜λŠ” 것듀

  • ν…Œμ΄λΈ” λ‹€μ‹œ μˆ˜μ •ν•΄μ•Ό κ³ μ³μ§€λŠ” 것듀 > ꡬ쑰적인 문제.
    1. ν…Œμ΄λΈ”μ— κΈ°λ³Έν‚€κ°€ μ—†λŠ” μƒνƒœ > 데이터 μ‘°μž‘ κ³€λž€
    2. null이 λ§Žμ€ μƒνƒœμ˜ ν…Œμ΄λΈ” > 곡간 λ‚­λΉ„
    3. 데이터가 μ€‘λ³΅λ˜λŠ” μƒνƒœ > 곡간 λ‚­λΉ„ + 데이터 μ‘°μž‘ κ³€λž€
    4. ν•˜λ‚˜μ˜ 속성값이 μ›μžκ°’μ΄ μ•„λ‹Œ μƒνƒœ > 더 이상 μͺΌκ°œμ§€μ§€ μ•ŠλŠ” 값을 λ„£μ–΄μ•Ό ν•œλ‹€.

μžμ‹ ν…Œμ΄λΈ”λ³΄λ‹€ λΆ€λͺ¨ ν…Œμ΄λΈ”μ΄ λ¨Όμ € λ°œμƒν•œλ‹€.(ν…Œμ΄λΈ” 생성, λ ˆμ½”λ“œ 생성) (μ€‘μš”)

쑰인, join

  • (μ„œλ‘œ 관계λ₯Ό 맺은) 2개(1개) μ΄μƒμ˜ ν…Œμ΄λΈ”μ„ 1개의 κ²°κ³Όμ…‹μœΌλ‘œ λ§Œλ“œλŠ” 기술

쑰인의 μ’…λ₯˜

  1. λ‹¨μˆœ 쑰인, CROSS JOIN
  2. λ‚΄λΆ€ 쑰인, INNER JOIN (μ€‘μš”)
  3. μ™ΈλΆ€ 쑰인, OUTER JOIN (μ€‘μš”)
  4. μ…€ν”„ 쑰인, SELF JOIN
  5. 전체 μ™ΈλΆ€ 쑰인, FULL OUTER JOIN

  1. λ‹¨μˆœ 쑰인, CROSS JOIN, μΉ΄ν‹°μ…˜κ³±(데카λ₯΄νŠΈκ³±)
    • A ν…Œμ΄λΈ” X B ν…Œμ΄λΈ”
    • μ“Έλͺ¨ μ—†λ‹€. > κ°€μΉ˜ μžˆλŠ” ν–‰κ³Ό κ°€μΉ˜ μ—†λŠ” 행이 λ’€μ„žμ—¬ μžˆμ–΄μ„œ.
    • 더미 데이터(μœ νš¨μ„± 무관)
  2. λ‚΄λΆ€ 쑰인, INNER JOIN
    • λ‹¨μˆœ μ‘°μΈμ—μ„œ μœ νš¨ν•œ λ ˆμ½”λ“œλ§Œ μΆ”μΆœν•œ 쑰인
	select 컬럼리슀트 from ν…Œμ΄λΈ”a cross join ν…Œμ΄λΈ”b;

	select 컬럼리슀트 from ν…Œμ΄λΈ”a inner join ν…Œμ΄λΈ”b on ν…Œμ΄λΈ”a.pk = ν…Œμ΄λΈ”b.fk;

	select 
		컬럼리슀트 
	from ν…Œμ΄λΈ”a
		inner join ν…Œμ΄λΈ”b
			on ν…Œμ΄λΈ”a.pk = ν…Œμ΄λΈ”b.fk

별칭 뢙이면 λͺ¨λ‘ 별칭을 μ‚¬μš©ν•  것.
쑰인 > ν…Œμ΄λΈ” 별칭 자주 μ‚¬μš©

관계가 μžˆμ–΄μ•Ό 쑰인을 ν•œλ‹€.

-- 고객λͺ…(tblCustomer) + νŒλ§€λ¬Όν’ˆλͺ…(tblSales) > κ°€μ Έμ˜€μ‹œμ˜€.
-- 1. 쑰인
SELECT
	c.name,
	s.item
FROM tblcustomer c
	INNER JOIN tblSales s
		ON c.seq = s.cseq;

-- 2. μ„œλΈŒ 쿼리 > 상관 μ„œλΈŒ 쿼리
-- 메인쿼리 > μžμ‹ ν…Œμ΄λΈ”
-- 상관 μ„œλΈŒ 쿼리 > λΆ€λͺ¨ ν…Œμ΄λΈ”
SELECT
	item AS λ¬Όν’ˆλͺ…,
	(SELECT name FROM tblcustomer WHERE seq = tblSales.cseq) AS 고객λͺ…
FROM tblsales;
profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€