[TIL] #3 프로그래머스 SELECT

kiteB·2021년 8월 13일
0

TIL-SQL

목록 보기
2/7
post-thumbnail

🔥 SQL 고득점 Kit


지금까지 SQL의 기본 쿼리 예제를 보면서 사용법을 익혔다.
이제 직접 문제를 풀어보자!

화이팅!!


📌 SELECT


SQL 고득점 Kit의 첫 번째 유형은 SELECT!

"조건에 맞는 레코드를, 원하는 순서대로. 기본기를 처음부터 탄탄히 다져보세요."

🔗 SELECT의 다양한 예제는 여기에 정리해두었으니 참고하기!

✔ 모든 레코드 조회하기


🔗 LEVEL1. 모든 레코드 조회하기

문제 정리

  1. 테이블 정보
    ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

  2. 필드 정보
    ANIMAL_ID: 동물의 아이디
    ANIMAL_TYPE: 생물 종
    DATETIME: 보호 시작일
    INTAKE_CONDITION: 보호 시작 시 상태
    NAME: 이름
    SEX_UPON_INTAKE: 성별 및 중성화 여부

  3. 문제
    ✔ 동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID 순으로 조회하는 SQL문 작성하기

💡 POINT

  • 모든 필드 출력
  • ANIMAL_ID 순으로 출력

내 코드

SELECT * 
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID

SELECT * : 모든 필드를 출력하라.
FROM ANIMAL_INS: ANIMAL_INS 테이블 선택
ORDER BY ANIMAL_ID: ANIMAL_ID를 기준으로 오름차순으로 정렬하라.

📌 ORDER BY

  • SELECT로 데이터를 조회할 때, ORDER BY를 추가하여 지정된 컬럼을 기준으로 정렬할 수 있다.
  • 오름차순(ASC), 내림차순(DESC)의 두 가지 기준이 있는데, default는 오름차순이다.

✔ 역순 정렬하기


🔗 LEVEL1. 역순 정렬하기

문제 정리

  1. 테이블 정보
    ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

  2. 필드 정보
    ANIMAL_ID: 동물의 아이디
    ANIMAL_TYPE: 생물 종
    DATETIME: 보호 시작일
    INTAKE_CONDITION: 보호 시작 시 상태
    NAME: 이름
    SEX_UPON_INTAKE: 성별 및 중성화 여부

  3. 문제
    ✔ 동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회한 결과를ANIMAL_ID 역순으로 조회하는 SQL문 작성하기

💡 POINT

  • 동물 이름(NAME)과 보호 시작일(DATETIME) 필드 출력
  • ANIMAL_ID 역순으로 출력

내 코드

SELECT NAME, DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC

SELECT NAME, DATETIME : NAME, DATETIME 필드를 출력하라.
FROM ANIMAL_INS: ANIMAL_INS 테이블 선택
ORDER BY ANIMAL_ID DESC: ANIMAL_ID를 기준으로 내림차순으로 정렬하라.


✔ 아픈 동물 찾기


🔗 LEVEL1. 아픈 동물 찾기

문제 정리

  1. 테이블 정보
    ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

  2. 필드 정보
    ANIMAL_ID: 동물의 아이디
    ANIMAL_TYPE: 생물 종
    DATETIME: 보호 시작일
    INTAKE_CONDITION: 보호 시작 시 상태
    NAME: 이름
    SEX_UPON_INTAKE: 성별 및 중성화 여부

  3. 문제
    ✔ 동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 SQL문 작성하라. 결과는 아이디 순으로 출력하라.

💡 POINT

  • 아픈 동물 : INTAKE_CONDITION 필드 값이 'Sick'인 경우이다.
  • 동물의 아이디(ANIMAL_ID), 이름(NAME) 필드 출력
  • ANIMAL_ID 순으로 출력

내 코드

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID

SELECT ANIMAL_ID, NAME : ANIMAL_ID, NAME 필드 값 출력
FROM ANIMAL_INS: ANIMAL_INS 테이블 선택
WHERE INTAKE_CONDITION = 'Sick': INTAKE_CONFITION 값이 Sick인 데이터 선택
ORDER BY ANIMAL_ID: ANIMAL_ID를 기준으로 오름차순으로 정렬

📌 WHERE

  • SELECT문과 함께 사용하면, 검색할 레코드의 조건을 설정할 수 있다.
  • 테이블의 크기가 매우 크거나, 특정 조건에 맞는 레코드만을 선택하고 싶을 때 유용하다.

✔ 어린 동물 찾기


🔗 LEVEL1. 어린 동물 찾기

문제 정리

  1. 테이블 정보
    ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

  2. 필드 정보
    ANIMAL_ID: 동물의 아이디
    ANIMAL_TYPE: 생물 종
    DATETIME: 보호 시작일
    INTAKE_CONDITION: 보호 시작 시 상태
    NAME: 이름
    SEX_UPON_INTAKE: 성별 및 중성화 여부

  3. 문제
    ✔ 동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL문 작성하기. 결과는 아이디 순으로 조회하기.

