별칭은 단순히 컬럼명의 변경뿐만 아니라 쿼리를 통하여 연산을 처리할 때의 결과값에도 많이 사용합니다. 결과값은 별도의 컬럼명이 없기 때문입니다.
실습을 위해서 예제 테이블과 기초 데이터를 준비합니다.
| 예제 쿼리 |
// 테이블 생성
CREATE TABLE `products` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`price` int(11) DEFAULT NULL,
`vat` int(11) DEFAULT NULL,
`stock` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
// 기초데이터
INSERT INTO `products` VALUES (1,'S-827',20000,2000,5),(2,'S-532D',36000,3600,7);
16.2.1 연산 명칭
정수형 타입의 컬럼 데이터는 +, -, /, * 등의 사칙연산을 할 수 있습니다. 또한 함수를 실 행할 때도 출력 필드의 명칭을 정할 수 있습니다.
| 콘솔 실습 화면 |
mysql> select * from products;
+----+--------+-------+------+-------+
| Id | name | price | vat | stock |
+----+--------+-------+------+-------+
| 1 | S-827 | 20000 | 2000 | 5 |
| 2 | S-532D | 36000 | 3600 | 7 |
+----+--------+-------+------+-------+
2 rows in set (0.00 sec)
제품 목록 테이블에는 단가와 부가세 가격만 있습니다. 합계에 대한 컬럼 항목은 없습니다. 가격과 부가세 컬럼을 기준으로 합계를 출력해 봅니다.
| 예제 쿼리 |
select price+vat as total from products;
| 콘솔 실습 화면 |
mysql> select price+vat as total from products;
+-------+
| total |
+-------+
| 22000 |
| 39600 |
+-------+
2 rows in set (0.00 sec)
2개의 값이 합산된 결과가 출력됩니다. 또한 출력된 값의 컬럼 명칭으로 total로 설정했습 니다. total 컬럼 명칭은 기존 테이블에서 없는 컬럼입니다. 연산의 의해서 새롭게 별칭으 로 만들어진 임시 컬럼 이름입니다.
AS 별칭 키워드를 이용하여 새로운 가상의 컬럼명을 하나 더 만들어 출력합니다.
16.2.2 PHP 실습
PHP 코드를 통하여 별칭 실습해 봅니다.
예제 파일 | alias-02.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
$tbname = "products";
// 컬럼 지정조회
echo "===== 컬럼조회 =====<br>";
if($rowss = $db->select($tbname,"price+vat as total")){
echo "tables fields = ". count($rowss) . "<br>";
for($i=0;$i<count($rowss);$i++){
echo $i."=";
print_r($rowss[$i]);
echo "<br>";
}
}
?>
화면 출력
mysql connected!
===== 컬럼조회 =====
쿼리성공] SELECT price+vat as total FROM products;
tables fields = 2
0=stdClass Object ( [total] => 22000 )
1=stdClass Object ( [total] => 39600 )
16.2.3 함수 명칭
사칙연산 이외에도 SQL의 내장 함수를 사용할 때도 별칭은 매우 유용합니다. 내장 함수 를 사용할 때 출력 명칭은 불분명합니다. 함수를 사용하게 되면 컬럼명이 함수명으로 출 력됩니다.
함수를 사용할 때도 AS 별칭을 사용하면 새로운 출력 명칭을 선언할 수 있습니다.
| 예제 쿼리 |
select avg(price) as avg from products;
위의 쿼리는 제품 테이블에서 가격 컬럼의 평균을 출력하는 예제입니다.
| 콘솔 실습 화면 |
mysql> select avg(price) as avg from products;
+------------+
| avg |
+------------+
| 28000.0000 |
+------------+
1 row in set (0.00 sec)
별칭으로 선언한 이름으로 결과를 출력합니다. 만일 함수에 별칭을 설정하지 않고 함수만 실행했을 경우에는 함수명으로 출력됩니다.
| 콘솔 실습 화면 |
mysql> select avg(price) from products;
+------------+
| avg(price) |
+------------+
| 28000.0000 |
+------------+
1 row in set (0.00 sec)
16.2.4 PHP 실습
PHP 코드를 통하여 별칭 실습해 봅니다.
| 예제 쿼리 |
SELECT CONCAT(FirstName,'_ ',LastName) AS username FROM members;
위의 예제는 성과 이름 필드를 합쳐서 username 별칭으로 선언합니다. AS 별칭을 사용 하여 새로운 컬럼을 추가할 수 있습니다.
예제 파일 | alias-03.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
$tbname = "members";
// 컬럼 지정조회
echo "===== 컬럼조회 =====<br>";
if($rowss = $db->select($tbname,"CONCAT(FirstName,'_ ',LastName) AS username")){
echo "tables fields = ". count($rowss) . "<br>";
for($i=0;$i<count($rowss);$i++){
echo $i."=";
print_r($rowss[$i]);
echo "<br>";
}
}
?>
화면 출력
mysql connected!
===== 컬럼조회 =====
쿼리성공] SELECT CONCAT(FirstName,'_ ',LastName) AS username FROM members;
tables fields = 6
0=stdClass Object ( [username] => lee_ hojin )
1=stdClass Object ( [username] => hojin_ lee )
2=stdClass Object ( [username] => kim_ james )
3=stdClass Object ( [username] => jiny_ 1234 )
4=stdClass Object ( [username] => jiny_ 1234 )
5=stdClass Object ( [username] => jiny_ 123400 )