[SQL] 7장. 계산 필드 생성하기

김상현·2022년 9월 23일
0

SQL

목록 보기
7/22
post-thumbnail

[손에 잡히는 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를 곱한 계산 필드이다.
  • 클라이언트 프로그램에서 이제 이 열을 다른 열과 똑같이 사용할 수 있다.

📍 도전 과제

  1. 별칭은 일반적으로 검색한 결과에서 테이블의 열의 이름을 바꾸는 데 주로 쓴다(아마도 특정한 보고나 고객의 요구사항을 맞추기 위해). 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

  1. 우리가 예제로 사용하는 가게에서 전 상품을 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

profile
목적 있는 글쓰기

0개의 댓글