SELECT 문
쿼리문 중에서 가장 대표적이고 자주 사용하는 쿼리문으로 SELECT가 있다.
서비스를 운영한다면 가장 많이 실행되는 것은 삭제, 회원가입, 수정이 아닌 바로 조회다.
우리가 어떤 쇼핑몰 사이트를 이용한다고 생각해 보자.
먼저 회원가입을 하고, 로그인을 하게 된다.
그 후 구매하고 싶은 상품을 검색하고, 찾아보고 선택하게 된다.
여러 상품이 담겨있는 장바구니를 통해서 구매 버튼을 누르고 결제를 진행한다.
위와 같은 일련의 과정 중에서 가장 많이 사용되는 것은 조회이다. 로그인을 하려면 맞는 회원인지 검증해야 되고, 상품들을 띄워줘야 되고, 어떤 상품들이 장바구니에 있는지 확인하고 등의 기능들이 SELECT를 통해서 수행하게 된다.
여러 가지 SELECT 문법을 사용하여 어떤 것이 있는지 살펴보자.
WHERE
WHERE [속성명] [조건];
WHERE [속성명][조건] AND [속성명][조건]; # 두 조건에 다 만족할 때
WHERE [속성명][조건] OR [속성명][조건]; # 두 조건 중 하나만 만족할 때
무언가를 조회할 때 조건을 통해서 조회할 수 있다.
이러한 조건을 설정해 주는 것이 WHERE 절이다.
ORDER BY
ORDER BY [속성명] [ASC | DESC]
선택한 속성을 순서대로 정렬해 준다.
ORDER BY의 기본 정렬은 ASC로 오름 차순으로 정렬해 준다. 따로 내림 차순으로 정렬하고 싶으면 DESC를 적용해 줘야 된다.
ORDER BY에서 두 가지의 속성을 적용할 수도 있다.
emp_no가 같을 때 salary 기준으로 내림 차순으로 정렬하게 적용해 본 예시다.
GROUP BY
GROUP BY [속성명]
GROUP BY는 특정 열의 다른 행에 동일한 값이 있는 경우 해당 행을 그룹으로 정렬해 준다.
HAVING
HAVING [속성명] [조건]
WHERE 절과 비슷하게 조건을 설정하는 함수이지만 집계 함수에 대해서 조건을 설정하는 함수이다.
주의할 점으로는 HAVING 절은 꼭 GROUP BY절 다음에 나와야 한다는 점이다. 순서가 바뀌면 에러가 발생한다.
IN
IN (값, 값...)
IN을 사용하면 지정된 값들 중에 있는 것만 조회할 수 있다.
주로 조건절과 같이 어떠한 조건을 지정하는 데 사용된다.
집계 함수(SUM, AVG, COUNT)
종류 | 설명 |
COUNT() | 총 레코드의 갯수를 반환한다. |
SUM() | 열의 모든 값을 더해준다. |
AVG() | 열의 평균 값을 반환한다. |
MIN() | 열의 최소값을 반환한다. |
MAX() | 열의 최대값을 반환한다. |
ROUND() | 소수점을 반올림 해준다. |
집계 함수를 사용할 때는 괄호 안에 속성명을 지정하여 사용한다. 해당 표 외에도 여러 가지 집계 함수가 있다.
속성명 외에도 '*' 와 같은 여러 옵션을 사용할 수 있다.
JOIN
우리가 원하는 정보를 조회할 때 하나의 테이블에서 찾을 수 없을 때도 있다. 이때 JOIN을 사용하여 테이블을 결합해 원하는 정보를 찾을 수 있게 해줘야 한다.
INNER JOIN
두 테이블에서 ON 절의 조건을 만족하는 모든 행을 결합하여 출력해 준다.
예제를 살펴보면 employees 테이블에서 직원 번호와 salaries 테이블에서 직원 번호가 일치할 경우 150,000 이상 급여를 받는 직원의 성과 급여를 출력했다.
참고로 INNER JOIN은 INNER를 생략하고 그냥 JOIN만 써도 사용할 수 있다. (둘 다 동일함)
LEFT JOIN
첫 번째 테이블을 기준으로, 두 번째 테이블을 결합하는 JOIN이다.
이때 ON 절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값은 그대로 가져온다. (해당 레코드의 두 번째 테이블의 필드 값이 모두 NULL로 표시)
예시를 살펴보면 emp_no가 같은 값들을 기준으로 두 개의 테이블을 하나로 합쳐서 모든 속성을 출력하는 것을 알 수 있다.
참고로 LEFT JOIN과 LEFT OUTER JOIN은 동일한 것이기 때문에 아무거나 사용해도 무방하다.
RIGHT JOIN
LEFT JOIN과 반대로 두 번째 테이블을 기준으로 첫 번째 테이블을 결합하는 JOIN이다.
ON 절의 조건을 만족하지 않는 경우에는 두 번째 테이블의 필드 값은 그대로 가져온다. (해당 레코드의 첫 번째 테이블의 필드 값은 모두 NULL로 표시)
예시를 보면 titles 테이블에서 emp_no와 salaries.emp_no가 같을 때 조건을 통해서 title과 salary를 출력해 준다.
RIGHT JOIN도 RIGHT OUTER JOIN과 동일하다.
서브 쿼리
서브 쿼리는 SELECT문 안에서 SELECT문을 한 번 더 사용하여 테이블을 합치는 방법 중 하나이다.
salaries 테이블에서 평균 급여 이상의 받는 직원의 번호와 급여를 출력해 보았다.
서브 쿼리를 적용할 수 있는 위치가 정해져 있는데 아래와 같다.
- SELECT (속성으로 서브 쿼리 가능)
- FROM(테이블로 서브 쿼리 가능)
- WHERE(조건으로 서브 쿼리 가능)
- HAVING(조건으로 서브 쿼리 가능)
- ORDER BY(속성으로 서브 쿼리 가능)
참고 자료
'DB' 카테고리의 다른 글
MySQL - View & Index (0) | 2023.11.11 |
---|---|
데이터베이스 - 인덱스 (0) | 2023.11.10 |
MySQL - SQL (0) | 2023.11.09 |
MySQL (0) | 2023.11.08 |
데이터베이스 - 트랜잭션과 무결성 (2) | 2023.10.28 |