Database #2

yeolyeol·2024년 9월 10일
0

ssafy12

목록 보기
26/32
post-thumbnail

SELECT의 기본 관련 포스트는 Database #1 참조

내장함수

단일행 함수 (Single-Row Func)

  • 각 행의 값을 하나의 결과 값으로 변환하는 함수 (ex. length("dong"))
  • 입력으로 하나의 행을 받고, 해당 행의 특정 값을 추출하거나 변환하여 단일 결과 값을 반환
  • 숫자, 문자, 날짜 관련 함수, 변환형 함수, NULL 관련 함수

다중행 함수 (Multi-Row Func)

  • 여러 행이 입력되어 하나의 행으로 결과 값을 반환
  • 여러 행을 그룹화하고 그룹 단위로 계산하여 Group Function이라고도 함.
  • 집계, 그룹, 윈도우 함수

숫자 관련

코드

-- 절대값 : 5  0  5
SELECT
  ABS(-5),ABS(0), ABS(+5);


-- 올림(정수) : 13  13  -12  -12
SELECT ceil(12.2), CEILING(12.2), ceil(-12.2), CEILING(-12.2);


-- 버림(정수) : 12  -13
SELECT FLOOR(12.2), FLOOR(-12.2);


-- 반올림 : 1526  1526  1526.2  1526.16  1530  2000
SELECT ROUND(1526.159), ROUND(1526.159, 0), ROUND(1526.159, 1), ROUND(1526.159, 2), ROUND(1526.159, -1), ROUND(1526.159, -3);


-- 버림 : 1526  1526.1  1526.15  1520  1000
SELECT  
TRUNCATE(1526.159, 0), 
TRUNCATE(1526.159, 1), 
TRUNCATE(1526.159, 2), 
TRUNCATE(1526.159, -1), 
TRUNCATE(1526.159, -3);


-- 제곱, 제곱근 : 8  8	4
SELECT pow(2,3), power(2, 3), SQRT(16);


-- 나머지 : 2  2
SELECT MOD(8, 3), 8 % 3


-- 최대, 최소값 : 9  3
SELECT greatest(6,2,3,4,9,1,7), least(6,2,3,4,9,1,7);


-- 난수
SELECT RAND(), TRUNCATE(RAND() * 45 + 1, 0);

문자 관련


코드

-- 문자 :: > 아스키, 아스키 ::> 문자 : 48  65  97  '0'  'A'  'a'  'ABCD'
SELECT ASCII('0'), ASCII('A'), ASCII('a'), char(49);


-- 문자열 결합 : 100번 사원의 이름 Steven King
select CONCAT(employee_id, '번 사원의 이름 ',first_name, ' ', last_name) "이름"
from employees
where employee_id = 100;


-- 구분자를 이용한 문자열 결합 : 2024-09-10
SELECT CONCAT_WS('-', 2024, 09, 10);


-- 문자열 대치(index) : hello ssafy !!!
SELECT 'ssafyabc!!!', insert('ssafyabc!!!', 6, 3, 'ssafy ');


-- 문자열 대치(문자열) : hello ssafy !!!
SELECT 'ssafyabc!!!', replace('ssafyabc!!!', 'abc', 'ssafy ');


-- 찾을 문자열의 index 반환 : 7
select instr('hello ssafy !!!', 'ssafy');

select '123-456', SUBSTR('123-456', 1, INSTR('123-456', '-') - 1), SUBSTR('123-456', INSTR('123-456', '-') + 1, 3);

-- 문자열 추출 : ssafy
select 'hello ssafy !!!', mid('hello ssafy !!!', 7, 5), SUBSTR('hello ssafy !!!', 7, 5);


-- hello ssafy !!!
SELECT REVERSE('hello ssafy !!!');


-- hello ssafy !!!  hello ssafy !!!
SELECT lower('hello ssafy !!!'), LCASE('hello ssafy !!!');


-- HELLO SSAFY !!!  HELLO SSAFY !!!
SELECT UPPER('hello ssafy !!!'), UCASE('hello ssafy !!!');


-- hello  fy !!!
SELECT 'hello ssafy !!!', left('hello ssafy !!!', 5), RIGHT('hello ssafy !!!', 6);


-- 3자리마다 콤마(,) & 소수점 2자리까지
SELECT FORMAT(12345678.987 , 2);


