[프로그래머스] SQL 정리 - WHERE, ORDER BY (1)

유은선·2023년 5월 9일
0

Programmers_SQL

목록 보기
1/6
post-thumbnail

WHERE, ORDER BY(1)

조건문을 만들 때 사용한다.

🏥 아픈 동물찾기

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
WHERE INTAKE_CONDITION="Sick";

🐱 어린 동물찾기

만족하지 않는 조건을 찾을 때 NOT을 사용

SELECT ANIMAL_ID,NAME
FROM ANIMAL_INS 
WHERE NOT INTAKE_CONDITION='Aged';

🐶 이름이 없는 동물의 아이디

IS NULL을 사용해서 NULL인 정보를 검색

SELECT ANIMAL_ID
FROM ANIMAL_INS 
WHERE NAME IS NULL

👻 루시와 엘라 찾기

연산자 IN을 사용해 여러 값을 지정해 검색 가능

SELECT ANIMAL_ID,NAME,SEX_UPON_INTAKE
FROM ANIMAL_INS 
WHERE NAME IN ('Lucy','Ella','Pickle','Rogan','Rogan','Sabrina','Mitty');

🐹 이름에 el이 들어가는 동물 찾기

LIKE를 이용해 el이 들어가는 이름을 찾는다.
My Sql에서는 LIKE로 검사시 대소문자 구별을 하지 않는다고 한다.
BINARY(NAME) LIKE "%el%"로 쓰면 구분할 수 있음

SELECT ANIMAL_ID,NAME
FROM ANIMAL_INS 
WHERE NAME LIKE "%EL%" AND ANIMAL_TYPE="Dog"
ORDER BY NAME;

대문자와 소문자로 바꾸는 UPPER, LOWER함수가 존재

🌈 여러 기준으로 정렬하기

이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 하는데,
ORDER BY 문은 첫 번째 조건을 기준으로 정렬하되, 첫 번째 조건이 동일한 로우들을 만나게 될 경우 그 다음 조건을 기준으로 해당 로우들을 정렬합니다. 즉, NAME으로 정렬하고 이름이 같으면 DATETIME을 DESC로 정렬

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS 
ORDER BY NAME, DATETIME DESC

📘 조건에 맞는 도서 리스트 출력하기

DATE_FORMAT()
DATE_FORMAT(날짜 , 형식) : 날짜를 지정한 형식으로 출력

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') AS 컬럼명 FROM 테이블명

YEAR()
날짜, 시간과 관련된 함수

SELECT YEAR(NOW()) FROM 테이블명

위, 아래 코드는 모두 동일하게 동작한다.

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE,'%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE DATE_FORMAT(PUBLISHED_DATE,'%Y')='2021' AND CATEGORY='인문'
ORDER BY PUBLISHED_DATE DESC

SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE,'%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK
WHERE YEAR(PUBLISHED_DATE)='2021' AND CATEGORY='인문'
ORDER BY PUBLISHED_DATE DESC

🍦 인기있는 아이스크림

상반기 아이스크림 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같은 경우 출하 번호를 기준으로 오름차순 정렬

SELECT FLAVOR
FROM FIRST_HALF 
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID

🚗 특정 옵션이 포함된 자동차 리스트 구하기

LIKE를 이용해 네비게이션 옵션이 포함된 정보만 출력하도록 한다.

SELECT *
FROM CAR_RENTAL_COMPANY_CAR 
WHERE OPTIONS LIKE "%네비게이션%"
ORDER BY CAR_ID DESC;

🧒 나이 정보가 없는 회원 수 구하기

  • 🔥 COUNT를 이용한 첫번째 방법
    COUNT 함수를 사용할 때는 전체(*)를 대상으로 할 때 주의해야 합니다. COUNT(*)는 NULL 값을 포함하고 COUNT(AGE)와 같이 특정 컬럼을 지정해줄 경우 NULL 값을 포함하지 않기 때문입니다.
    이 문제에서는 WHERE 구에서 이미 조건을 수행하기 때문에 괜찮지만 다른 문제에서는 주의해야 합니다.
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE AGE IS NULL;
  • 🔥 SUM 함수를 이용한 두번째 방법
    조건을 충족하면 참(True)은 1을, 충족하지 못하는 거짓(False)는 0을 반환합니다.
    SUM 함수 내에 있는 AGE IS NULL이라는 조건을 충족하는 경우에만 1로 변환되어 값이 더해지기 때문에 원하는 정답을 구할 수 있습니다.
SELECT SUM(AGE IS NULL) AS USERS
FROM USER_INFO;

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

DATE_FORMAT을 이용해 출력하면 된다. MONTH()를 사용해도 동일한 결과를 얻을 수 있다!

SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE 
WHERE TLNO IS NOT NULL AND DATE_FORMAT(DATE_OF_BIRTH,'%m')='03' AND GENDER='W'
ORDER BY MEMBER_ID;

SELECT MEMBER_ID,MEMBER_NAME,GENDER,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE 
WHERE TLNO IS NOT NULL AND MONTH(DATE_OF_BIRTH)='03' AND GENDER='W'
ORDER BY MEMBER_ID;

🕗 DATETIME에서 DATE로 형 변환

DATE_FORMAT을 이용해 포맷을 지정해준다.

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,"%Y-%m-%d") AS '날짜'
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID;
profile
뭐든지 난 열심히 하지

0개의 댓글