μλ νμΈμ
곡λΆνλμ μ΄ μ λλ€
κ³μν΄μ SQL κ°λ μλν΄μ μ 리ν΄λ³΄λλ‘ νκ² μ΅λλ€.
μ΄λ² ν¬μ€ν μ ν μ΄λΈμ κ΄ν λ΄μ©μ λλ€. ν μ΄λΈμλ μ¬λ¬ μν°ν°μ μμ±λ€μ ν¬ν¨νκ³ μμ΄μ λ°μ΄ν°λ² μ΄μ€μ ν΅μ¬μ λλ€.
κ·ΈλΌ μμν΄λ³΄λλ‘ νκ² μ΅λλ€.
μ§ν© μ°μ°
UNIONμΌλ‘ ν©μ§ν© ꡬνκΈ°
SQLμμλ SELECT λͺ λ Ήμ μ€ν κ²°κ³Όλ₯Ό νλμ μ§ν©μΌλ‘ λ€λ£° μ μλ€.
ν©μ§ν©μ κ³μ°νλ κ²½μ° UNION ν€μλλ₯Ό μ¬μ©νλ€.
![]() |
![]() |
![]() |
select * from new_table_1; | select * from new_table_2 | select * from new_table_1,new_table_2; |
μ΄λ¬ν sample71_aμ sample71_bλΌλ λ κ°μ ν μ΄λΈμ΄ μλ€κ³ νμ λ
UNIONμ νμ©νλ©΄ λ€μκ³Ό κ°μ κ²°κ³Όκ° λμ¨λ€.
λ€μ 쿼리λ₯Ό μ€ννμλ€.
쿼리 결과
ν λ²μ 쿼리 μ€νμΌλ‘ λ κ°μ SELECT λͺ λ Ήμ΄ λ΄λΆμ μΌλ‘ μ€νλλ νμμ΄λ€.
UNIONμ μ΄μ©νλ©΄ μ¬λ¬ κ°μ SELECT λͺ λ Ήμ νλλ‘ λ¬Άμ μ μλ€.
μ΄λ κ°κ°μ SELECT λͺ λ Ήμ μ΄μ λ΄μ©μ μλ‘ μΌμΉν΄μΌ νλ€.
μμ μ΄ν΄λ³Έ λ ν μ΄λΈμ μ΄λͺ μ λ€λ₯΄μ§λ§ μ΄μ κ°μμ μλ£νμ΄ λμΌνκΈ°μ μΌμΉνλ€κ³ λ³Ό μ μλ€.
β
SELECT λͺ λ Ήλ€μ UNIONμΌλ‘ λ¬Άμ λ λμ΄ μμλ ν©μ§ν©μ κ²°κ³Όμ μν₯μ μ£Όμ§ μμ§λ§, κ²°κ΄κ°μ λμ΄ μμλ λ¬λΌμ§ μ μλ€.
β
UNIONμ μ¬μ©ν λμ ORDER BY
UNIONμΌλ‘ SELECT λͺ λ Ήμ κ²°ν©ν΄ ν©μ§ν©μ ꡬνλ κ²½μ°,
κ° SELECT λͺ λ Ήμ ORDER BYλ₯Ό μ§μ ν΄ μ λ ¬ν μλ μλ€.
ORDER BYλ₯Ό μ§μ ν λλ λ§μ§λ§ SELECT λͺ λ Ήμλ§ μ§μ νλ€.
UNION ALL
UNIONμ κΈ°λ³Έμ μΌλ‘ μ€λ³΅μ μ κ±°νμ¬ κ²°κ³Όλ₯Ό μΆλ ₯νλ€.
κ·Έλ¬λ μ€λ³΅μ μ κ±°νμ§ μκ³ κ²°κ³Όλ₯Ό μΆλ ₯νκ³ μΆλ€λ©΄, UNION ALLμ μ¬μ©νλ©΄ λλ€.
μ¦, μ€λ³΅ κ°μ΄ μλ κ²½μ° UNION ALLμ μ¬μ©νλ νΈμ΄ μ’μ μ±λ₯μ 보μ¬μ€λ€.
μΆκ°μ μΌλ‘ MySQLμμλ μ§μλμ§ μμ§λ§, κ΅μ§ν©μ INTERSECT, μ°¨μ§ν©μ EXCEPTλ₯Ό μ¬μ©νλ€.
ν μ΄λΈ κ²°ν©
κΈ°μ‘΄μ μ§ν© μ°μ°μ΄ μΈλ‘ λ°©ν₯(ν)μΌλ‘ λ°μ΄ν°κ° λμ΄λκ±°λ μ€μ΄λλ κ²μ΄μλ€λ©΄, κ²°ν©μ κ°λ‘(μ΄) λ°©ν₯μΌλ‘ λ°μ΄ν°κ° λμ΄λλ κ³μ°μ΄λ€.
λ³΄ν΅ λ°μ΄ν°λ² μ΄μ€λ νλμ ν μ΄λΈμ λ§μ λ°μ΄ν°λ₯Ό μ μ₯νμ§ μκ³ λͺ κ°μ ν μ΄λΈλ‘ λλμ΄ μ μ₯νλ€.
μ¬λ¬ κ°λ‘ λλ λ°μ΄ν°λ₯Ό νλλ‘ λ¬Άμ΄λ΄λ λ°©λ²μ΄ ν μ΄λΈ κ²°ν©μ΄λ€.
β
κ³±μ§ν©κ³Ό κ΅μ°¨κ²°ν©
κ³±μ§ν©μ ν©μ§ν©μ΄λ κ΅μ§ν©μ²λΌ μ§ν©μ μ°μ° λ°©λ² μ€ νλλ‘,
λ κ°μ μ§ν©μ κ³±νλ μ°μ° λ°©λ²μΌλ‘ 'μ μ§ν©' λλ 'μΉ΄ν°μ κ³±'. 'μΉ΄ν°μμ μ κ³±'μ΄λΌκ³ λΆλ¦°λ€.
κ΅μ°¨κ²°ν©(Cross Join)
μ§κΈκΉμ§ SELECT λͺ λ Ήμλ FROM ꡬμ νλμ ν μ΄λΈλ§ μ§μ νλ€.
λ§μ½ FROM ꡬμ ν μ΄λΈμ λ κ° μ§μ νλ€λ©΄ μ΄λ€μ κ³±μ§ν©μΌλ‘ κ³μ°λλ€.
μμμ νλ² μ€νν΄λ³΄μλ€. λ κ°μ μ΄μ΄ νλ²μ 보μΈλ€.
μ΄λ FROM ꡬμ 볡μμ ν μ΄λΈμ μ§μ νλ©΄ κ΅μ°¨κ²°ν©μ νλ€.
UNIONμΌλ‘ ν©μ§ν©μ ꡬνμ κ²½μ°μλ μΈλ‘ λ°©ν₯μΌλ‘ λν΄μ§κ² λλ λ°λ©΄
FROM κ΅¬λ‘ ν μ΄λΈμ κ²°ν©ν κ²½μ°μλ κ°λ‘ λ°©ν₯μΌλ‘ λν΄μ§κ² λλ€(μ΄λ fromμ whereμ fromμ΄λ€)
λ΄λΆ κ²°ν©
ν μ΄λΈμ μΈ κ°, λ€ κ°λ‘λ μ§μ ν΄μ κ΅μ°¨κ²°ν©μ ν μλ μμ§λ§ μ΄λ΄ κ²½μ° μ‘°ν© μκ° μμ²λκ² λμ΄λ μ§ν©μ΄ κ±°λν΄μ§λ―λ‘ λ§μ ν μ΄λΈμ κ΅μ°¨κ²°ν©νλ κ²½μ°λ λλ¬Όλ€.
μ¦, κ²°ν© λ°©λ²μΌλ‘λ κ΅μ°¨κ²°ν©λ³΄λ€ λ΄λΆ κ²°ν©μ΄ μμ£Ό μ¬μ©λλ€.
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ ν μ΄λΈμ λ°μ΄ν°κ° μ μΌν κ°μ κ°μ§λλ‘ κΆμ₯νλ€.
μ¦, κΈ°λ³Έ ν€(primary key)λ₯Ό κ°μ§λλ‘ νλ κ² μ’λ€λ κ²μ΄λ€.
β
λ΄λΆ κ²°ν©μ μν΄ λ κ°μ§ ν μ΄λΈμ λ§λ€μλ€.
# μν ν μ΄λΈ λ§λ€κΈ°
CREATE TABLE 'μν' (
'μνμ½λ' CHAR(4) NOT NULL,
'μνλͺ ' VARCHAR2(20),
'λ©μ΄μ»€λͺ ' VARCHAR(20),
'κ°κ²©' INT,
'μνλΆλ₯' VARCHAR2(20)
PRIMARY KEY('μνμ½λ')
);
[μν ν μ΄λΈ]
μνμ½λ | μνλͺ | λ©μ΄μ»€λͺ | κ°κ²© | μνλΆλ₯ |
0001 | μνa | γ±λ©μ΄μ»€ | 1000 | μνν |
0002 | μνb | γ΄λ©μ΄μ»€ | 2000 | μνν |
0003 | μνc | γ·λ©μ΄μ»€ | 19800 | μνμ©ν |
# μ¬κ³ μ ν μ΄λΈ μμ±νκΈ°
CREATE TABLE 'μ¬κ³ μ'(
'μνμ½λ' CHAR(4),
'μ κ³ λ μ§' DATE,
'μ¬κ³ μ' INTEGER
);
[μ¬κ³ μ ν μ΄λΈ]
μνμ½λ | μ κ³ λ μ§ | μ¬κ³ μ |
0001 | 2021-09-10 | 200 |
0002 | 2021-10-10 | 500 |
0003 | 2021-11-10 | 10 |
λ€λ₯Έ ν μ΄λΈμ λ°μ΄ν°λ₯Ό μ°Έμ‘°ν΄μΌ νλ κ²½μ°, μ°Έμ‘°ν ν μ΄λΈμ κΈ°λ³Έ ν€('μνμ½λ')μ
λμΌν μ΄λ¦κ³Ό μλ£νμΌλ‘ μ΄μ λ§λ€μ΄μ νμ μ°κ²°νλ κ²½μ°κ° λ§λ€.
β
μ΄ λ ν μ΄λΈμ κ°μ§κ³ λ΄λΆ κ²°ν©μ ν΄λ³΄λλ°, μνλ κ²°κ³Όλ λ€μκ³Ό κ°λ€.
첫λ²μ§Έ, κ΅μ°¨ κ²°ν© μννλ€.
select * from 'μν', 'μ¬κ³ μ';
μνμ½λ | μνλͺ | λ©μ΄μ»€λͺ | κ°κ²© | μνλΆλ₯ | μνμ½λ | μ¬κ³ μ |
0001 | μνa | γ±λ©μ΄μ»€ | 1000 | μνν | 0001 | 200 |
0002 | μνb | γ΄λ©μ΄μ»€ | 2000 | μνν | 0001 | 200 |
0003 | μνc | γ·λ©μ΄μ»€ | 19800 | μνμ©ν | 0001 | 200 |
0001 | μνa | γ±λ©μ΄μ»€ | 1000 | μνν | 0002 | 500 |
0002 | μνb | γ΄λ©μ΄μ»€ | 2000 | μνν | 0002 | 500 |
0003 | μνc | γ·λ©μ΄μ»€ | 19800 | μνμ©ν | 0002 | 500 |
0001 | μνa | γ±λ©μ΄μ»€ | 1000 | μνν | 0003 | 10 |
0002 | μνb | γ΄λ©μ΄μ»€ | 2000 | μνν | 0003 | 10 |
0003 | μνc | γ·λ©μ΄μ»€ | 19800 | μνμ©ν | 0003 | 10 |
μΌμͺ½μ΄ μν ν μ΄λΈμ λ°μ΄ν°, μ€λ₯Έμͺ½μ΄ μ¬κ³ μ ν μ΄λΈμ λ°μ΄ν°μ΄λ€.
μ§κΈλ³΄λ©΄, μνμ½λκ° μλ‘ λ§μ§ μκ³ μμμ λ³Ό μ μλ€. λλ²μ§Έν, 0002μμ 0001μ μνμ½λκ° μ°κ²°λμ΄μλ€.
μ΄λ κ² μμ±λ μ§ν©μμ μνλ λ°μ΄ν°λ₯Ό κ²μνκΈ° μν΄ WHERE κ΅¬λ‘ μνμ½λκ° κ°λ€λ 쑰건μ μ§μ νλ€.
SELECT * FROM 'μν', 'μ¬κ³ μ'
WHERE 'μν'.'μνμ½λ' = 'μ¬κ³ μ'.'μνμ½λ';
λ΄λΆκ²°ν©
μνμ½λ | μνλͺ | λ©μ΄μ»€λͺ | κ°κ²© | μνλΆλ₯ | μνμ½λ | μ¬κ³ μ |
0001 | μνa | γ±λ©μ΄μ»€ | 1000 | μνν | 0001 | 200 |
0002 | μνb | γ΄λ©μ΄μ»€ | 2000 | μνν | 0002 | 500 |
0003 | μνc | γ·λ©μ΄μ»€ | 19800 | μνμ©ν | 0003 | 10 |
μ΄λ κ² κ΅μ°¨κ²°ν©μΌλ‘ κ³μ°λ κ³±μ§ν©μμ μνλ μ‘°ν©μ κ²μνλ κ²μ λ΄λΆ κ²°ν©(Inner Join)μ΄λΌ λΆλ₯Έλ€.
λ§μ§λ§μΌλ‘ μν λΆλ₯κ° μννμ΄λΌλ μ‘°κ±΄μ΄ νμνλ€.
SELECT A.'μνλͺ ', B.'μ¬κ³ μ'
FROM 'μν' AS A,
'μ¬κ³ μ' AS B
WHERE A.'μνμ½λ' = B.'μνμ½λ'
AND A.'μνλΆλ₯ ' = 'μλ£ν'
μνλͺ | μ¬κ³ μ |
μνa | 200 |
μνb | 500 |
첫 λ²μ§Έ 쑰건μμ κ΅μ°¨κ²°ν©μΌλ‘ κ³μ°λ κ³±μ§ν©μμ μνλ μ‘°ν©μ κ²μνλ κ²μ΄κΈ° λλ¬Έμ κ²°ν© μ‘°κ±΄μ΄λ€.
λ λ²μ§Έ 쑰건μμ κ²°ν© μ‘°κ±΄μ΄ μλ κ²μ 쑰건μ΄λ€.
β
INNER JOINμΌλ‘ λ΄λΆ κ²°ν©νκΈ°
μμμ μ¬μ©ν κ²°ν© λ°©λ²μ κ°λ¨ν μ 리νλ©΄ λ€μκ³Ό κ°λ€.
β
- FROM ꡬμ ν μ΄λΈμ 볡μ μ§μ ν΄ κ°λ‘ λ°©ν₯μΌλ‘ ν μ΄λΈμ κ²°ν©ν μ μλ€.
- κ΅μ°¨κ²°ν©μ νλ©΄ κ³±μ§ν©μΌλ‘ κ³μ°λλ€.
- WHERE 쑰건μ μ§μ ν΄ κ³±μ§ν©μμ νμν μ‘°ν©λ§ κ²μν μ μλ€.
β
μ΄μ κ°μ κ²°ν© λ°©λ²μ μ¬μ€ ꡬμμ΄λ€.
μ΅κ·Όμλ INNER JOIN ν€μλλ₯Ό μ¬μ©ν κ²°ν© λ°©λ²μ΄ μΌλ°μ μΌλ‘ ν΅μ©λκ³ μλ€κ³ νλ, μμ§νμ.
SELECT *
FROM ν μ΄λΈλͺ 1
INNER JOIN ν μ΄λΈλͺ 2
ON κ²°ν©μ‘°κ±΄ # κ²°ν© μ‘°κ±΄ μ§μ
WHRE 쑰건 # κ²μ 쑰건
μΈλΆ κ²°ν©
μΈλΆ κ²°ν©μ΄λΌκ³ ν΄λ κ΅μ°¨κ²°ν©μΌλ‘ κ²°ν© μ‘°κ±΄μ μ§μ νμ¬ κ²μνλ€λ κΈ°λ³Έμ μΈ μ¬κ³ λ°©μμ κ°λ€.
μΈλΆ κ²°ν©μ 'μ΄λ ν μͺ½μλ§ μ‘΄μ¬νλ λ°μ΄ν°νμ μ΄λ»κ² λ€λ£°μ§'λ₯Ό λ³κ²½ν μ μλ κ²°ν© λ°©λ²μ΄λ€.
μνμ½λ | μνλͺ | λ©μ΄μ»€λͺ | κ°κ²© | μνλΆλ₯ |
0001 | μνa | γ±λ©μ΄μ»€ | 1000 | μνν |
0002 | μνb | γ΄λ©μ΄μ»€ | 2000 | μνν |
0003 | μνc | γ·λ©μ΄μ»€ | 19800 | μνμ©ν |
0004 | μΆκ°μν d | γΉλ©μ΄μ»€ | 3000 | μνν |
κΈ°μ‘΄μ μ¬μ©νλ μν ν μ΄λΈμ μνμ½λκ° 0004μΈ μλ‘μ΄ μνμ μΆκ°νλ€.
μ¬κ³ μ ν μ΄λΈμλ μμ§ μ΄ μνμ λν λ°μ΄ν°κ° μλ€.
λ°λΌμ λ΄λΆ κ²°ν© κ²°κ³Όμμλ μνμ½λ 0004 = 0004κ° λλ νμ΄ μ‘΄μ¬νμ§ μμΌλ―λ‘
μνμ½λκ° 0004μΈ μνμ μ μΈλλ€.
μ΄λ λ― μν ν μ΄λΈκ³Ό μ¬κ³ μ ν μ΄λΈ μ€ μν ν μ΄λΈμλ§ νμ΄ μ‘΄μ¬νλ κ²½μ°μ μΈλΆ κ²°ν©μ μ¬μ©νλ©΄ λλ€.
μΈλΆ κ²°ν©μ κ²°ν©νλ ν μ΄λΈ μ€μ μ΄λ μͺ½μ κΈ°μ€μΌλ‘ ν μ§ κ²°μ ν μ μλ€.
SELECT A.'μνλͺ ', B.'μ¬κ³ μ'
FROM 'μν' A
LEFT JOIN 'μ¬κ³ μ' B
ON A.'μνμ½λ' = B.'μνμ½λ'
WHERE A.'μνλΆλ₯' = 'μνν';
μνλͺ | μ¬κ³ μ |
μνa | 200 |
μνb | 500 |
μΆκ°μν | NULL #μΆκ°μνμ λν μ¬κ³ μμ κ°μ΄ μμΌλ―λ‘ NULLμ΄ μΆλ ₯λλ€. #λ§μ½ μν ν μ΄λΈμ μ€λ₯Έμͺ½μ μ§μ νλ κ²½μ°λ μ¬κ³ ν μ΄λΈμ κΈ°μ€μΌλ‘ νκ³ μΆμ κ²½μ°μλ #RIGHT JOINμ μ¬μ©ν΄ μΈλΆ κ²°ν©μ μννλ€. |
κ²°λ‘ :
μμ§ JOINμ λν΄μ μ νν κ°λ μ΄ μ‘νμ§ μμμ§λ§, λ°λ³΅νλ€λ³΄λ©΄ ν°λν κ² κ°λ€. νΉν νΉμ μλ₯Ό λ¨Έλ¦Ώμμ λκ³ μκΈ°νλ κ²μ΄ κ°λ μ λ μ μ΄ν΄νλ λ°©λ²μΌ κ² κ°λ€.