공부/인프런 - Rookiss

Part 5-2-4. SQL 입문 : 수치와 문자열

셩잇님 2024. 1. 25. 12:37
반응형

 

 

💅 SQL 입문

 

 지난 시간에는 ORDER BY와 TOP, OFFSET에 대해서 알아보았다. 오늘은 수치를 표현하는 방법과 문자열에 학습하고, 문자열 관련 함수등을 알아보도록 한다. 

 


 

🛺 수치

 

 단순 특정 열들을 가진 행을 조회하는 것이 아닌, 연산된 결과를 SELECT하면 해당 값이 ‘열 없이’ 출력할 수 있다. 대신 여기서도 AS를 사용하면 열의 이름을 붙여줄 수 있다.

 

SELECT 2021 - birthYear + 1 AS koreanAge
FROM players
WHERE deathYear IS NULL AND birthYear IS NOT NULL AND koreanAge <= 89 -- 에러
ORDER BY koreanAge

-- FROM 책상에서
-- WHERE 빨간색 공을
-- SELECT 갖고 오고
-- ORDER BY 그 순서로 정렬해라

 

ORDER BY 에서는 koreanAge를 인지를 잘 했는데 왜 WHERE에서는 koreanAge가 유효하지 못할까?

 

WHERE 에서는 koreanAge 가 ‘아직’ 뭔지 모르기 때문이다! 쿼리문 에서의 순서는 SELECT 👉 FROM 👉 WHEHR 👉 ORDER BY 이지만, 실질적으로 실행되는 순서는 FROM 👉 WEHERE 👉 SELECT 👉 ORDER BY 이기 때문이다. 즉, WHERE 는 SELECT 보다 앞에서 실행되므로 SELECT 에서 (2021 - birthYear + 1)의 별칭으로 정의해준 koreanAge가 뭔지 모르는 것이다.

FROM 책상에서
WHERE 빨간색 공을
SELECT 갖고 오고
ORDER BY 그 순서로 정렬해라

 

위 실행 순서를 기억하자. 😥

SELECT 2021 - birthYear + 1 AS koreanAge
FROM players
WHERE deathYear IS NULL AND birthYear IS NOT NULL AND (2021 - birthYear + 1) <= 89
ORDER BY koreanAge

 

 따라서 위와같이 그냥 (2021 - birthYear + 1)로 바꿔주어야 한다.

 


 

🛺 사칙연산

 

NULL과는 연산이 불가능하다. 🤔

SELECT 2021 - NULL;

 

 NULL을 0으로 치환하여 연산을 하나? 생각 했지만 그렇지 않았다. 🤣

나눗셈
여타 C++/C# 같은 언어와 똑같다. 0으로 나누는 것은 예외발생이므로 조심하고, 정수끼리 나눗셈하면 그 결과도 정수이기 때문에 몫만 결과로 리턴!

 

SELECT 3 / 2;

 

SELECT 3.0 / 2;

 

SELECT 3 / 0;

 


 

🛺 다양한 함수

 

더 다양한 함수는 SQL Server 문서 참고한다. 😎

 

SELECT ROUND(3.141592, 3); -- 셋째 자리에서 반올림

SELECT POWER(2, 3); -- 2의 3승

 

SELECT COS(0); -- 코싸인 0

 


 

🛺 문자열

 

문자열 표현 (한/영)

 

SELECT 'Hello World' -- "Hello World" 값 출력

 

문자열은 '' 작은 따옴표로 표현한다.

SELECT '안녕하세요'

 

 한글은 영어와 달리 한 문자가 2 byte이다. 따라서 그냥 작은 따옴표로 한글 문자열 리터럴 값을 출력하려하면 제대로 출력되지 않는다.

SELECT N'안녕하세요'

 

 따라서 이렇게 한글 문자열 리터럴 값을 출력하고자 한다면 N'문자열' 이런 형태로서, N을 앞에 붙여주어야 한다.

 

문자열 함수

SELECT CONCAT('Hello', 'World')

 

SELECT 'Hello' + 'World'

 

 다른 여타 언어와 같다. 문자열을 합치려면 CONCAT 함수를 사용하거나 + 연산자를 사용하면 된다.

 

SELECT nameFirst + ' ' + nameLast
FROM players
WHERE nameFirst IS NOT NULL AND nameLast IS NOT NULL;

nameFirst + ' ' + nameLast 결과 행들의 열 이름이 딱히 없는 상태이다.

 

SELECT nameFirst + ' ' + nameLast As fullname
FROM players
WHERE nameFirst IS NOT NULL AND nameLast IS NOT NULL;

nameFirst + ' ' + nameLast 결과 행들의 열 이름에 별칭 fullname을 붙여준 상태

 

SELECT SUBSTRING('20210412', 1, 4); -- 첫번째 문자부터 4 번째 문자까지 부분 문자열

 

SUBSTRING 사용시 주의할 점은, 시작 인덱스가 0이 아닌 1 이라는 것이다! 프로그래밍 언어랑 다르다. 🤔

SELECT TRIM('       Hello World');

 

TRIM은 좌측 공백을 제거한다.

 

반응형