SQL
고득점 Kit
지금까지 SQL
의 기본 쿼리 예제를 보면서 사용법을 익혔다.
이제 직접 문제를 풀어보자!
화이팅!!
SELECT
SQL
고득점 Kit
의 첫 번째 유형은 SELECT
!
"조건에 맞는 레코드를, 원하는 순서대로. 기본기를 처음부터 탄탄히 다져보세요."
🔗 SELECT
의 다양한 예제는 여기에 정리해두었으니 참고하기!
🔗 LEVEL1. 모든 레코드 조회하기
테이블 정보
✔ ANIMAL_INS
: 동물 보호소에 들어온 동물의 정보를 담은 테이블
필드 정보
✔ ANIMAL_ID
: 동물의 아이디
✔ ANIMAL_TYPE
: 생물 종
✔ DATETIME
: 보호 시작일
✔ INTAKE_CONDITION
: 보호 시작 시 상태
✔ NAME
: 이름
✔ SEX_UPON_INTAKE
: 성별 및 중성화 여부
문제
✔ 동물 보호소에 들어온 모든 동물의 정보를 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. 역순 정렬하기
테이블 정보
✔ ANIMAL_INS
: 동물 보호소에 들어온 동물의 정보를 담은 테이블
필드 정보
✔ ANIMAL_ID
: 동물의 아이디
✔ ANIMAL_TYPE
: 생물 종
✔ DATETIME
: 보호 시작일
✔ INTAKE_CONDITION
: 보호 시작 시 상태
✔ NAME
: 이름
✔ SEX_UPON_INTAKE
: 성별 및 중성화 여부
문제
✔ 동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회한 결과를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. 아픈 동물 찾기
테이블 정보
✔ ANIMAL_INS
: 동물 보호소에 들어온 동물의 정보를 담은 테이블
필드 정보
✔ ANIMAL_ID
: 동물의 아이디
✔ ANIMAL_TYPE
: 생물 종
✔ DATETIME
: 보호 시작일
✔ INTAKE_CONDITION
: 보호 시작 시 상태
✔ NAME
: 이름
✔ SEX_UPON_INTAKE
: 성별 및 중성화 여부
문제
✔ 동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회하는 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. 어린 동물 찾기
테이블 정보
✔ ANIMAL_INS
: 동물 보호소에 들어온 동물의 정보를 담은 테이블
필드 정보
✔ ANIMAL_ID
: 동물의 아이디
✔ ANIMAL_TYPE
: 생물 종
✔ DATETIME
: 보호 시작일
✔ INTAKE_CONDITION
: 보호 시작 시 상태
✔ NAME
: 이름
✔ SEX_UPON_INTAKE
: 성별 및 중성화 여부
문제
✔ 동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL
문 작성하기. 결과는 아이디 순으로 조회하기.
💡 POINT
- 젋은 동물:
INTAKE_CONDITION
이Aged
가 아닌 경우이다.- 동물의 아이디(
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. 동물의 아이디와 이름
테이블 정보
✔ ANIMAL_INS
: 동물 보호소에 들어온 동물의 정보를 담은 테이블
필드 정보
✔ ANIMAL_ID
: 동물의 아이디
✔ ANIMAL_TYPE
: 생물 종
✔ DATETIME
: 보호 시작일
✔ INTAKE_CONDITION
: 보호 시작 시 상태
✔ NAME
: 이름
✔ SEX_UPON_INTAKE
: 성별 및 중성화 여부
문제
✔ 동물 보호소에 들어온 모든 동물의 아이디와 이름을 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. 여러 기준으로 정렬하기
테이블 정보
✔ ANIMAL_INS
: 동물 보호소에 들어온 동물의 정보를 담은 테이블
필드 정보
✔ ANIMAL_ID
: 동물의 아이디
✔ ANIMAL_TYPE
: 생물 종
✔ DATETIME
: 보호 시작일
✔ INTAKE_CONDITION
: 보호 시작 시 상태
✔ NAME
: 이름
✔ SEX_UPON_INTAKE
: 성별 및 중성화 여부
문제
✔ 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는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);
:
테이블명
테이블을필드명1
을ASC/DESC
으로 정렬하고, 만약필드명1
이 같은 경우에는필드명2
를ASC/DESC
으로 정렬한다.
n
개 레코드🔗 LEVEL1. 모든 레코드 조회하기
테이블 정보
✔ ANIMAL_INS
: 동물 보호소에 들어온 동물의 정보를 담은 테이블
필드 정보
✔ ANIMAL_ID
: 동물의 아이디
✔ ANIMAL_TYPE
: 생물 종
✔ DATETIME
: 보호 시작일
✔ INTAKE_CONDITION
: 보호 시작 시 상태
✔ NAME
: 이름
✔ SEX_UPON_INTAKE
: 성별 및 중성화 여부
문제
✔ 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 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