What a Beautiful Data!

SQL 중급 강의 수강 요약_JOIN

by darami

데이터리안_백문이불여일타_SQL 중급 강의 수강 2

RDB, 관계형 데이터 베이스는 JOIN이 필요하다.

JOIN

INNER JOIN

/*
--OLD
SELECT * 
FROM Customers
Where CustomerID=90
*/
-- 공통된것 조인 
SELECT *
FROM Orders
    INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID
    INNER JOIN Shippers ON Orders.shipperID=Shippers.ShipperID
  • INNER JOIN 여러개 가능
  • 현업에서는 CustomerID를 조인할 수 없는 형태 OR 조인 키 컬럼이 다를 수 있음
  • 그러면 어떻게 하는가? -> ERD를 알아야함. (고급반에서 다룸)
  • SQL Joins Visualizer 헷갈리면 참고하기

OUTER JOIN (LEFT,RIGHT)

image

  • 이 INNER JOIN 말고는 다 OUTER JOIN 이라고 생각하면 된다.

Left : 왼쪽은 다 포함하고, 왼쪽이랑 겹치는 B 출력

image

SELECT * 
FROM Customers
    LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE OrderID IS NULL

RIGHT JOIN은 딱 이 반대 
-- 보통 LEFT JOIN 기준으로 씀, 둘다 쓰면 헷갈리기 때문
LEFT/RIGHT OUTER JOIN = LEFT/RIGHT JOIN
똑같이 동작함. 

문제풀이

SELECT CITY.NAME 
FROM CITY
    INNER JOIN COUNTRY ON COUNTRY.CODE=CITY.COUNTRYCODE
WHERE COUNTRY.CONTINENT= 'Africa'

--CITY 테이블의 NAME 컬럼 출력해달라 -> CITY.NAME 

SELECT SUM(CITY.POPULATION)
FROM CITY 
    INNER JOIN COUNTRY ON CITY.COUNTRYCODE=COUNTRY.CODE
WHERE COUNTRY.CONTINENT= 'Asia';   

-- ON 위치 주의 

SELF JOIN

DATE\_ADD(기준날짜, INTERVAL)  
DATE\_ADD(NOW(), INTERVAL 1 SECOND)  
DATE\_ADD(NOW(), INTERVAL 1 MINUTE)  
DATE\_ADD(NOW(), INTERVAL 1 HOUR)  
DATE\_ADD(NOW(), INTERVAL 1 DAY)  
DATE\_ADD(NOW(), INTERVAL 1 MONTH)  
DATE\_ADD(NOW(), INTERVAL 1 YEAR)

DATE\_SUB(기준날짜, INTERVAL 1 DAY)

SELECT \*  
FROM A AS today  
INNER JOIN A AS nextday ON DATE\_ADD(today.start\_date,INTERVAL +1 DAY)=nextday.start\_date

\-- 서브 쿼리, 셀프 조인 테이블 만들때 마다 칼럼 이름을 AS 로 다르게 지정해주는 게 좋다.  
\-- 그렇지 않으면 충돌이 잦다.

'SQL > 데이티리안' 카테고리의 다른 글

SQL_고급_DML,윈도우 함수  (0) 2022.04.07
SQL_WITH/서브쿼리  (0) 2022.04.05
SQL 중급_데이터리안 강의 공부 요약  (0) 2022.03.04
SQL 기초_데이터리안 강의 공부 요약  (0) 2022.03.02

블로그의 정보

다람

darami

활동하기