개발
SQL 사전
31514
2024. 9. 10. 12:58
SQL을 사용하면서 몰랐던 부분에 대해 정리하는 글(계속 수정)
NULL 관련
- IFNULL(컬럼명, 대체값)
GROUP BY 관련
- HAVING 절에 집계 함수를 사용할 수 있다.
UNION 관련
- UNION을 사용하여 테이블을 합친 뒤 ORDER BY를 사용할 수 있다.
윈도우 함수 관련
- PERCENT_RANK() OVER (ORDER BY 컬럼명)
사칙연산 관련
- N DIV M : N을 M으로 나눈 몫을 구할 수 있다.
ORDER BY 관련
SELECT CONCAT(컬럼명, '추가')
FROM TABLE
ORDER BY 1;
만약 위와 같은 쿼리가 있을 때, 컬럼명이 숫자 자료형이라면 의도한 대로 정렬되지 않을 수 있다.
그 이유는 숫자 자료형이 문자 자료형으로 바뀌기 때문이다.
만약 숫자에 문자를 추가한 다음 숫자를 기준으로 정렬하고 싶다면 아래와 같은 쿼리를 사용하자.
SELECT CONCAT(컬럼명, '추가')
FROM TABLE
ORDER BY 컬럼명;
문자열 관련
length
select length(컬럼명) char_length
from table
-- 문자열의 문자 개수를 반환
position
select position('찾고 싶은 문자열' in 컬럼명)
from table;
-- 컬럼에서 찾고자 하는 문자열의 위치를 알 수 있음
locate
select locate('찾고 싶은 문자열', 컬럼명, 시작 위치)
from table;
-- 시작 위치에서 시작하는 찾고자 하는 문자열의 위치를 찾음
replace
select replace(원래 문자열, 바꿀 문자열, 대체할 문자열)
from table;
-- 원래 문자열에서 바꿀 문자열과 일치하는 모든 문자열이 대체됨
substring
select substring(문자열, 시작 위치, 길이)
-- 문자열의 시작 위치에서 길이만큼 추출함
숫자 데이터 관련
mod
select mod(N, M)
-- N을 M으로 나눈 나머지
pow
select pow(N, M)
-- N의 M 제곱 수
sign
select sign(컬럼명)
from table;
-- 숫자가 양수면 1, 0이면 0, 음수면 -1
시간 데이터 관련
DBMS에 설정된 시간대 확인 및 변경
select @@global.time_zone, @@session.time_zone;
set time_zone = 'Europe/Zurich';
date_format
select date_format(컬럼명, '%Y-%m-%d')
from table;
-- 날짜 형식의 데이터를 2018-06-25 형식으로 변경
cast
select cast(날짜 문자열 as [datetime | date | time])
-- 서버가 날짜 데이터라고 판단할 수 없거나, 기본 형식이 아닌 형식을 사용하면
-- cast를 사용하여 문자열을 날짜 데이터로 변환할 수 있음
str_to_date
문자열에서 시간 데이터를 생성해야 하는데, 문자열이 cast를 사용하기에는 적절한 형식이 아닐 경우 사용
date_add
지정된 날짜에 일정 기간을 더해서 다른 날짜 생성
last_day
특정 월의 마지막 날을 찾음
dayname
해당 날짜의 요일을 알려줌
datediff
select datediff(날짜1, 날짜2)
-- 두 날짜 사이의 일수 차이를 계산
select (날짜1 - 날짜2)
-- 직접 날짜 뺄셈은 데이터베이스 시스템에 따라 다르게 동작할 수 있다.
-- 일부 시스템에서는 시간 정보도 포함하여 계산할 수 있다.