개발

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)

-- 직접 날짜 뺄셈은 데이터베이스 시스템에 따라 다르게 동작할 수 있다.
-- 일부 시스템에서는 시간 정보도 포함하여 계산할 수 있다.