본문 바로가기

SQL/MYSQL

Mysql alias, 함수 , 집합연산





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

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을 이용하여 해결해야 합니다.