이번 글에서는 별칭, 함수, 집합연산에 대해 알아보도록 하겠습니다.
1. 별칭 ( Alias )
AS 명령어로 별칭(별명)을 붙일 수 있습니다.
컬럼명이 길어서(또는 마음에 들지 않아서) 바꾸고 싶은 경우 또는 테이블명을 바꾸고 싶을 경우 사용합니다.
아래는 두 컬럼의 곱(컬럼1 * 컬럼2)으로 표현되는 컬럼명을 foo로 바꾸는 예제입니다.
# SELECT *, (컬럼1 * 컬럼2) AS foo FROM 테이블명;
- 연산이 들어간 컬럼은 가독성을 위해 괄호 ( )로 묶어주는 것이 좋습니다.
별칭의 이름이 ASCII가 아닌 문자열일 경우 쌍 따옴표(")를 붙여야 합니다.
# SELECT *, (컬럼1 * 컬럼2) AS "금액" FROM 테이블명;
만약 조건문( where )에서 별칭을 사용한다면 에러가 발생합니다.
# SELECT *, (컬럼1 * 컬럼2) AS foo FROM 테이블명 WHERE foo >= 3;
- SELECT 쿼리의 명령어 순서는 where -> select 이므로 Error가 발생합니다.
반면, ORDER BY 절은 SELECT 명령어 순서상 가장 마지막에 처리되므로 별칭을 사용할 수 있습니다.
# SELECT *, (컬럼1 * 컬럼2) AS foo FROM 테이블명 ORDER BY foo DESC;
테이블에 별칭을 부여할 수도 있습니다.
아래는 특정 테이블을 t1이라는 별칭으로 부여한 것입니다.
# SELECT * FROM 테이블명 AS t1;
- 테이블에 별칭을 부여하는 것은 두 테이블을 결합하여 검색하는 JOIN 쿼리시에 유용합니다.
2. 함수
MySQL에서 사용자가 유용하게 사용할 수 있도록 제공하는 함수가 있습니다.
사용자가 함수를 직접 만들 수도 있는데, MySQL에서 제공하는 함수에 대해 알아보겠습니다.
1) 수학 관련
- 반올림 : ROUND
- 삼각함수 : SIN, COS
- 루트 : SORT
- 로그 : LOG
아래는 amount 컬럼을 반올림해서 조회하는 예제입니다.
# SELECT *, ROUND(amount) FROM products;
다음은 소수점 둘 째 자리에서 반올림하여 조회하는 예제입니다.
# SELECT *, ROUND(amount, 1) FROM products;
- ROUND 함수는 기본적으로 소수점 첫 번째 자리에서 반올림 합니다.
- 두 번째 매개변수로 1을 넘겨주면 소수점 두 번째 자리에서 반올림하며,
- -1을 넘겨주면 일의 자리에서 반올림 합니다.
2) 집계 관련
- 합계 : SUM
- 개수 : COUNT
- 최소값 : MIN
- 최대값 : MAX
- 평균 : AVG
- 중복제거 : DISTINCT
아래는 products 테이블에 존재하는 데이터의 개수를 조회하는 예제입니다.
# SELECT COUNT(*) FROM products;
- 만약 조건문(WHERE)이 추가된다면, SELECT문 실행 순서에 의해 WHERE가 먼저 실행된 후 COUNT함수가 실행됩니다.
- COUNT(*)는 COUNT(컬럼)보다 성능이 좋습니다.
- COUNT(*)와 COUNT(1)은 동일합니다.
다음은 name 컬럼의 중복을 제거하여 조회하는 예제입니다.
# SELECT DISTINCT name FROM products;
다음은 quantity 컬럼의 모든 값을 더해서 조회하는 예제입니다.
# SELECT SUM(quantity) FROM products;
- AVG, MIN, MAX 등의 함수들도 이와 문법이 같습니다.
3) 문자열 관련
- 문자열 결합 : CONCAT
- 문자열 일부분 추출 : SUBSTR
- 문자열 맨 끝 좌우의 공백제거 : TRIM
- 문자열 길이 : CHAR_LENGTH
아래는 count와 unit 컬럼의 문자열을 합쳐서 조회하는 예제입니다.
# SELECT *, CONCAT(count, unit) FROM products;
4) 시간 관련
- 시스템 시간 : CURRENT_TIMESTAMP
- 날짜 간의 차이 : DATEDIFF
# INSERT INTO board reg_date VALUES (SELECT CURRENT_TIMESTAMP());
- 게시글의 등록 날짜, 회원 가입 날짜 등의 값으로 입력할 때 유용합니다.
3. 집합엽산
1) 합집합
UNION 명령어는 두 테이블의 합집합을 연산하는 명령어 입니다.
아래는 products, items 두 테이블의 합집합을 연산해서 조회하는 예제입니다.
# (SELECT * FROM products) UNION (SELECT * FROM items);
이 때 합집합을 하고자 하는 두 SELECT 쿼리의 컬럼명이 일치해야 합니다.
예제의 쿼리에서는 *로 일치시켰습니다.
각각의 SELECT 쿼리는 가독성을 위해 ( )로 묶었습니다.
UNION 연산은 두 쿼리의 중복을 제거하지만 UNION ALL은 중복된 값을 제거하지 않는 명령어 입니다.
즉, 있는 그대로를 합치기 때문에 중복을 제거하는 연산이 없으므로 UNION보다 성능이 더 좋습니다.
2) 합집합 연산에서 정렬
합집합 연산을 한 후, 정렬을 할 수 있습니다.
# (SELECT products_no AS no FROM products) UNION (SELECT items_no AS no FROM items) ORDER BY no;
- 합집합 연산에서 정렬을 하기 위해서는 마지막 SELECT 쿼리에 대해서만 정렬하는 것이 가능합니다.
- 이 때 UNION을 하는 두 열의 이름이 다르다면 별칭(예제에서는 no)을 붙여서 정렬해야 합니다.
3)
합집합 연산 외에도 교집합(INTERSECT), 차집합(EXCEPT)이 있지만 MySQL에서는 따로 지원하는 명령어가 없습니다.
이 경우에는 테이블을 결합하는 JOIN 연산을 사용해서 해결해야 합니다. ( 링크 )
'Database > MySQL' 카테고리의 다른 글
[MySQL] SYSDATE()와 NOW()의 차이 (0) | 2018.03.11 |
---|---|
[MySQL] 조인( JOIN ) (0) | 2018.03.11 |
[MySQL] 인덱스(Index table) , 뷰(View table) (0) | 2018.03.11 |
[MySQL] 서브쿼리 ( subquery ) (1) | 2018.03.11 |
[MySQL] GROUP BY , HAVING (0) | 2018.03.11 |
[MySQL] DDL, DML 기본 명령어 (2) | 2018.03.11 |
[MySQL] MySQL 시스템 기본 명령어 (0) | 2017.10.17 |