[Database] SQL 집계함수 , 내장함수, Select 키워드

h220101·2022년 5월 1일
0

SQL 집계함수

집계함수는 테이블 내의 값 중 원하는 값 또는 연산을 도와준다.
SELCET 구문이나 HAVING절에서 사용한다.

(3)SELECT 
	o.o_id AS '구매자 아이디'
	,sum(o.o_amount) AS '총 주문수량'
	,AVG(o.o_amount) AS '평균 주문수량'
	,ROUND(AVG(o.o_amount),1) AS '평균 주문수량'
	,COUNT(o.o_amount) AS '총 주문횟수'
	,MAX(o.o_amount) AS '최대 주문수량'
	,MIN(o.o_amount) AS '최소 주문수량'
(1)FROM
	tb_order AS o
(2)GROUP BY o.o_id
;

round( n , 반올림 할 소수점 자리수 )

실행순서를 잊지말자
(1) FROM tb_order에서
(2) tb_order의 id별로 그룹핑을 한 뒤
(3) SELECT 작업을 실행한다.


SUM

테이블의 o_amount의 합계를 구할 수 있다.

AVG

테이블의 o_amount의 평균을 구할 수 있다.

MAX, MIN

테이블의 o_amount의 최대값과 최소값을 구할 수 있다.

ROUND

테이블의 o_amount의 속성별 평균값을 구할 수 있다. 단, 반올림에 주의하여야 한다.

기본표기법

소수점 표기 방법 (소수점 첫째짜리까지 표기.)

COUNT

테이블의 행의 갯수를 셀 수 있다.



SQL 내장함수

데이터 형식 변환 함수

형변환

SELECT
		NOW() AS 'DATETIME'
		,CAST(NOW() AS DATE) AS 'DATE'
		,CAST(NOW() AS TIME) AS 'TIME';
        
        
SELECT
    CONVERT (AVG(o.o_amount), SIGNED INTEGER) AS '평균 주문 개수'
FROM
    tb_order o;
    
 --   정수 타입: 음수까지 표현할 수 있는 SIGNED 타입
 --    		  양수만을 표현할 수 있는 UNSIGNED 타입

CAST, CONVERT

형변환

SELECT
		NOW() AS 'DATETIME'
		,CAST(NOW() AS DATE) AS 'DATE'
		,CAST(NOW() AS TIME) AS 'TIME';
        
        
SELECT
    CONVERT (AVG(o.o_amount), SIGNED INTEGER) AS '평균 주문 개수'
FROM
    tb_order o;
    
 --   정수 타입: 음수까지 표현할 수 있는 SIGNED 타입
 --    		  양수만을 표현할 수 있는 UNSIGNED 타입

CONCAT

문자열 연결함수

SELECT
	CONCAT(m.m_id, ' : ',m.m_name) AS '회원 아이디 : 회원 이름'
FROM 
	tb_member m;


암시적인 형변환

-- 문자와 문자를 더함 (정수로 변환되서 연산됨)
SELECT '100' + '200’ ;

