Mysql
1. 별칭 - Alias
AS
열에 새로운 별칭(별명)을 붙일 수 있습니다.
ex) (열1 * 열2)의 필드 이름을 foo로 바꿀 수 있습니다.
SELECT *, (열1 * 열2) AS foo FROM products;
가독성을 위해 연산이 들어간 필드 값은 괄호 ( )로 묶어주는 것이 좋습니다.
ex) 별칭의 이름이 ASCII 이외의 문자일 경우 쌍 따옴표(")를 붙여야 합니다.
SELECT *, (열1 * 열2) AS "금액" FROM products;
ex) 만약 조건문(where)에 열에서 설정한 별칭을 사용한다면 에러가 발생합니다.
SELECT *, (열1 * 열2) AS foo FROM products where foo >= 3;
명령어 순서가 where -> select 이므로 Error가 발생합니다.
ex) ORDER BY 명령어는 가장 마지막에 처리되므로 SELECT의 별칭 foo를 사용할 수 있습니다.
SELECT *, (필드1 * 필드2) AS foo FROM products where ORDER BY foo DESC;
2. Mysql 함수
MySQL에서 제공하는 함수가 있습니다.
1)
반올림 : ROUND
삼각함수 : SIN , COS
루트 : SORT
로그 : LOG
ex) amount 열을 반올림해서 조회
SELECT *, ROUND(amount) FROM products;
products안에 amount라는 실수형 열이 있을 때 ROUND함수의 매개변수로 넘겨주면, 반올림이 적용되어 조회됩니다.
ex) 소수점 둘 째 자리에서 반올림하여 조회
SELECT *, ROUND(amount, 1) FROM products;
ROUND 함수는 기본적으로 소수점 첫 번째 자리에서 반올림 합니다.
그런데 두 번째 매개변수로 1을 넘겨주면, 소수점 두 번째 자리에서 반올림합니다.
-1을 넘겨주면 일의 자리에서 반올림 합니다.
2)
합계 : SUM
개수 : COUNT
최소값 : MIN
최대값 : MAX
평균 : AVG
중복제거 : DISTINCT
ex) products 테이블에 존재하는 데이터의 개수를 조회합니다.
SELECT COUNT(*) FROM products;
만약 조건문(WHERE)이 추가된다면, WHERE가 먼저 실행된 후 COUNT함수가 실행됩니다.
ex) name필드의 중복을 제거하여 조회합니다.
SELECT DISTINCT name FROM products;
ex) quantity필드의 모든 값을 더해서 조회합니다.
SELECT SUM(quantity) FROM products;
AVG, MIN, MAX 등도 문법이 같습니다.
3)
문자열 결합 : CONCAT
문자열 일부분 : SUBSTR
문자열 공백제거 : TRIM
문자열 길이 : CHAR_LENGTH
ex) count와 unit 열의 문자열을 합쳐서 조회합니다.
SELECT *, CONCAT(count, unit) FROM products;
4)
시스템 시간 확인 : CURRENT_TIMESTAMP
날짜 간의 차이 : DATEDIFF
5) 문자열 일부분 가져오는 함수
LEFT : 문자에 왼쪽을 기준으로 일정 갯수를 가져오는 함수.
MID : 문자에 지정한 시작 위치를 기준으로 일정 갯수를 가져오는 함수.
RIGHT : 문자에 오른쪽을 기준으로 일정 갯수를 가져오는 함수.
* 참고로 MID 함수는 SUBSTR과 SUBSTRING 함수의 동의어입니다.
5-1 left
LEFT(문자, 가져올 갯수);
쿼리 사용법
SELECT LEFT('abcdefg', 3);
결과 abc
5-2 RIGHT
쿼리 사용법
SELECT RIGHT('abcdefg', 3);
결과 efg
5-3 MID
MID(문자, 시작 위치, 가져올 갯수);
SELECT MID('abcdefg', 2, 4);
SELECT SUBSTR('abcdefg', 2, 4);
SELECT SUBSTRING('abcdefg', 2, 4);
결과 bcde
3. Mysql 집합엽산
1) 합집합
UNION
ex) 두 테이블의 합집합을 연산해서 조회
(SELECT * FROM products) UNION (SELECT * FROM items);
이 때 합집합을 하고자 하는 두 SELECT 쿼리의 열이 일치해야 합니다.
( 위의 쿼리에서는 *로 일치시켰습니다. )
2) 중복 제거를 하지 않는 합집합
UNION ALL
UNION 연산은 두 쿼리의 중복을 제거하지만 UNION ALL은 중복된 값을 제거하지 않습니다.
즉 있는 그대로를 합치기 때문에 중복을 제거하는 연산이 없으므로 UNION보다 성능이 더 좋습니다.
3) 합집합 연산에서 정렬
SELECT products_no AS no FROM products UNION SELECT items_no AS no FROM items ORDER BY no;
합집합 연산에서 정렬을 하기 위해서는 마지막 SELECT에 대해서만 정렬하는 것이 가능합니다.
이 때 UNION을 하는 두 열의 이름이 다르다면 별칭(여기서는 no)을 붙여서 정렬해야 합니다.
* 이 외에도 교집합(INTERSECT), 차집합(EXCEPT)이 있지만 MySQL에서는 따로 지원하는 명령어가 없습니다.
이 경우 뒤에서 살펴 볼 두 테이블을 결합하는 join을 이용하여 해결해야 합니다.