728x90
📌 SQL 쿼리문의 실생순서
FROM 절 ( + JOIN)
- 조회하는 테이블 전체를 가져온다.
- 테이블에 별칭(Alias)을 붙였을 경우 출력되어야 할 컬럼 값 앞에 해당 테이블의 별칭을 꼭 붙인다.
- 예제
/*
1. [ USER ] 테이블에서
2. 모든 컬럼을 출력한다.
*/
SELECT *
FROM USER
;
/*
[ USER ] - pk:user_id / [ TEAM ] - fk:user_id
1. [ USER ] 테이블과 [ TEAM ] 테이블에서
2. 같은 user_id를 갖고 있는 데이터 중
3. [ USER ] 테이블의 name 정보와 [ TEAM ] 테이블의 team_name 정보를 출력함
*/
SELECT a.name, b.team_name
FROM USER as a JOIN TEAM as b ON a.user_id = b.user_id;
WHERE 절
- FROM절에서 읽어온 테이블에서 조건에 맞는 결과만 갖도록 데이터를 필터링한다.
- 예제
/*
1. [ USER ] 테이블에서
2. name 정보에서 앞,뒤로 '민'이라는 글자가 들어가 있는
3. 모든 컬럼을 출력한다.
*/
SELECT *
FROM USER
WHERE name LIKE '%민%'
GROUP BY 절
- 선택한 컬럼으로 그룹핑한다.
- GROUP BY 절에 컬럼을 정의하려면 SELECT 절에 반드시 존재해야 하며, 없을 경우 집계함수 처리를 해야 한다.
- 집계함수: SUM(), MIN(), MAX(), AVG() 등
- 예제
/*
1. 상품테이블에
2. cost가 100인 데이터를
4. 가격, 상품명 별 그룹핑 한 후
5. 가격, 상품명, 갯수를 출력한다.
*/
SELECT cost, pr_name, count(*)
FROM product
WHERE cost = '500'
GROUP BY cost, pr_name
;
HAVING 절
- 그룹핑 후에 각 그룹에 사용되는 조건 절이다. ( ≠ WHERE )
- HAVING 절의 조건을 WHERE절에도 사용할 수 있는 경우라면 WHERE절에 사용하는 것이 바람직하다.
- why? HAVING 절은 각 그룹에 조건을 걸기 때문에 퍼포먼스가 떨어진다.
- 예제
/*
1. 상품테이블에
2. cost가 100인 데이터를 ( WHERE에서 1차 필터를 거친다)
4. 가격, 상품명 별 그룹핑 한 데이터 중
5. 갯수가 1개 이상인 ( HAVING 에서 2차 필터를 거친다)
6. 가격, 상품명, 갯수를 출력한다.
*/
SELECT cost, pr_name, count(*)
FROM product
WHERE cost = '500'
GROUP BY cost, pr_name
HAVING count(*) > 1
;
SELECT 절
- 조건을 만족하는 데이터 중 SELECT 절에 명시한 컬럼을 출력해 준다.
ORDER BY 절
- 행의 순서에 대한 정렬을 해 준다.
- ASC - 오름차순(default) / DESC - 내림차순
- 예제
-- 오름차순
SELECT pr_name
FROM product
ORDER BY pr_name
;
-- 내림차순
SELECT pr_name
FROM product
ORDER BY pr_name DESC
;
LIMIT 절
- 결과 중 몇개의 행을 보여줄 지 선택한다.
- 예제
/*
모든 데이터 중 상위 3개만 출력된다.
*/
SELECT pr_name
FROM product
ORDER BY pr_name DESC
LIMIT 3
;
📖 참고
728x90
댓글