-- 문자와 문자를 연결 (문자로 처리)
SELECT CONCAT('100', '200’); 

-- 정수와 문자를 연결 (정수가 문자로 변환되서 처리)
SELECT CONCAT(100, '200’);

-- 정수와 문자를 연결 (정수가 문자로 변환되서 처리)
SELECT CONCAT(100, '200’);

-- 정수인 2로 변환되어서 비교 
SELECT 1 > '2mega’;

-- 정수인 2로 변환되어서 비교 
SELECT 3 > '2MEGA’; 

-- 문자는 0으로 변환됨
SELECT 0 = 'mega2'; 


제어 흐름 함수

SELECT IF (조건식, true시 반환하는 값, false시 반환하는 값);

-- 조건이 null이 아닐 경우 조건을 반환.
SELECT IFNULL(조건, null일경우 반환하는 값);

-- 조건1과 조건2가 같을 경우 null값을 반환, 다를경우 조건1을 반환
SELECT NULLIF(조건1,조건2);

SELECT IF (/*조건식*/10>20, '참입니다.', '거짓입니다’);

SELECT IFNULL(NULL, '널입니다.'), IFNULL(100, '널'); 
값이 NULL 이라면 '널입니다.'문자열 출력 , NULL이 아니라면 100 출력

SELECT NULLIF(10,10), NULLIF(30,10);
값을 비교했을때 같다면 NULL 출력 같지않다면 30 출력


문자열 함수

-- 문자를 ascii 코드로 변환 / ascii코드를 문자로 변환
SELECT ASCII('A'), CHAR(65);

-- 공백을 제거
SELECT TRIM('   KSMART35   ') AS result;

-- 반복
SELECT REPEAT('KSMART', 3) AS result;

-- 문자열 대체
SELECT REPLACE ('KSMART35기', 'KSMART' , '한국스마트정보교육원') AS result;

-- 문자열을 거꾸로 출력
SELECT REVERSE ('KSMART35') AS result;

-- 공백을 추가, 문자열 연결
SELECT CONCAT('KSMART', SPACE(15), '35기') AS result;


날짜 함수

SELECT 
   ADDDATE('2020-03-18', INTERVAL 31 DAY)
  ,ADDDATE('2020-03-18', INTERVAL 1 MONTH)

  ,SUBDATE('2020-03-18', INTERVAL 31 DAY)
  ,SUBDATE('2020-03-18', INTERVAL 1 MONTH)

  ,ADDTIME('2020-03-18 23:59:59', '1:1:1')
  ,ADDTIME('15:00:00', '2:10:10')

  ,SUBTIME('2020-03-18 23:59:59', '1:1:1')
  ,SUBTIME('15:00:00', '2:10:10');

SELECT 
   YEAR(CURDATE())
  ,MONTH(CURDATE())
  ,DAYOFMONTH(CURDATE());

SELECT 
   HOUR(CURTIME())
  ,MINUTE(CURRENT_TIME())
  ,SECOND(CURRENT_TIME())
  ,MICROSECOND(CURRENT_TIME());

SELECT DATE(NOW()), TIME(NOW());
  • curdate() <현재날짜
  • year >int data type 으로 반환
SELECT 
   DATEDIFF('2020-08-06', NOW())
  ,TIMEDIFF('17:30:01', CURRENT_TIME());

SELECT 
   DAYOFWEEK(CURDATE())
  ,MONTHNAME(CURDATE())
  ,DAYOFYEAR(CURDATE());

SELECT LAST_DAY('2020-03-18');


시스템 함수

SELECT SLEEP(3);

SELECT 
    a.*
FROM 
    tb_member a,(SELECT SLEEP(3)) b;
  • n초 뒤에 결과 반환

변수 사용

SET @myNumber1 = 1;
SET @myNumber2 = 2.3;
SET @myStr1 = '합계:';

SELECT
    @myNumber1 AS '변수1'
   ,@myNumber2 AS '변수2';
 
SELECT
    @myStr1
   ,@myNumber1 + @myNumber2) AS '합계';
 
SELECT
    @myStr1
   ,ROUND((@myNumber1 + @myNumber2), 3) AS '합계';


SELECT 문 조건 연산자

비교 연산자
MySQL 에서 비교연산자는 TRUE(1), FALSE(0), NULL값 또는 연산에 대한 결과를 리턴한다.

논리 연산자
MySQL 에서 논리 연산자는 TRUE(참), FALSE(거짓) 두가지를 가지고 비교하는 연산자 이다.

대입 연산자
@cValue := g.g_price
오른쪽 값을 왼쪽에 대입한다.

//비교연산자와는 다르다//
@cValue = g.g_price
오른쪽 값을 왼쪽 값과 비교한다.



SELECT 문 조건 LIKE 키워드
지정한 패턴과 일치하는 문자열, 날짜, 시간 값을 검색

profile
기록하는 삶

0개의 댓글