-- 공백제거, 문자기준 trim
SELECT LENGTH(RTRIM('    aaaa  ')), LENGTH(LTRIM('    aaaa  ')), LENGTH(TRIM('    aaaa  '));


-- 길이(byte), 비트수, 문자의 개수
SELECT length('ssafy'), BIT_LENGTH('ssafy'), CHAR_LENGTH('ssafy'), length('싸피'), BIT_LENGTH('싸피'), CHAR_LENGTH('싸피');

날짜 관련

형식

코드

-- 현재 시간 2024-09-10 10:11:52  2024-09-10 10:11:52  2024-09-10 10:11:52
select now(), SYSDATE(), CURRENT_TIMESTAMP();


-- 현재시간 (실행시점) : 2024-09-10 10:11:52. 2024-09-10 10:11:57. 2024-09-10 10:11:52
select now(), SLEEP(5), SYSDATE(), sleep(5), CURRENT_TIMESTAMP();
-- now()와 current_timestamp()는 select 함수가 시작된 시간
-- sysdate()는 현재 시간


-- 날짜 또는 시간만 반환 : 2024-09-10  2024-09-10  10:12:10  10:12:10
SELECT CURDATE(), CURRENT_DATE(), CURTIME(), CURRENT_TIME();


-- X일(or 시간) 전, 후
SELECT now(), ADDDATE(now(), INTERVAL 5 MINUTE), ADDDATE(now(), INTERVAL 5 day), ADDDATE(now(), INTERVAL 5 year),
DATE_ADD(now(), interval -2 MINUTE), SUBDATE(now(), interval -2 MINUTE);


-- 날짜 세부 반환 함수 : 
SELECT year(now()), MONTH(now()), MONTH('2024-10-11'), MONTHNAME(now()), DAYOFMONTH(now()), DAYOFWEEK(now());


-- 날짜 형식 지정 : 
-- 2024-09-03 14:04:44	
-- 2024 September 3 PM 2 04 44	
-- 24-09-03 14:04:44	
-- 24.09.03 Tuesday	
-- 14시04분44초
SELECT DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s'),
      DATE_FORMAT(now(), '%Y %M %e %p %h %i %s'),
      DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s'),
      DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s'),
      DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%s');


-- 시간, 날짜 차
select datediff(curdate(), '1998-11-04'), TIMEDIFF(CURTIME(), '08:30:11');


-- 달의 마지막 날
SELECT last_day('2028-02-11');

논리 관련 및 집계 함수

  • 논리 함수

  • 집계 함수
    하나 이상의 행을 그룹으로 묶어 연산하여 총합, 평균 등을 하나의 결과로 반환

논리 함수 코드 예제

-- 논리함수 : 크다  작다  3  b  a
SELECT if(3 > 2, '크다', '작다');
-- select if(조건 , 참결과, 거짓결과);

SELECT if(3 > 2, '크다', '작다'), IFNULL(null, 'a'), IFNULL('a', 'b'), NULLIF('a','a');

집계 함수 코드 예제

-- employees table에서 사원의 총수, 급여의 합, 급여의 평균, 최고급여, 최저급여
SELECT count(employee_id), sum(salary), AVG(salary), max(salary), min(salary)
from employees;

Group by 절

  • SELECT 문에서 GROUP BY 절을 사용하는 경우 DB는 쿼리된 테이블의 행을 그룹으로 묶음
  • DB는 선택 목록의 집계 함수를 각 행 그룹에 적용하고 각 그룹에 대한 단일 결과 행을 반환
  • GROUP BY 절을 생략하면 DB는 선택 목록의 집계 함수를 쿼리된 테이블의 모든 행에 적용
  • SELECT 절의 모든 요소는 GROUP BY 절의 표현식, 집계 함수를 포함하는 표현식 또는 상수만 가능

GROUP BY 절을 포함한 SELECT 구문 실행 순서

  1. FROM : 테이블을 가져온다
  2. WHERE : 모든 행을 가져오기 전에 조건에 맞게 필터링 한다.
  3. GROUP BY : 필터링 된 행들을 특정 컬럼으로 묶는다.
  4. HAVING : 그룹화 하기 위한 조건을 명시한다.
  5. SELECT : 데이터를 조회한다.
  6. ORDER BY : 조회된 데이터를 어떠한 순서로 정렬할지 정한다.
profile
한 걸음씩 꾸준히

0개의 댓글

관련 채용 정보