일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- selenium
- pytorch
- Tensor
- codingtest
- 추천 시스템
- 협업 필터링
- 코딩테스트
- 머신러닝
- recommendation system
- 웹크롤링
- 추천시스템
- Python
- 코테
- SGD
- Cosine-similarity
- coursera
- 분산 시스템
- wordcloud
- 데이터 엔지니어링
- 웹스크래핑
- 프로그래머스
- TF-IDF
- 백준
- 알고리즘
- 파이썬
- 시각화
- 딥러닝
- 부스트캠프
- 데이터
- Overfitting
- Today
- Total
개발자식
[SQL] 문법 정리 본문
sql 구문 순서
- SELECT 컬럼명 - (5)
- FROM 테이블명 - (1)
- WHERE 테이블 조건 - (2)
- GROUP BY 컬럼명 - (3)
- HAVING 그룹 조건 - (4)
- ORDER BY 컬럼명 - (6)
- LIMIT 시작위치(offset), 반환 개수 - (7)
- FROM : SQL 구문이 들어오면 테이블을 먼저 확인한다.
- WHERE : 테이블에서 주어진 조건에 맞는 데이터들을 추출한다.
- GROUP BY : 공통적인 데이터들기리 묶어 그룹을 만든다
- HAVING : 공통적인 데이터들이 묶여진 그룹 중, 주어진 조건에 맞는 그룹들을 추출한다.
- SELECT : 최종적으로 추출된 데이터들을 조회한다.
- ORDER BY : 추출된 데이터들을 정렬한다.
- LIMIT : 추출된 데이터들에서 몇 개의 행을 반환할 것인지 제한한다.
* SELECT 다음으로 오는 구문은 ORDER BY 뿐이므로, SELECT에서 만들어지는 Alias는 ORDER BY 구문에서만 사용 가능하다.
* LIMIT의 시작 위치는 0부터 시작하므로 LIMIT 2,3 이면 세번 째 행부터 3개의 행을 반환한다.
WHERE절
- 기본적인 연산자로 대소를 비교할 때 사용되는 >, <, >=, <= 와 같은 것들이 있으며, 같음을 나타내는 = 와 서로 다름을 나타내는 != 또는 <>이 있다.
- 여러개의 조건을 함께 사용해야 하는 경우 논리 연산자를 사용한다.
- AND : 좌변도 참이고 우변도 참이면 그 조건에 해당하는 행(row)을 가져온다.
- OR : 좌변 또는 우변이 참이면 그에 해당하는 행(row)를 가져온다.
- NOT : 참이 아닐때 그에 해당하는 행(row)을 가져온다.
연산자 | 사용 예 | |
비교 | =, <>, >, <, >=, <= | price < 20000 |
범위 | BETWEEN | price BETWEEN 2000 AND 4000 |
집합 | IN, NOT IN | name IN ("철수", "영희") |
패턴 | LIKE | name LIKE ='%길동%' |
NULL | IS NULL, IS NOT NULL | price IS NULL |
복합 조건 | AND, OR, NOT | (price < 10000) AND (name LIKE ='%길동%') |
집계함수
- 집계함수는 값들의 집합을 계산해서 하나의 값을 리턴하는 함수이다.
- COUNT(*)를 제외하고, 집계함수는 NULL 값을 무시한다.
- WHERE절에서 바로 집계함수를 사용할 수 없다. GROUP BY를 하고 HAVING절에 집계함수를 쓰거나 WHERE절에 서브쿼리에서 집계함수를 사용할 수 있다.
- GROUP BY를 사용할 경우, ORDER BY에서 집계함수를 이용하여 정렬할 수 있다.
ex)
잘못된 사용
SELECT math_score
FROM scores
WHERE english_score = MIN(english_score)
올바른 사용
SELECT math_score
FROM scores
WHERE english_score = (SELECT MIN(english_score) FROM scores)
집계함수 종류
1. COUNT
- 특정 열의 행의 개수를 세는 함수
- COUNT(*): 테이블에 존재하는 행의 개수가 반환되고
- COUNT(열이름): 특정 열에 대해서 개수를 세면 해당 열이 NULL이 아닌 행의 개수를 반환한다.
- COUNT(DISTINCT 열이름): 열에서 중복을 제외한 값의 개수를 반환한다.
2. MIN, MAX
- 최솟값, 최대값 구하는 함수
- 숫자 외에도 문자, 문자열에도 사전 순으로 가장 앞선, 느린 데이터가 반환된다.
- MIN(열이름): 열에서 최솟값
- MAX(열이름): 열에서 최댓값
3. AVG/SUM
- 숫자인 값에 대해서만 연산 가능
- NULL은 무시하고 계산된다. NULL을 0으로 계산하고 싶으면 변경해줘야 한다.
- AVG(열이름): 열의 평균
- SUM(열이름): 열의 합
Where과 Having의 차이
Where
- 항상 from 뒤에 위치하고 조건에는 다양한 비교 연산자들이 사용되어 구체적인 조건을 줄 수 있다.
Having
- 항상 group by 뒤에 위치하고 where 조건절과 마찬가지로 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있다.
차이점
- where은 기본적인 조건절로서 우선적으로 모든 필드를 조건에 둘 수 있지만 having은 group by 된 이후 특정한 필드로 그룹화 되어진 새로운 테이블에 조건을 줄 수 있다.
- where절에서는 집계함수를 쓸 수 없고, having 절에서는 쓸 수 있다.
- having 절은 그룹을 필터링하는 데 사용된다.
- where 절은 행을 필터링 하는 데 사용된다.
-> 결론 : where 절은 그룹화 또는 집계가 발생하기 전에 필터링, having 절은 그룹화 또는 집계가 발생한 후 필터링
ORDER BY절
- ORDER BY절 뒤에 우선순위가 있는 열을 순서대로 적는다.
- ASC : 오름차순, DESC : 내림차순 (ASC가 디폴트)
- 여러 열을 다른 정렬 방식으로 적용할 수 있다.
ex) ORDER BY NAME ASC ,DATETIME DESC
SELECT절
- DISTINCT 키워드를 사용하여 컬럼명이 중복되지 않은 레코드만 반환할 수 있다.
- SELECT DISTINCT 컬럼명
- SELECT COUNT(DISTINCT 컬럼명)
IFNULL
- 해당 컬럼의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수이다.
SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명;
JOIN
- JOIN을 사용하면 두 개의 테이블을 엮어서 원하는 데이터를 추출할 수 있다.
- INNER JOIN : 내부 조인 -> 교집합
- LEFT/RIGHT JOIN -> 부분 집합
- OUTER JOIN : 외부 조인 -> 합집합
EX)
ID | ENAME |
1 | KIM |
2 | JUNG |
3 | CHOI |
ID | KNAME |
1 | 김 |
2 | 정 |
4 | 박 |
5 | 이 |
1. INNER JOIN:
SELECT A.ID, A.ENAME, A.KNAME
FROM A INNER JOIN B
ON A.ID = B.ID
ID | ENAME | KNAME |
1 | KIM | 김 |
2 | JUNG | 정 |
2. LEFT JOIN
SELECT A.ID, A.ENAME, A.KNAME
FROM A LEFT JOIN B
ON A.ID = B.ID
ID | ENAME | KNAME |
1 | KIM | 김 |
2 | JUNG | 정 |
3 | CHOI | NULL |
대소문자
- UPPER(문자열 or 열 이름) : 데이터 값을 대문자로 변환
- LOWER(문자열 or 열 이름) : 데이터 값을 소문자로 변환
SELECT ANIMAL_ID,NAME
FROM ANIMAL_INS
WHERE lower(NAME) LIKE '%el%'
ORDER BY NAME
-> NAME에 'el'이 들어가는 동물 찾는 조건
DATETIME
SELECT ANIMAL_ID,NAME,DATE_FORMAT(DATETIME,'%Y-%m-%d') AS "날짜"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC
- DATETIME '2014-08-08 04:20:00'와 같은 형식에서 2014-08-08와 같은 형태로 변환해서 출력
- 연산 기호, 대소 비교 사용 가능
- 대소문자 의미 다르기 때문에 주의해서 사용
ex) %Y: 1999, %y: 99
관련 문제:
https://school.programmers.co.kr/learn/courses/30/lessons/131120
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
NULL 데이터 조회
- fileds IS NULL, fields IS NOT NULL로 조회
- fields = NULL 아님!
SELECT *
FROM TargetTable
WHERE TargetField IS NOT NULL
'Data > SQL' 카테고리의 다른 글
[프로그래머스] SQL, 진료과별 총 예약 횟수 출력하기 (0) | 2023.06.12 |
---|---|
[프로그래머스 SQL] 문자열 (1) | 2023.05.24 |
[프로그래머스 SQL] 인기있는 아이스크림 (0) | 2023.04.29 |
[프로그래머스 SQL] 조건에 맞는 회원수 구하기 (0) | 2023.04.29 |