[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.
📍 계산 필드 이해하기
- 데이터베이스 테이블에 저장한 데이터는 우리가 사용하기에 적합하게 저장되어 있지 않아 이용할 수 없는 경우가 있다.
- 회사명과 회사 위치를 함께 출력하고 싶지만, 두 정보가 서로 다른 테이블 열에 저장되어 있는 상황
- 시, 도, 우편번호는 서로 다른 열에 저장되어 있지만, 배송지 주소를 인쇄해야 하는 상황
- 열 데이터에는 대소문자가 섞여 있지만, 보고서에는 모두 대문자로 출력해야 하는 상황
- 테이블에 있는 데이터를 기반으로 합계, 평균, 다른 계산값이 필요한 상황
- 계산 필드는 SQL SELECT 문에서 동적으로 생성된다.
💡 클라이언트 vs 서버 서식 설정
- SQL 문에서 수행하는 변환과 서식 설정은 우리가 사용하는 클라이언트 프로그램에서도 직접 수행할 수 있다.
- 하지만, 데이터베이스 서버에서 이런 작업을 수행하는 것이 클라이언트에서 수행하는 것보다 훨씬 빠르다.
📍 필드 연결하기
- SQL SELECT 문에서 특별한 연산자를 이용하여 열을 연결할 수 있다.
- DBMS에 따라 더하기 기호(
+
) 또는 2개의 파이프(||
)를 연산자로 사용할 수 있다.
SELECT vend_name || '(' || vend_country || ')'
FROM Vendors
ORDER BY vend_name;

- SELECT 문은 4개의 항목을 하나로 만들어 단일 열(계산 필드)로 반환한다.
- 대부분의 데이터베이스는 열 길이에 맞춰 텍스트를 저장하는데, 우리가 원하는 형식에서는 이 공백이 필요하지 않다.
- 따라서, 데이터를 원하는 형식으로 가져오려면 채워진 공백을 잘라내야 한다.
- SQL RTRIM() 함수를 사용하여 공백을 제거할 수 있다.
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')'
FROM Vendors
ORDER BY vend_name;

✏️ TRIM 함수
- 대부분의 DBMS는 RTRIM(), LTRIM(), TRIM() 함수를 지원한다.
- RTRIM() 함수는 오른쪽에 있는 공백을 제거한다.
- LTRIM() 함수는 왼쪽에 있는 공백을 제거한다.
- TRIM() 함수는 양쪽에 있는 공백을 제거한다.
📌 별칭 사용하기
- 계산 필드의 이름은 없다. 계산 필드는 단순히 하나의 값일 뿐이다.
- 클라이언트 프로그램에서는 이름이 없는 계산 필드를 사용할 수 없다.
- 이 문제를 해결하기 위해서 SQL은 열 별칭을 지원한다.
- 별칭(alias)이란 하나의 필드나 값을 부르기 위한 또 다른 이름이다.
- 별칭은 AS 키워드를 사용해서 부여할 수 있다.
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')' AS vend_title
FROM Vendors
ORDER BY vend_name;

💡 별칭의 또 다른 용도
- 별칭은 실제 테이블 열 이름에 허용되지 않은 문자(예를 들면 공백 문자)가 포함되어 있을 때 이름을 바꿀때도 사용한다.
- 이름이 모호하거나 잘못 읽을 수 있으면 열 이름을 상세하게 작성할 때 사용하기도 한다.
❗️ 별칭 이름
- 별칭은 하나의 단어가 될 수 있고 몇 개의 단어로 이루어진 문자열일 될 수도 있다.
- 별칭을 몇 개의 단어로 이루어진 문자열로 구성할 경우 작은 따옴표로 문자열을 묶어야 한다.
- 하지만 이 방법은 권장되지 않는다.
- 여러개의 단어로 된 이름은 이해하기는 쉬울 수 있지만 클라이언트 프로그램에서 문제가 될 소지가 너무도 많다.
- 그래서 별칭의 주된 용도는 여러 단어로 이루어진 열 이름을 한 개의 단어로 바꾸는 것이다.
📍 수학 계산 수행하기
- 계산 필드에서 가져온 데이터의 수학적 계산을 수행할 때도 자주 사용한다.
SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_num = 20008;

expanded_price
열은 간단히 quantity 와 item_price를 곱한 계산 필드이다.
- 클라이언트 프로그램에서 이제 이 열을 다른 열과 똑같이 사용할 수 있다.
📍 도전 과제
- 별칭은 일반적으로 검색한 결과에서 테이블의 열의 이름을 바꾸는 데 주로 쓴다(아마도 특정한 보고나 고객의 요구사항을 맞추기 위해).
Vendors
테이블에서 vend_id
, vend_name
, vend_address
, vend_city
를 가져와 각각의 필드를 vname
, vcity
, vaddress
로 이름을 바꾸고 그 결과를 판매처명(원래 이름을 바군 이름 둘 다 사용할 수 있다)으로 정렬하는 SQL 문을 작성하라.
SELECT vend_id, vend_name AS vname, vend_city AS vcity, vend_address AS vaddress
FROM Vendors
ORDER BY vend_name

- 우리가 예제로 사용하는 가게에서 전 상품을 10% 세일하고 있다.
Products
테이블에서 prod_id
, prod_price
, sale_price
를 가져오는 SQL 문을 작성하라. sale_price
는 할이된 가격을 보여주는 계산된 필드이다. 원래 가격에서 90%를 곱하면(결국 10% 할인된) 할인가를 구할 수 있다.
SELECT prod_id, prod_price, (prod_price * 0.9) AS sale_price
FROM Products
