SQL은 데이터베이스(DB)에서 데이터를 다루기 위한 언어입니다.
정보 찾기: 예를 들어, "지난달에 가장 많이 팔린 상품은 무엇인가?"라는 질문에 답하기 위해 사용됩니다.
정보 입력 및 수정: 새로운 상품 정보를 데이터베이스에 추가하거나, 기존 정보를 수정할 때 사용됩니다.
정보 삭제: 예전에 사용하던 상품 정보나 더 이상 필요 없는 정보를 제거할 때 사용됩니다.
리포트나 통계: 여러 가지 정보를 종합하여, 예를 들어 "올해 가장 많은 이익을 낸 분기는 언제인가?" 같은 질문에 답할 수 있습니다.
테이블은 데이터베이스의 핵심 구성 요소 중 하나로, 행(row)과 열(column)을 가진 "표"와 유사한 형태로 데이터를 저장합니다. 각 테이블은 특정한 "주제"나 "개념"에 대한 정보를 모아 놓습니다. 예를 들어, "고객" 테이블은 고객에 관한 정보를, "주문" 테이블은 주문에 관한 정보를 저장할 수 있습니다.
테이블 내에서 컬럼은 "필드"나 "속성"이라고도 하며, 테이블에서 관리하려는 각각의 정보 유형을 나타냅니다. 예를 들어, "고객" 테이블의 경우 컬럼은 '고객ID', '이름', '이메일 주소', '전화번호' 등이 될 수 있습니다.
적는 순서
SELECT - DISTINCT -FROM - JOIN - ON - WHERE - GROUP BY - HAVING - 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;
'주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여' 라는 문제가 있다면,
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
JOIN과 ON: JOIN과 ON 문법은 주로 두 개 이상의 테이블에서 데이터를 결합할 때 사용됩니다.
JOIN
의 종류에는 INNER, LEFT, RIGHT가 있습니다. 여기서는 가장 기본적인INNER JOIN
에 대해 알아보겠습니다.
가져올 테이블을
JOIN
뒤에 적어주고, 두 테이블의 공통된 열을 지정하여 어떻게 연결되어야 하는지 지정하기 위해ON
문법을 사용해주면 됩니다.SELECT employees.name, departments.name FROM employees JOIN departments ON employees.departmentID = departments.id;
SELECT
USED_GOODS_BOARD.TITLE,
USED_GOODS_BOARD.BOARD_ID,
USED_GOODS_REPLY.REPLY_ID,
USED_GOODS_REPLY.WRITER_ID,
USED_GOODS_REPLY.CONTENTS,
DATE_FORMAT(USED_GOODS_REPLY.CREATED_DATE, '%Y-%m-%d') AS FORMATTED_CREATED_DATE
FROM
USED_GOODS_BOARD
JOIN
USED_GOODS_REPLY
ON
USED_GOODS_BOARD.BOARD_ID = USED_GOODS_REPLY.BOARD_ID
WHERE
MONTH(USED_GOODS_BOARD.CREATED_DATE) = 10 AND YEAR(USED_GOODS_BOARD.CREATED_DATE) = 2022
ORDER BY
USED_GOODS_REPLY.CREATED_DATE,
USED_GOODS_BOARD.TITLE;
SELECT
B.TITLE,
B.BOARD_ID,
R.REPLY_ID,
R.WRITER_ID,
R.CONTENTS,
DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS FORMATTED_CREATED_DATE
FROM
USED_GOODS_BOARD AS B
JOIN
USED_GOODS_REPLY AS R
ON
B.BOARD_ID = R.BOARD_ID
WHERE
MONTH(B.CREATED_DATE) = 10 AND YEAR(B.CREATED_DATE) = 2022
ORDER BY
R.CREATED_DATE,
B.TITLE
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;
Column에서 NULL이 나타나면 어떻게 처리할 것인가?
1. WHERE 절에서 NULL 제외
NULL 값을 제외하려면 WHERE 절에 조건을 추가합니다.WHERE TLNO IS NOT NUL
2. NULL을 특정 값으로 대체 (COALESCE)
COALESCE 함수를 사용하여 NULL 값을 특정 값으로 대체할 수 있습니다.SELECT COALESCE(TLNO, 'N/A') AS TLNO, MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH
3. CASE 문으로 처리
CASE 문을 사용하여 NULL값을 특별히 처리할 수 있습니다.SELECT CASE WHEN TLNO IS NULL THEN 'N/A' ELSE TLNO END AS TLNO, MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH FROM MEMBER_PROFILE
데이터의 갯수를 세야한다면 COUNT로(단, SELECT에서만 사용 가능)
SELECT COUNT(USER_ID) AS USERS
문자열 데이터 중 특정 값을 찾아야 한다면 %로
WHERE ADDRESS LIKE '경기도%'
MAX, MIN은 SELECT에서만 사용할 수 있다. 그래서 이런 코드가 나온다.
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);