문제설명
데이터 베이스안에서 NAME, ANIMAL_ID 등 여러 컬럼 중 이름에 EL이 들어가는 개의 ANIMAL_ID와 NAME을 이름 순으로 조회하는 코드
SELECT ANIMAL_ID, NAME FROM 테이블이름
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE "%EL%"
ORDER BY NAME
여기서 LIKE를 통해 EL을 기준으로 앞뒤의 어떤 문자로든 구성되어 있는 NAME을 찾는 로직으로 구현,
여기서 LIKE를 다시 알게 되었음!
IFNULL : IFNULL(colunm_name, 'default_value') 첫번째 인자 값이 NULL인 경우 두번째 인자 값을 반환
ISNULL : WHERE A.column ISNULL 하면 NULL을 가진 레코드 조회 가능.
DATE_FORMAT(컬럼, 출력 형식) :
DATE_FORMAT(HIRE_YMD, '%Y-%m-%d')
#일반적으로 HIRE_YMD 컬럼을 출력하면, 시간이 00:00:00 시, 분, 초를 포함하여 출력함
#따라서 DATE_FORMAT 함수를 통해 '%Y-%m-%d'를 통해 연/월/일 까지만 출력하도록 지정
문제 설명
다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 의미합니다.
Column nameTypeNullablePRODUCT_ID | VARCHAR(10) | FALSE |
PRODUCT_NAME | VARCHAR(50) | FALSE |
PRODUCT_CD | VARCHAR(10) | TRUE |
CATEGORY | VARCHAR(10) | TRUE |
PRICE | NUMBER | TRUE |
문제
FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.
예시
FOOD_PRODUCT 테이블이 다음과 같을 때
PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICEP0018 | 맛있는고추기름 | CD_OL00008 | 식용유 | 6100 |
P0019 | 맛있는카놀라유 | CD_OL00009 | 식용유 | 5100 |
P0020 | 맛있는산초유 | CD_OL00010 | 식용유 | 6500 |
P0021 | 맛있는케첩 | CD_OL00001 | 소스 | 4500 |
P0022 | 맛있는마요네즈 | CD_OL00002 | 소스 | 4700 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICEP0020 | 맛있는산초유 | CD_OL00010 | 식용 |
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1
# 두가지가 가능
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT)
문제설명
PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.
SELECT
SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY,
COUNT(*) AS PRODUCTS
FROM
PRODUCT
GROUP BY
CATEGORY
ORDER BY
CATEGORY;
미리 SELECT를 해놓아서 새로운 테이블을 구성하고, 그 중에서 CATEGORY를 통해 GROUP BY를 수행하면서 새로운 값을 기준으로 그 개수를 구하는 방식으로 진행함.
DATE 컬럼은 YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND() 으로 원하는 부분을 추출 가능하다.
FIND_IN_SET() : 리스트 내에 요소가 존재하는지 확인
SELECT CAR_TYPE, COUNT(*) AS CARS FROM CAR_RENTAL_COMPANY_CAR
WHERE FIND_IN_SET('통풍시트', OPTIONS) or FIND_IN_SET('열선시트', OPTIONS) or FIND_IN_SET('가죽시트', OPTIONS)
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE
SQL의 명령어 순서
- SELECT: 필요한 열을 선택합니다.
- FROM: 데이터를 가져올 테이블을 지정합니다.
- JOIN: 필요한 경우, 다른 테이블과의 조인을 수행합니다.
- WHERE: 특정 조건을 충족하는 행을 선택합니다.
- GROUP BY: 그룹화를 수행합니다. (합계, 평균 등 집계 함수와 함께 사용됩니다)
- HAVING: GROUP BY 절과 함께 사용되며, 그룹에 대한 조건을 지정합니다.
- ORDER BY: 결과를 정렬합니다.
- LIMIT: 결과의 행 수를 제한합니다.
다음은 식품공장의 주문정보를 담은 FOOD_ORDER 테이블입니다. FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE,OUT_DATE,FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문양, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.
Column nameTypeNullableORDER_ID | VARCHAR(10) | FALSE |
PRODUCT_ID | VARCHAR(5) | FALSE |
AMOUNT | NUMBER | FALSE |
PRODUCE_DATE | DATE | TRUE |
IN_DATE | DATE | TRUE |
OUT_DATE | DATE | TRUE |
FACTORY_ID | VARCHAR(10) | FALSE |
WAREHOUSE_ID | VARCHAR(10) | FALSE |
문제
FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.
예시
FOOD_ORDER 테이블이 다음과 같을 때
ORDER_IDPRODUCT_IDAMOUNTPRODUCE_DATEIN_DATEOUT_DATEFACTORY_IDWAREHOUSE_IDOD00000051 | P0002 | 4000 | 2022-04-01 | 2022-04-21 | 2022-04-21 | FT19970003 | WH0005 |
OD00000052 | P0003 | 2500 | 2022-04-10 | 2022-04-27 | 2022-04-27 | FT19970003 | WH0006 |
OD00000053 | P0005 | 6200 | 2022-04-15 | 2022-04-30 | 2022-05-01 | FT19940003 | WH0003 |
OD00000054 | P0006 | 1000 | 2022-04-21 | 2022-04-30 | NULL | FT19940003 | WH0009 |
OD00000055 | P0008 | 1500 | 2022-04-25 | 2022-05-11 | 2022-05-11 | FT19980003 | WH0009 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
ORDER_IDPRODUCT_IDOUT_DATE출고여부OD00000051 | P0002 | 2022-04-21 | 출고완료 |
OD00000052 | P0003 | 2022-04-27 | 출고완료 |
OD00000053 | P0005 | 2022-05-01 | 출고완료 |
OD00000054 | P0006 | 출고미정 | |
OD00000055 | P0008 | 2022-05-11 | 출고대기 |
SELECT
ORDER_ID,
PRODUCT_ID,
DATE_FORMAT(OUT_DATE, '%Y-%m-%d') AS OUT_DATE,
CASE
WHEN OUT_DATE <= '2022-05-01' THEN '출고완료'
WHEN OUT_DATE IS NULL THEN '출고미정'
ELSE '출고대기'
END AS 출고여부
FROM
FOOD_ORDER
ORDER BY
ORDER_ID;
CASE 를 통해 조건을 만들고, 해당 조건에 따라 값을 THEN으로 부여 이후, END AS 를 통해 새로운 컬럼의 값이라는 것을 알려줌
'LG 헬로비전 DX DATA SCHOOL > DATA BASE' 카테고리의 다른 글
데이터 베이스 (0) | 2023.07.25 |
---|---|
Mongo DB (0) | 2023.07.24 |
Oracle (0) | 2023.07.21 |
파이썬 MySQL 연동 (0) | 2023.07.20 |
DATA BASE 4 (0) | 2023.07.20 |