데이터리안 week 3 숙제

sujinzzang수진짱·2022년 7월 23일
0

sql basic

목록 보기
6/8

JOIN

카티션 곱

SELECT *
FROM Users, Orders

전체 경우의 수를 보여준다.
-> Users 테이블에 3건, Orders 테이블에 3건의 데이터가 있으면 3x3 모든 경우의 수 테이블을 보여준다.

key값이 일치하는 것을 보여주는 것이 아니다.

INNER JOIN

INNER JOIN (구식)

SELECT *
FROM Users, Orders
WHERE User.Id = Orders.userId

Users 테이블의 Id 컬럼과 Orders 테이블의 userId가 같은 값만 가져온다

INNER JOIN (신식)

SELECT *
FROM Users
	INNER JOIN Orders ON Users.Id = Orders.userId

Users테이블에 Orders테이블을 붙여줄 건데 key값은 Users 테이블의 Id와 Orders 테이블의 userId 이다.

  • INNER 조인은 일치하는 값을 출력하기 때문에 양쪽 테이블에 모두 존재하는 값만 출력된다!

  • 여러 테이블 조인도 가능하다.
    INNER JOIN을 여러번 써준다.

참고

INNER, LEFT, RIGHT 조인이 헷갈릴 때는 아래 시각화 사이트를 참고하자!
https://sql-joins.leopard.in.ua/

OUTER JOIN

INNER JOIN을 제외하고는 다 OUTER JOIN이다.

LEFT JOIN

SELECT *
FROM Users
	LEFT JOIN Orders ON Users.ID = Orders.userID
  • FROM뒤에 쓰는 테이블이 왼쪽 테이블 LEFT JOIN 뒤에 쓰는 테이블이 오른쪽 테이블
  • 왼쪽 테이블을 기준으로 JOIN한다.
  • 왼쪽 테이블에는 존재하고 오른쪽 테이블에는 존재하지 않는 값도 출력된다.

RIGHT JOIN

  • RIGHT JOIN은 LEFT JOIN과 반대.

  • 오른쪽 테이블을 기준으로 출력한다.

  • 주로 LEFT JOIN을 사용한다. 해석하기가 쉬움.

  • LEFT OUTER JOIN, LEFT JOIN은 같다.

  • RIGHT OUTER JOIN, RIGHT JOIN은 같다.

AS

테이블에도 ALIAS 줄 수 있다.

SELECT *
FROM Customers AS c
	INNER JOIN Orders AS o ON c.id = o.customerID

SELF JOIN

  • 한 테이블을 JOIN 하는 것.
  • ALIAS를 꼭 적어줘야 왼쪽과 오른쪽의 테이블을 구분할 수 있다.

시간 더하기, 빼기 함수

더하기

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)
SELECT DATE_ADD(NOW(), INTERVAL -1 YEAR)

빼기

DATE_SUB(기준날짜, INTERVAL)

SELECT DATE_SUB(NOW(), INTERVAL 1 SECOND)
  • 더하기 함수인 DATE_ADD-(마이너스)를 쓰면 빼기가 된다.

UNION

집합연산 (UNION)

  • 중복데이터가 있을 경우 중복 데이터는 없앤 값을 출력
  • DISTINCT가 생략되어 있다고 생각하자. 디폴트가 중복제거

집합연산 (UNION ALL)

  • 중복데이터가 있을 경우 중복 데이터까지 전부 출력

오라클에서 지원하는 함수들

EXCEPT(MINUS): 차집합
INERSECT : 교집합

FULL OUTER JOIN

  • MySQL에서는 지원하지 않는다.
  • FULL OUTER JOIN을 하고 싶을 때는
    LEFT JOIN, RIGHT JOIN을 함께 쓴 뒤
    UNION해준다.

TIL

JOIN 조건이 여러개일 때

JOIN 키 조건이 여러개 일 때는 AND로 이어서 써주면 된다.

SELECT *
FROM fuctions AS f1
	INNER JOIN functions AS f2 ON f1.x = f2.y AND f1.y = f2.x

UNION한 값에 정렬을 해주고 싶을 때

UNION 후 정렬하고 싶으면
맨 마지막에 ORDER BY를 적어주면 된다!

첫번째 SELECT 문에 ORDER BY를 써주면 작동하지 않는다.
마지막 SELECT 문에 ORDER BY를 써줘야 UNION한 값에 정렬이 된다.

0개의 댓글