본문 바로가기
LG 헬로비전 DX DATA SCHOOL/DATA BASE

SQL 코테

by 황밤 2024. 4. 5.
728x90
반응형

 

문제설명

데이터 베이스안에서 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 nameTypeNullable
PRODUCT_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_CDCATEGORYPRICE
P0018 맛있는고추기름 CD_OL00008 식용유 6100
P0019 맛있는카놀라유 CD_OL00009 식용유 5100
P0020 맛있는산초유 CD_OL00010 식용유 6500
P0021 맛있는케첩 CD_OL00001 소스 4500
P0022 맛있는마요네즈 CD_OL00002 소스 4700

SQL을 실행하면 다음과 같이 출력되어야 합니다.

PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE
P0020 맛있는산초유 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의 명령어 순서

 

  1. SELECT: 필요한 열을 선택합니다.
  2. FROM: 데이터를 가져올 테이블을 지정합니다.
  3. JOIN: 필요한 경우, 다른 테이블과의 조인을 수행합니다.
  4. WHERE: 특정 조건을 충족하는 행을 선택합니다.
  5. GROUP BY: 그룹화를 수행합니다. (합계, 평균 등 집계 함수와 함께 사용됩니다)
  6. HAVING: GROUP BY 절과 함께 사용되며, 그룹에 대한 조건을 지정합니다.
  7. ORDER BY: 결과를 정렬합니다.
  8. LIMIT: 결과의 행 수를 제한합니다.

조건별로 분류하여 주문상태 출력하기
제출 내역
darklight
sublimevimemacs
MySQL 
문제 설명

 

다음은 식품공장의 주문정보를 담은 FOOD_ORDER 테이블입니다. FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE,OUT_DATE,FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문양, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.

Column nameTypeNullable
ORDER_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_ID
OD00000051 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 를 통해 새로운 컬럼의 값이라는 것을 알려줌

반응형
LIST

'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