SQL

SQL- 문제 풀어보기 SELECT01

woody-j 2024. 1. 12. 21:30

1) 상위 n개 레코드

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회

SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1

 

한마리만 조회 하기에 LIMIT 1 추가

 

2) 강원도에 위치한 생산공장 목록 출력하기

FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.

SELECT FACTORY_ID,FACTORY_NAME,ADDRESS FROM FOOD_FACTORY WHERE ADDRESS LIKE '강원도%' ORDER BY FACTORY_ID

 

 강원도에 위치한 = WHERE 컬럼명 LIKE 포함단어

3) 조건에 맞는 회원수 구하기

USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.

 

(1) 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원

SELECT * FROM USER_INFO WHERE JOINED LIKE '2021%' AND AGE BETWEEN 20 AND 29

여기까지는 구할 수 있었다.

 

(2) 근데 회원 수를 어떻게 구하는가? COUNT를 붙여주면된다.

COUNT : 조회되는 데이터의 갯수를 반환

SELECT COUNT(*) FROM USER_INFO WHERE JOINED LIKE '2021%' AND AGE BETWEEN 20 AND 29

 

4) 3월에 태어난 여성 회원 목록 출력하기

MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.

 

SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_OF_BIRTH FROM MEMBER_PROFILE
WHERE DATE_OF_BIRTH LIKE '%03%___' AND GENDER='W' AND TLNO IS NOT NULL ORDER BY MEMBER_ID

 

오류가 났다. 주의 사항 : DATE_OF_BIRTH의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.

 

(1) 데이터 포맷 형식 설정 

SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d')

 

(2) MONTH 지정

DATE_OF_BIRTH LIKE '%03%___'
=>
MONTH(DATE_OF_BIRTH)='3'

5) 인기있는 아이스크림

상반기에 판매된 아이스크림의 맛총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.

SELECT FLAVOR FROM FIRST_HALF ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC

6) 12세 이하인 여자 환자 목록 출력하기

PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요

SELECT * FROM PATIENT WHERE AGE<=12 AND GEND_CD='W' ORDER BY AGE DESC, PT_NAME ASC

 

(1) 전화번호가 없는 경우 NONE을 어떻게 출력시키기

SELECT PT_NAME ,PT_NO ,GEND_CD,AGE,IF(TLNO IS NULL, 'NONE',TLNO) AS 'TLNO' 
FROM PATIENT 
WHERE AGE<=12 AND GEND_CD='W' 
ORDER BY AGE DESC, PT_NAME ASC

 

 

- IF(조건문, TRUE,FALSE)

IF(TLNO IS NULL, 'NONE',TLNO)

- IFNULL(컬럼명,'대체할 값')

IFNULL(TLNO, 'NONE')

 

7) 과일로 만든 아이스크림 고르기

 

상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.

SELECT FIRST_HALF.FLAVOR FROM FIRST_HALF
INNER JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
WHERE TOTAL_ORDER>3000 AND INGREDIENT_TYPE='fruit_based'
ORDER BY TOTAL_ORDER DESC

 

(1) SQL 여러 테이블에 있는 같은 데이터 연결

- INNER JOIN

SELECT 컬럼 FROM 테이블1
INNER JOIN 테이블2 ON 테이블1.공통컬럼 = 테이블2.공통컬럼

- LEFT JOIN

SELECT 컬럼 FROM 테이블1
LEFT JOIN 테이블2 ON 테이블1.공통컬럼 = 테이블2.공통컬럼

8) 재구매가 일어난 상품과 회원 리스트 구하기

ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE 
GROUP BY USER_ID, PRODUCT_ID 
HAVING COUNT(*) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC;

 

(1) 재구매가 일어난 상품 count

GROUP BY USER_ID, PRODUCT_ID 
HAVING COUNT(*) > 1

 

GROUP BY : 회원 ID와 상품 ID를 묶어 그룹화한다. 

HAVING COUNT(*) > 1 : 정보수가 1회 초과하면 그룹화 한 값을 출력한다.

 

dateFormat : https://velog.io/@gloom/sql%EB%AC%B8%EB%B2%95-dateformat

SQL 여러 테이블에 있는 같은 데이터 연결: https://gr-st-dev.tistory.com/644