Print
카테고리: [ MariaDB ]
조회수: 26345

기초적인 것이지만 쿼리 공부하다 헷갈리는 점이 있어 정리해보았습니다.

 

-. 대상 테이블 

mysql> select * from test_a;     
+------+------+
| num1 | num2 |
+------+------+
|   10 |   20 |
|   11 |   21 |
|   12 |   31 |
+------+------+
3 rows in set (0.00 sec)
mysql> select * from test_b;
+------+------+
| num1 | num2 |
+------+------+
|   10 |   20 |
|    1 |    2 |
|    3 |    4 |
+------+------+
3 rows in set (0.00 sec)

 

-. where 절에 조건 주었을 때

 
mysql> select *
    -> from test_a LEFT JOIN test_b
    -> on (test_a.num1=test_b.num1)
    -> where test_b.num2=20;
+------+------+------+------+
| num1 | num2 | num1 | num2 |
+------+------+------+------+
|   10 |   20 |   10 |   20 |
+------+------+------+------+
1 row in set (0.00 sec)

 

-. on 절에 조건 주었을 때

 
mysql> select *
    -> from test_a LEFT JOIN test_b
    -> on (test_a.num1=test_b.num1 AND test_b.num2=20);
+------+------+------+------+
| num1 | num2 | num1 | num2 |
+------+------+------+------+
|   10 |   20 |   10 |   20 |
|   11 |   21 | NULL | NULL |
|   12 |   31 | NULL | NULL |
+------+------+------+------+
3 rows in set (0.00 sec)
 
=> 동일하게 num1 컬럼에 대해 LEFT JOIN을 걸고 test_b.num2=20 이라는 같은 조건이지만
where절에 위치하냐 ON절에 위치하느냐에 따라 결과값이 달라짐
 
where절에 위치할 경우 : num1 컬럼에 대한 outer join 결과값에 대해 num2=20 을 추출
on절에 위치할 경우 : JOIN 조건이 num1 컬럼 뿐만 아니라 num2=20 까지 포함되게 됨 
 
=> SELECT 문 처리 순서 상 FROM 절, WHERE절 차이가 있어 추출 데이터가 달라지기 때문
 

-. SELECT 문 처리 순서

 
- 문법 순서 -

SELECT               - 1
FROM                 - 2
WHERE                - 3
GROUP BY             - 4
HAVING               - 5
ORDER BY             - 6
- 실행 순서 -

FROM                 - 1
WHERE                - 2
GROUP BY             - 3
HAVING               - 4
SELECT               - 5
ORDER BY             - 6