JOIN
참고 사이트는 더보기 클릭
INNER JOIN
카티션 곱의 결과로 조인할 때 사용했던 칼럼이 중복 조회됨
즉, users.id = orders.userid 로 조인을 했다면 결과 값이 users 테이블의 id와 orders 테이블의 userid 두 개가 조회된다.
(Customers와 Orders 테이블을 예시로 들면 무조건 한 번 이상의 주문이 있어야 조회가 된다)
/*
Old version
SELECT *
FROM Users, Orders
WHERE Users.Id = Orders.userId
*/
SELECT *
FROM Users
INNER JOIN Orders ON Users.Id = Orders.userId
-- 결과 값은 똑같지만 INNER JOIN 키워드 사용 권장
OUTER JOIN (LEFT, RIGHT)
< 테이블 예시 Users, Orders >
Id | 로그인 아이디 | 주소 |
1 | A | 광진구 자양동 |
2 | B | 송파구 석촌동 |
3 | C | 분당구 판교동 |
userId | 구매 상품 | 가격 | 결제수단 |
1 | 샴푸 | 5000 | 국민카드 |
2 | 식빵 | 7000 | 신한카드 |
LEFT JOIN
- 한 번도 주문을 하지 않은 회원도 출력하고 싶을 경우에 사용
SELECT *
FROM Users
LEFT JOIN Orders ON Users.Id = Orders.userId
Id | 로그인 아이디 | 주소 | userId | 구매 상품 | 가격 | 결제수단 |
1 | A | 광진구 자양동 | 1 | 샴푸 | 5000 | 국민카드 |
2 | B | 송파구 석촌동 | 2 | 식빵 | 7000 | 신한카드 |
3 | C | 분당구 판교동 | NULL | NULL | NULL | NULL |
< left 조인 결과 테이블 >
한 번도 주문을 안한 회원을 조회하고 싶을 때
SELECT *
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE OrderID IS NULL
RIGHT JOIN
대부분 LEFT 조인으로 해결함 (잘 쓰지 않음)
HACKER RANK / LEETCODE
해답은 더보기란을 클릭
1. Africa Cities - https://www.hackerrank.com/challenges/african-cities/problem?h_r=internal-search
SELECT City.Name
FROM City
INNER JOIN Country ON City.Countrycode = Country.code
WHERE Continent = 'Africa'
2. Asian Population - https://www.hackerrank.com/challenges/asian-population/problem?h_r=internal-search
SELECT SUM(city.Population)
FROM Country
INNER JOIN City ON Country.code = City.countrycode
WHERE Country.continent = 'Asia'
3. Average Population of Each Continent - https://www.hackerrank.com/challenges/average-population-of-each-continent/problem?h_r=internal-search
SELECT country.continent
, FLOOR(AVG(city.population))
FROM Country
INNER JOIN City ON Country.Code = City.Countrycode
GROUP BY country.continent
(LEETCODE) 183. Customers Who Never Order - https://leetcode.com/problems/customers-who-never-order/
SELECT Customers.name AS "Customers"
FROM Customers
LEFT JOIN Orders ON Customers.id = Orders.CustomerID
WHERE Orders.CustomerID IS NULL
SELF JOIN
주의할 점 : AS 즉, 별칭을 무조건 사용해서 같은 테이블을 구분해주어야 함.
자신의 테이블과 JOIN (상사를 찾을 때 씀)
해답은 더보기를 클릭 (LEETCODE)
1. https://leetcode.com/problems/employees-earning-more-than-their-managers/
SELECT Employee.Name "Employee"
-- , Employee.Salary "employee_salary"
-- , Manager.Name "manager_name"
-- , Manager.Salary "manager_salary"
FROM Employee
INNER JOIN Employee Manager ON Employee.managerid = Manager.id
WHERE Employee.Salary > Manager.Salary
2. https://leetcode.com/problems/rising-temperature/
DATE 계산 방법을 이용해서 RecordDate로 JOIN을 진행
SELECT today.id
FROM Weather AS today
INNER JOIN Weather AS yesterday
ON today.recorddate = DATE_ADD(yesterday.recorddate, INTERVAL 1 DAY)
WHERE today.Temperature > yesterday.Temperature
+) MySQL 시간 더하기, 빼기
DATE_ADD(기준 날짜, INTERVAL)
- SELECT DATE_ADD(NOW(), INTERVAL 1 SECOND)
- SELECT DATE_ADD(NOW(), INTERVAL 1 MINUTE)
- SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR)
- SELECT DATE_ADD(NOW(), INTERVAL 1 DAY)
- SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)
- SELECT DATE_ADD(NOW(), INTERVAL -1 YEAR)
DATE_SUB(기준 날짜, INTERVAL)
- SELECT DATE_SUB(NOW(), INTERVAL 1 SECOND)
< 기초 SQL 시리즈 >
2020/07/14 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 기초 SQL - 1부
2020/07/14 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 기초 SQL - 2부
2020/07/14 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 기초 SQL - 3부 完
< 중급 SQL 시리즈 >
2020/07/15 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 1부
2020/07/15 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 2부
2020/07/16 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 3부
2020/07/16 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 4부 完
이 포스팅은 해당 강좌를 수강하며 작성하였습니다.
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 인프런
SQL 중급 이론을 배우고, 실습 문제를 함께 풀어봅니다. 초급 중급이상 데이터베이스 데이터베이스 데이터 분석 SQL 데이터 분석 온라인 강의 업무에 SQL을 바로 적용할 수 있고 SQL 코딩 테스트도 �
www.inflearn.com
'Database > SQL' 카테고리의 다른 글
[백문이불여일타] 데이터 분석을 위한 고급 SQL - 1부 (0) | 2020.07.17 |
---|---|
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 4부 完 (0) | 2020.07.16 |
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 2부 (0) | 2020.07.15 |
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 1부 (0) | 2020.07.15 |
[백문이불여일타] 데이터 분석을 위한 기초 SQL - 3부 完 (0) | 2020.07.14 |