반응형

Here are the different types of the JOINs in SQL:

  • (INNER) JOIN: Returns records that have matching values in both tables
  • LEFT (OUTER) JOIN: Return all records from the left table, and the matched records from the right table
  • RIGHT (OUTER) JOIN: Return all records from the right table, and the matched records from the left table
  • FULL (OUTER) JOIN: Return all records when there is a match in either left or right table

SQL INNER JOIN  SQL LEFT JOIN  SQL RIGHT JOIN  SQL FULL OUTER JOIN




INNER JOIN :: 두 테이블에서 동시에 매치되는 값들을 리턴해준다.


LEFT JOIN ::  LEFT JOIN 키워드는 왼쪽 테이블의 모든 레코드를 리턴하고 오른쪽 테이블과 매칭을 한다.

이때 NULL이 나타나는 값은 오른쪽 테이블 값과 비교했을 때 매칭이 되지 않는 값들을 의미한다.

즉, LEFT JOIN 키워드는 오른쪽 테이블과 매칭되지 않더라도 우선 왼쪽 테이블의 모든 값을 리턴하게 된다.


RIGHT JOIN :: RiGHT JOIN 키워드는 오른쪽 테이블의 레코드를 모두 리턴하고 왼쪽 테이블이 매치되는 것을 값으로 넣어주고 왼쪽 테이블에 매치되는 것이 없다면 NULL을 리턴한다.


FULL OUTER JOIN :: FULL OUTER JOIN 키워드는 모든 두 테이블 레코드를 리턴하고 매치되지 않는 값은 NULL로 모두 리턴하게 된다. 즉, 엄청 큰 리턴 셋이 만들어지게 된다.


● LEFT OUTER JOIN

Table A와 B가 있을 때 왼쪽에 있는 Table A가 기준이 됩니다. A와 B를 비교해서  같은 것이 있을 때 그 해당 Data를 가져오고, B가 없는 경우에도 가져오는데 B에서  가져오는 칼럼은 NULL 값으로 표시됩니다.


● RIGHT OUTER JOIN

Table A와 B가 있을 때 오른쪽에 있는 Table B가 기준이 됩니다. A와 B를 비교해서 같은 것이 있을 때 그 해당 Data를 가져오고, A가 없는 경우에도 가져오는데 A에서 가져오는 칼럼은 NULL 값으로 표시됩니다.


● FULL OUTER JOIN

Table A와 B가 있을 때 (Table A, B 모두 기준), Left Outer Join과 Right Outer Join의 결과를 UNION으로 합친 것과 같습니다.




INNER JOIN


https://www.w3schools.com/sql/sql_join.asp


INNER JOIN 키워드는 두 테이블의 교집합을 가져온다.


SELECT *
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;


Customers 테이블에 값들을 붙이게 되는데 이때 Orders 테이블에서 Customers.CustomerID와 Orders.CustomerID가 같은 것들을 가져온다.


SELECT *
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
ORDER BY CustomerID ASC;

        

Orders 테이블에 붙이는데 Customers의 Orders.CustomerID와 Customers.CustomerID가 같은 것들을 붙이고

Shippers의 Orders.ShipperID와 Shippers.ShipperID가 같은 것들을 찾아 붙인다.




LEFT JOIN


LEFT JOIN 키워드는 왼쪽 테이블의 모든 레코드를 리턴하고 오른쪽 테이블과 매칭을 한다.

이때 NULL이 나타나는 값은 오른쪽 테이블 값과 비교했을 때 매칭이 되지 않는 값들을 의미한다.

즉, LEFT JOIN 키워드는 오른쪽 테이블과 매칭되지 않더라도 우선 왼쪽 테이블의 모든 값을 리턴하게 된다.

SELECT *
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

다음과 같이 하면 왼쪽 테이블의 모든 값을 리턴하지만 CustomerID가 오른쪽테이블에 1이 없기에 매칭이 되지 않아 왼쪽 테이블에서 NULL을 리턴받는 것을 알 수 있다.



RIGHT JOIN


RiGHT JOIN 키워드는 오른쪽 테이블의 레코드를 모두 리턴하고 왼쪽 테이블이 매치되는 것을 값으로 넣어주고 왼쪽 테이블에 매치되는 것이 없다면 NULL을 리턴한다.

SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;


SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;

왼쪽 키워드와 매치 되는 것이 없어도 오른쪽 키워드는 모두 리턴된다(Employees) 




FULL OUTER JOIN


FULL OUTER JOIN 키워드는 모든 두 테이블 레코드를 리턴하고 매치되지 않는 값은 NULL로 모두 리턴하게 된다.

즉, 엄청 큰 리턴 셋이 만들어지게 된다.

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;


SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

Customers 테이블 및 Orders테이블을 모두 리턴하는데 CustomerID가 서로 같은 것이 있다면 JOIN을 해주고 그 외에는 NULL로 리턴해준다.



SELF JOIN


SELF JOIN은 자신의 테이블을 조인하는 방법이다.

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;



SELECT *
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID AND A.City = B.City
ORDER BY A.City;

Customers를 A로 두고 Customers를 B로 둔 후

A와 B의 CustomerID가 같지 않으면서 A.City와 B.city가 같은 것을 A.city를 기준으로 오름차순으로 리턴해준다.


<> :: 두 식을 비교하는 비교연산자이다.
Null이 아닌 식을 비교하는 경우 왼쪽 피연산자가 오른쪽 피연산자와 같지 않으면 결과는 TRUE이고 그렇지 않으면 결과는 FALSE다.
피연산자 중 하나 또는 둘 다가 NULL이면 SET ANSI_NULLS(Transact-SQL) 항목을 참조해보자.






반응형