💡 POINT

  • 젋은 동물: INTAKE_CONDITIONAged가 아닌 경우이다.
  • 동물의 아이디(ANIMAL_ID), 이름(NAME) 필드 출력
  • ANIMAL_ID 순으로 출력

내 코드

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID

SELECT ANIMAL_ID, NAME : ANIMAL_ID, NAME 필드 값 출력
FROM ANIMAL_INS: ANIMAL_INS 테이블 선택
WHERE INTAKE_CONDITION != 'Aged': INTAKE_CONFITION 값이 Aged가 아닌 데이터 선택
ORDER BY ANIMAL_ID: ANIMAL_ID를 기준으로 오름차순으로 정렬


✔ 동물의 아이디와 이름


🔗 LEVEL1. 동물의 아이디와 이름

문제 정리

  1. 테이블 정보
    ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

  2. 필드 정보
    ANIMAL_ID: 동물의 아이디
    ANIMAL_TYPE: 생물 종
    DATETIME: 보호 시작일
    INTAKE_CONDITION: 보호 시작 시 상태
    NAME: 이름
    SEX_UPON_INTAKE: 성별 및 중성화 여부

  3. 문제
    ✔ 동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID 순으로 조회하는 SQL문 작성하기.

💡 POINT

  • 동물의 아이디(ANIMAL_ID), 이름(NAME) 필드 출력
  • ANIMAL_ID 순으로 출력

내 코드

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

SELECT ANIMAL_ID, NAME : ANIMAL_ID, NAME 필드 값 출력
FROM ANIMAL_INS: ANIMAL_INS 테이블 선택
ORDER BY ANIMAL_ID: ANIMAL_ID를 기준으로 오름차순으로 정렬


✔ 여러 기준으로 정렬하기


🔗 LEVEL1. 여러 기준으로 정렬하기

문제 정리

  1. 테이블 정보
    ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

  2. 필드 정보
    ANIMAL_ID: 동물의 아이디
    ANIMAL_TYPE: 생물 종
    DATETIME: 보호 시작일
    INTAKE_CONDITION: 보호 시작 시 상태
    NAME: 이름
    SEX_UPON_INTAKE: 성별 및 중성화 여부

  3. 문제
    ✔ 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는SQL문 작성하기. 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 한다.

💡 POINT

  • 동물의 아이디(ANIMAL_ID), 이름(NAME), 보호 시작일(DATETIME) 필드 출력
  • NAME 기준으로 오름차순으로 출력. 단, 이름이 같은 동물 중에서는 DATETIME 기준으로 내림차순으로 정렬

내 코드

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

SELECT ANIMAL_ID, NAME, DATETIME: SELECT ANIMAL_ID, NAME, DATETIME 필드 값 출력
FROM ANIMAL_INS: ANIMAL_INS 테이블 선택
ORDER BY NAME ASC, DATETIME DESC: NAME을 기준으로 오름차순으로 정렬하고, 그 다음에 DATETIME을 기준으로 내림차순으로 정렬하라.

📌 ORDER BY 이용해서 다중 정렬

  • 왼쪽부터 순차적으로 정렬되기 때문에 우선 순위가 높은 순서대로 나열해야 한다.
  • 기본 형태
SELECT *
FROM [테이블명]
ORDER BY [필드명1] (ASC 또는 DESC), [필드명2] (ASC 또는 DESC);

: 테이블명 테이블을 필드명1ASC/DESC으로 정렬하고, 만약 필드명1이 같은 경우에는 필드명2ASC/DESC으로 정렬한다.


✔ 상위 n개 레코드


🔗 LEVEL1. 모든 레코드 조회하기

문제 정리

  1. 테이블 정보
    ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

  2. 필드 정보
    ANIMAL_ID: 동물의 아이디
    ANIMAL_TYPE: 생물 종
    DATETIME: 보호 시작일
    INTAKE_CONDITION: 보호 시작 시 상태
    NAME: 이름
    SEX_UPON_INTAKE: 성별 및 중성화 여부

  3. 문제
    ✔ 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL문 작성하기

💡 POINT

  • NAME 필드 출력
  • DATETIME 이 가장 작은 레코드 출력

내 코드

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME LIMIT 1

SELECT NAME : NAME 필드 출력
FROM ANIMAL_INS: ANIMAL_INS 테이블 선택
ORDER BY DATETIME LIMIT 1: DATETIME를 기준으로 가장 작은 값 1개 출력

📌 LIMIT

  • SELECT로 데이터를 조회할 때 LIMIT 키워드를 사용하면 한계를 지정할 수 있다.
  • 기본 형태
SELECT *
FROM [테이블명]
LIMIT [개수]

: 테이블명 테이블에서 개수만큼 레코드를 가져온다. (모든 필드)


+) OFFSET 키워드를 사용하면 가져오고자 하는 행 데이터의 시작 지점을 지정할 수 있다.

SELECT *
FROM [테이블명]
LIMIT 5 OFFSET 2

: 테이블명 테이블에서 인덱스가 2인 데이터부터 5개 가져온다. (모든 필드)


참고 자료


http://tcpschool.com/mysql/mysql_basic_select
https://dar0m.tistory.com/60
https://sikaleo.tistory.com/34

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글