-- ASC 오름차순 디폴트
-- OFFSET을 이용하여 100~200 행
SELECT *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear ASC, birthMonth ASC, birthDay ASC
OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY;
- 실행되는 순서
FROM 책상에서
WHERE 빨간색 펜들을
SELECT 가져오고
ORDER BY 크기 순서로 정렬해라
SELECT 2021 - birthYear AS koreanAge
FROM players
WHERE deathYear IS NULL AND birthYear IS NOT NULL AND (2021 - birthYear) <= 80
ORDER BY koreanAge ASC;
실행 순서로 인해 WHERE에서 (2021 - birthYear )부분을 koreanAge로 사용할 수 없음
but, ORDER BY에서는 가능!
1. FROM 책상에서
2. WHERE 공을
3. GROUP BY 색상별로 분류해서
4. HAVING 분류한 다음 빨간색 공들만
5. SELECT 갖고와서
6. ORDER BY 크키 순으로 나열해라
문자열 관련
'' 은 1바이트로 읽고 N'' 으로 해줘야 2바이트로 읽음. 그렇기에 한글을 써넣으려면 N을 붙여줘야함!
SELECT '안녕';
SELECT N'안녕';
SELECT 'Hello' + 'World!';
SELECT SUBSTRING('20240312!', 1, 4); -- 1부터 시작
SELECT TRIM(' hi ! '); -- LTRIM, RTRIM 다 있음
DATETIME 관련
DATE 연/월/일
TIME 시/분/초
DATETIME 연/월/일/시/분/초
USE [BaseballData];
INSERT INTO [dbo].[dateTimeTest]
([time])
VALUES
-- (CAST('20240312 03:02:1.123' AS datetime))
('20100312 03:02:1.123') -- 자동형변환됨
;
-- DATETIME 타입
-- YYYYMMDD
-- YYYYMMDD hh:mm:ss.nnn
-- YYYY-MM-DDThh:mm
SELECT CAST('20240312' AS datetime);
SELECT CAST('20240312 03:02:1.123' AS datetime);
-- pc 시스템 기준 현재 시간
SELECT CURRENT_TIMESTAMP;
-- GMT 표준시 ( Greenwich mean time )
SELECT GETUTCDATE();
-- 자동형변환
SELECT *
FROM dateTimeTest
WHERE time >= '20200101';
-- WHERE time >= CAST('20200101' AS datetime);
-- DATETIME 덧셈,뺄셈
SELECT DATEADD(YEAR, 1, '20240312');
SELECT DATEADD(MONTH, 3, '20240312');
SELECT DATEADD(DAY, 5, '20240312');
SELECT DATEADD(SECOND, 40, '20240312');
SELECT DATEADD(SECOND, -40, '20240312');
-- DATETIME 차이
SELECT DATEDIFF(SECOND, '20240101', CURRENT_TIMESTAMP);
-- DATETIME 특정 부분 추출
SELECT DATEPART(DAY, '20240312');
SELECT DAY('20240312');
CASE
WHEN에 해당되지않고 ELSE가 없으면 NULL
NULL 체크를 하려면 IS NULL 사용
SELECT *,
CASE birthMonth
WHEN 1 THEN N'겨울'
WHEN 2 THEN N'겨울'
WHEN 3 THEN N'봄'
WHEN 4 THEN N'봄'
WHEN 5 THEN N'봄'
WHEN 6 THEN N'여름'
WHEN 7 THEN N'여름'
WHEN 8 THEN N'여름'
WHEN 9 THEN N'가을'
WHEN 10 THEN N'가을'
WHEN 11 THEN N'가을'
WHEN 12 THEN N'겨울'
ELSE N'몰라요'
END AS BirthSeason
FROM players;
SELECT *,
CASE
WHEN birthMonth <= 2 OR birthMonth = 12 THEN N'겨울'
WHEN birthMonth <= 5 THEN N'봄'
WHEN birthMonth <= 8 THEN N'여름'
WHEN birthMonth <= 11 THEN N'가을'
ELSE N'몰라요'
END AS BirthSeason
FROM players;
DISTINCT
중복 없애기
SELECT DISTINCT birthCity
FROM players;
SELECT COUNT(DISTINCT birthCity)
FROM players;
집계함수 ( 5가지 )
집계함수는 집합이 NULL이면 무시한다
COUNT ( 유일하게 * 사용 가능 )
SELECT COUNT(*)
FROM players;
SELECT COUNT(birthYear)
FROM players;
SUM 합계
AVG
-- 평균 weight
-- 단, weight가 NULL이면 weight=0으로 하여 계산하기
SELECT AVG(CASE WHEN weight IS NULL THEN 0 ELSE weight END)
FROM players;
MIN 최소값
MAX 최대값