SELECT *
FROM Users, Orders
전체 경우의 수를 보여준다.
-> Users 테이블에 3건, Orders 테이블에 3건의 데이터가 있으면 3x3 모든 경우의 수 테이블을 보여준다.
key값이 일치하는 것을 보여주는 것이 아니다.
SELECT *
FROM Users, Orders
WHERE User.Id = Orders.userId
Users 테이블의 Id 컬럼과 Orders 테이블의 userId가 같은 값만 가져온다
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/
INNER JOIN을 제외하고는 다 OUTER JOIN이다.
SELECT *
FROM Users
LEFT JOIN Orders ON Users.ID = Orders.userID
FROM
뒤에 쓰는 테이블이 왼쪽 테이블 LEFT JOIN
뒤에 쓰는 테이블이 오른쪽 테이블RIGHT JOIN은 LEFT JOIN과 반대.
오른쪽 테이블을 기준으로 출력한다.
주로 LEFT JOIN을 사용한다. 해석하기가 쉬움.
LEFT OUTER JOIN
, LEFT JOIN
은 같다.
RIGHT OUTER JOIN
, RIGHT JOIN
은 같다.
테이블에도 ALIAS 줄 수 있다.
SELECT *
FROM Customers AS c
INNER JOIN Orders AS o ON c.id = o.customerID
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
에 -
(마이너스)를 쓰면 빼기가 된다. DISTINCT
가 생략되어 있다고 생각하자. 디폴트가 중복제거EXCEPT
(MINUS
): 차집합
INERSECT
: 교집합
LEFT JOIN
, RIGHT JOIN
을 함께 쓴 뒤UNION
해준다.JOIN
키 조건이 여러개 일 때는 AND
로 이어서 써주면 된다.
SELECT *
FROM fuctions AS f1
INNER JOIN functions AS f2 ON f1.x = f2.y AND f1.y = f2.x
UNION 후 정렬하고 싶으면
맨 마지막에 ORDER BY
를 적어주면 된다!
첫번째 SELECT 문에 ORDER BY
를 써주면 작동하지 않는다.
마지막 SELECT 문에 ORDER BY
를 써줘야 UNION한 값에 정렬이 된다.