Database/SQL

계산 필드 생성하기

onddd 2023. 9. 29. 17:21
728x90

10분 SQL 7장

  1. 개요
  2. 계산 필드 이해하기
  3. 필드 연결하기
  4. 수학 계산 수행하기
  5. 사용

개요

계산 필드기 무엇인지, 어떻게 생성하는지 알아보고 우리가 사용하는 응용 프로그램에서 계산 필드를 참조하기 위해 별칭을 사용하는 방법도 학습한다.

계산 필드 이해하기

필드란 기본적으로 열과 같은 뜻이며, 종종 서로 바꿔 부르기도 한다.
하지만 데이터베이스 열은 일반적으로 Column 으로 부르며, Field라는 용어는 보통 계산 필드와 함께 사용된다.

계산 필드는 테이블에 저장한 데이터와 응용 프로그램이 원하는 형식이 아닐 경우 사용할 수 있다.


데이터를 있는 그대로 가져온 후 사용 목적에 맞게 바꾸기보다 데이터베이스에서 바로 변환된 혹은 계산된 데이터를 가져올 수 있는 방법이 바로 계산 필드이다.

 

계산 필드는 데이터베이스 테이블에 실제로 존재하지 않는다. SQL SELECT 문에서 동적으로 생성되기 때문이다. SELECT 문에서 어느 열이 테이블에 실제로 존재하는 것이고, 어느 것이 계산 필드인지는 데이터베이스만이 알고 있고, 클라이언트의 관점에서 보면 계산 필드 데이터도 다른 열의 데이터와 똑같은 방식으로 검색된다.

[!info] 클라이언트 vs 서버 서식 설정
SQL 문에서 수행하는 변환과 서식 설정은 대부분 우리가 사용하는 클라이언트 프로그램에서도 직접 수행할 수 있다.
하지만 데이터베이스 서버에서 이런 작업을 수행하는것이 클라이언트에서 수행하는 것보다 훨씬 빠르다.

필드 연결하기

SQL SELECT 문에서 특별한 연산자를 이용하여 열을 연결할 수 있다. 어떤 DBMS를 사용하는지에 따라 이 연산자는 더하기 기호(+) 또는 2개의 파이프(||)가 될 수 있는데 MySQL 과 MariaDB에서는 특수 함수를 사용해야 한다.

[!NOTE]
SQL Server에서는 열을 연결하려면 + 기호를 사용하고
DB2, Oracle, PostgreSQL, SQLite에서는 || 기호를 사용해야 한다.

대부분의 데이터베이스는 열 길이에 맞춰 텍스트를 저장하는데, 우리가 원하는 형식에서는 공백이 필요하지 않을 것이다. 따라서 데이터를 원하는 형식으로 가져오려면 채워진 공백을 다시 제거해야 하고, 이 때 SQL TRTIM() 함수를 사용하여 공백을 제거할 수 있다.


대부분의 DBMS는 RTRIM(), LTRIM(), TRIM() 함수를 지원한다. RTRIM()은 문자열의 오른쪽, LTRIM()은 문자열의 왼쪽에 있는 공백 문자를 제거하고 TRIM()은 양쪽에 있는 공백을 제거한다.

별칭 사용하기

계산 필드를 통해 생성된 새로운 열의 이름은 무엇일까? 사실 계산 필드에는 이름이 없다.
계산 필드는 단순히 하나의 값일 뿐이다. SQL 쿼리 도구에서 값을 확인하는 목적이라면 상관없지만, 클라이언트 프로그램에서 이름이 없는 열을 호출할 방법이 없기 때문에 SQL은 열 별칭을 지원한다.

 

별칭(alias)이란 하나의 필드나 값을 부르기 위한 또 다른 이름으로 AS 키워드를 사용해서 부여할 수 있다.
많은 DBMS에서 AS를 생략해도 되지만, 되도록 사용하는 습관을 들이는게 좋다.

 

별칭은 다른 용도로도 사용되는데, 한 가지는 실제 테이블 열 이름에 허용되지 않는 문자(예를 들면 공백 문자)가 포함되어 있을 때 이름을 바꾸는 데 쓰인다. 아니면 원래 이름이 모호하거나 잘 못 읽을 수 있다면 열 이름을 상세히 하는 데 사용되기도 한다.

별칭은 하나의 단어가 될 수도 있고 몇 개의 단어로 이루어진 문자열이 될 수도 있는데 후자의 경우 문자열을 작은 따옴표로 묶어 사용한다. 이 방법은 문법적으로는 아무런 문제가 없지만 권장하지 않는다.


여러 개의 단어로 된 이름은 이해하기 쉬울 수 있지만 클라이언트 프로그램에서 문제가 될 소지가 너무도 많기 때문에 별칭의 주된 용도는 어려 단어로 이루어진 열 이름을 한 개의 단어로 바꾸는 것이다.

[!info] 파생열
별칭을 간혹 파생열(derived column)으로 부르기도 한다. 파생열이 별칭과 동일한 의미라는 것만 기억하자

수학 계산 수행하기

SQL은 기본적인 수학 연산자(+ - * /)를 지원한다. 또한 우선순위를 설정하기 위해 괄호를 사용할 수도 있다.

사용

SELECT Concat(vend_name, ' (',vend_country,')') 
FROM Vendors ORDER BY vend_name;  

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
FROM Vendors ORDER BY vend_name;  

SELECT RTRIM(vend_name) || ' (' + RTRIM(vend_country) || ')' 
FROM Vendors ORDER BY vend_name;  

SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')' AS vend_title 
FROM Vendors ORDER BY vend_name;  

SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')' AS vend_title 
FROM Vendors ORDER BY vend_name;  

SELECT Concat(vend_name, ' (', vend_country, ')') AS vend_title 
FROM Vendors ORDER BY vend_name;   

SELECT prod_id, quantity, item_price 
FROM OrderItems 
WHERE order_num = 20008;  

SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price 
FROM OrderItems WHERE order_num = 20008;  

SELECT vend_id, vend_name AS vname,vend_address AS vaddress,vend_city AS vcity 
FROM Vendors ORDER BY vname;  

SELECT prod_id, prod_price, prod_price * 0.9 AS sale_proce 
FROM Products;