-
[SQL] SQL Query 쿼리문 (2) - DISTINCT, JOIN, OUTER JOINSQL 2021. 5. 31. 15:02
SQL Query -DISTINCT, JOIN (INNER JOIN), OUTER JOIN (LEFT OUTER JOIN, RIGHT OUTER JOIN)
1. DISTINCT
중복 없이 유니크한 값만 결과로 돌려받고 싶을 때 DISTINCT를 사용할 수 있습니다.
- invoices 테이블에서 CustomerId 중복 값 없이 가져오기
SELECT DISTINCT i.CusotomerId FROM invoices i
유니크한 조합을 결과로 가져오기 위해서도 DISTINCT를 사용할 수 있습니다.
- invoices 테이블의 InvoiceDate와 BillingCity의 유니크한 조합 가져오기
SELECT DISTINCT i.InvoiceDate, i.BillingCity FROM invoices i
2. JOIN ( INNER JOIN )
INNER JOIN ( JOIN ) JOIN을 이용해서 테이블의 동일한 값이 있는 부분으로만 연결할 수 있습니다.
- tracks 테이블과 genre 테이블의 GenreId로 두 테이블의 공통된 부분 연결하기
SELECT * FROM tracks t JOIN genres g ON t.GenreId = g.GenreId
3. OUTER JOIN - LEFT OUTER JOIN, RIGHT OUTER JOIN
LEFT OUTER JOIN RIGHT OUTER JOIN OUTER JOIN은 INNER JOIN과 달리 공통되지 않은, 일치하지 않은 부분도 모두 가져옵니다.
LEFT OUTER JOIN의 경우를 예시로 설명하면,
오른쪽 테이블에 값이 없더라도 기준이 되는 왼쪽 테이블에 데이터가 있다면 왼쪽 테이블이 가진 값을 모두 불러옵니다.
이때 일치하는 값이 없는 부분은 Null값으로 가져오게 됩니다.
- customers 테이블을 기준으로 invoices 테이블과 CustomerId 로 outer join
(invoices 테이블에 없고, customers 테이블에만 있는 CustomerId라도 join해서 가져오고 없는 값에 대해 Null로 채움)
SELECT * FROM customers c LEFT OUTER JOIN invoices i ON c.CustomerId = i.CustomerId
* 쿼리 실행 순서
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
SELECT GenreId, COUNT(Composer) FROM tracks WHERE UnitPrice >= 20 GROUP BY GenreId HAVING COUNT(Composer) > 10 ORDER BY 2
'SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 SQL 고득점 Kit -GROUP BY (0) 2021.07.07 [MySQL] 프로그래머스 SQL 고득점 Kit - SUM, MAX, MIN (0) 2021.07.06 [MySQL] 프로그래머스 SQL 고득점 Kit - SELECT (0) 2021.07.05 [SQL] SQL Query 쿼리문 (1) - SELECT, FROM, WHERE, ORDER BY, GROUP BY, LIMIT (0) 2021.04.04 [SQL] 데이터베이스 설계 (0) 2021.04.04