*순서 대로
SELECT: 조회할 열(column)을 지정합니다.
DISTINCT: 중복된 결과를 제거합니다 (선택적).
FROM: 데이터를 가져올 테이블을 지정합니다.
JOIN: 다른 테이블과의 조인을 정의합니다.
ON: 조인의 조건을 정의합니다.
WHERE: 특정 조건에 맞는 레코드를 필터링합니다.
GROUP BY: 결과를 특정 열로 그룹화합니다.
HAVING: GROUP BY로 그룹화된 결과에 추가적인 필터링을 적용합니다.
ORDER BY: 결과를 특정 열을 기준으로 정렬합니다.
LIMIT: 반환할 레코드의 수를 제한합니다.
OFFSET: 반환할 레코드의 시작점을 지정합니다. (페이지네이션)
SELECT
DISTINCT E.first_name, E.last_name
FROM
EMPLOYEES AS E
JOIN
DEPARTMENTS AS D
ON
E.department_id = D.department_id
WHERE
E.salary > 50000
GROUP BY
E.first_name, E.last_name
HAVING
COUNT(E.employee_id) > 1
ORDER BY
E.first_name ASC, E.last_name DESC
LIMIT
10;
실제 예시
문제: REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
SELECT /*식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회*/
I.REST_ID,
I.REST_NAME,
I.FOOD_TYPE,
I.FAVORITES,
I.ADDRESS,
ROUND(AVG(R.REVIEW_SCORE),2) AS SCORE /*리뷰 평균점수는 소수점 세 번째 자리에서 반올림*/
FROM /*REST_INFO와*/
REST_INFO AS I
JOIN /*REST_REVIEW 테이블에서*/
REST_REVIEW AS R
ON
I.REST_ID = R.REST_ID
WHERE
I.ADDRESS LIKE "서울%" /*서울에 위치한*/
GROUP BY
I.REST_ID
ORDER BY /*결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬*/
SCORE DESC, I.FAVORITES DESC;