Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 프로그래머스
- 쿼리문법
- 데이터필드
- 자동 commit
- Django웹개발
- 설문조사앱
- 알고리즘풀이
- python웹개발
- MTV패턴
- sql정리
- Django서버
- 알고리즘 자동 업로드
- Django웹서버개발
- 디지털신호처리설계
- matlab 디지털신호처리
- programmers
- embeddedSW
- SQL
- 링크필드
- Django DB
- N으로 표현
- 완주하지 못한 선수
- bandpass filter
- Django cycle
- 웹개발
- 코딩테스트
- 왜 개발이 하고싶은가
- Django
- select
- 통신인터페이스
Archives
- Today
- Total
카이로스의 시간
Database SQL 쿼리 문법 정리 Part1 본문
알고리즘 테스트를 위한 SQL 문법을 정리합니다.
Programmers의 SQL 고득점 Kit 테스트에 있는 문제의 풀이 위주로 작성했습니다.
이 프로그래머스 SQL 문제들은 SELECT를 통해서 데이터를 조회하는 방식의 문제가 주로 출제됩니다.
그래서 여기서는 SELECT 쿼리 명령문 위주로 보도록 하겠습니다. (SELECT 외에 SQL 쿼리 명령은 UPDATE, INSERT, DELETE가 있습니다.)
SELECT
- ANIMAL_INS라는 테이블에서 모든 칼럼 조회
SELECT * FROM ANIMAL_INS
- ANIMAL_INS에서 A, B, C칼럼 조회
SELECT A, B, C FROM ANIMAL_INS
- ANIMAL_INS에서 A, B 칼럼 가져와서 C 칼럼 기준으로 내림차순(역순) 정렬
SELECT A, B FROM ANIMAL_INS ORDER BY C DESC
- ANIMAL_INS에서 A, B 칼럼 가져와서 C 칼럼 기준으로 오름차순 정렬
SELECT A, B FROM ANIMAL_INS ORDER BY C ASC
- ANIMAL_INS에서 칼럼 중 ATTR 칼럼이 'VALUE'인 로우의 A, B 칼럼 조회
SELECT A, B FROM ANIMAL_INS WHERE ATTR = 'VALUE'
- ANIMAL_INS에서 칼럼 중 ATTR 칼럼이 'VALUE'가 아닌 로우의 A, B 칼럼 조회
SELECT A, B FROM ANIMAL_INS WHERE ATTR != 'VALUE'
- ANIMAL_INS에서 NAME은 오름차순, 같은 이름이면 DATETIME은 내림차순으로 A, B칼럼 조회
SELECT A,B FROM ANIMAL_INS ORDER BY NAME ASC, DATETIME DESC
- ANIMAL_INS에서 DATETIME을 오름차순으로 정렬해서 상위 1개(TOP)의 NAME을 조회
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1
- ANIMAL_INS에서 DATETIME을 내림차순으로 정렬해서 상위 1개(TOP)의 DATETIME을 조회
SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1
- ANIMAL_INS에서 DATETIME 중 최댓값 조회
SELECT MAX(DATETIME) FROM ANIMAL_INS
- ANIMAL_INS에서 DATETIME 중 최솟값 조회
SELECT MIN(DATETIME) FROM ANIMAL_INS
- ANIMAL_INS에서 로우 수 세기
SELECT COUNT(*) FROM ANIMAL_INS
- ANIMAL_INS에서 동일한 NAME의 중복을 제외하고 로우 수 세기
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS
- ANIMAL_INS 에서 ANIMAL_TYPE을 기준으로 정렬하고, 그룹핑해서 ANIMAL_TYPE, 해당되는 ROW수 세기
SELECT ANIMAL_TYPE COUNT(ANIMAL_TYPE) FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
- ANIMAL_INS에서 NAME으로 그룹핑했을때 NAME의 수가 1이상인 것들만 NAME, COUNT(NAME)조회, 이때 NAME기준으로 정렬
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS
GROUP BY NAME HAVING COUNT(NAME) > 1
ORDER BY NAME
- ANIMAL_OUTS에서 HOUR(DATETIME)이 9이상이고 20미만인 것들 중 HOUR(DATETIME) 기준으로 그룹핑, 1을 기준으로 정렬해서 HOUR(DATETIME, COUNT(HOUR(DATETIME)) 조회 이때 HOUR(DATETIME은 HOUR로 출력되고, COUNT(HOUR(DATETIME))은 COUNT로 출력
SELECT HOUR(DATETIME) AS HOUR, COUNT(HOUR(DATETIME)) AS COUNT FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20
GROUP BY HOUR(DATETIME)
ORDER BY 1
- TEMP_TABLE을 생성해서 0부터 23까지의 값을 갖는 테이블을 만들고, TEMP_TABLE의 H를 기준으로 그룹핑, 정렬 진행 그리고, 이걸 ANIMAL_OUTS와 LEFT OUT JOIN(HOUR(DATETIME)이 TEMP_TABLE의 H인 경우)해서 H, COUNT(ANIMAL_ID)를 출력
WITH RECURSIVE TEMP_TABLE AS (
SELECT 0 AS H
UNION ALL
SELECT H+1 FROM TEMP_TABLE WHERE H < 23
)
SELECT H, COUNT(ANIMAL_ID) AS COUNT
FROM TEMP_TABLE
LEFT OUTER JOIN ANIMAL_OUTS
ON HOUR(DATETIME) = TEMP_TABLE.H
GROUP BY H
ORDER BY H
참고) UNION ALL은 결합시 중복제거 X, UNION은 결합시 중복 제거
참고) JOIN할때 LEFT OUTER라고 명시했는데 여기서 LEFT는 FROM에서 선언한 TEMP_TABLE임
예를 들어, FROM A LEFT OUTER JOIN B ON C = D 이렇게 쓰면 C=D인 것을 JOIN하고 기준이 되는 A는 모두 가져오라는 의미.
- ANIMAL_INS에서 NAME 칼럼이 NULL인 로우를 조회
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL
- ANIMAL_INS에서 NAME 칼럼이 NULL이 아닌 로우를 조회
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL
- ANIMAL_INS에서 ANIMAL_TYPE, NAME(NAME이 NULL이면 "No name"으로 대체), SEX_UPON_INTAKE를 ANIMAL_ID를 기준으로 조회
SELECT ANIMAL_TYPE, IFNULL(NAME, "No name"), SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID
'기타' 카테고리의 다른 글
로또 번호 자동 생성기 (0) | 2023.09.11 |
---|---|
Database SQL 쿼리 문법 정리 Part2 (0) | 2022.04.10 |
GCP로 git commit, push 자동 시스템 구축 (0) | 2022.03.29 |
[디지털 신호처리 설계] dtmf (2) | 2017.12.10 |
텐서플로우(tensorflow) 설치 (0) | 2017.09.14 |