본문 바로가기

MySQL

SQL 문법) ANSI 표준 ANSI 함수

🌍ansi 표준, ansi sql
미국국가표준협회(ansi)가 정한 sql 표준이다.

🤔왜?

호환성
mysql에서 작성한 구문이 sqlserver, oracle에서 돌아가야 한다.

주요 ansi 함수

집계 함수
count()
sum()
avg()
max()/min()

-- 집계함수
select avg(salary) as avg_salary
from new_employees;

-- round 반올림 소수점 n 자리까지
select round(avg(salary),2) as avg_salary
from new_employees;

select count(*)as d_count
from new_employees;

-- select count(*)as d_count, name
-- from new_employees;
-- 버전에 따라 안되는 쿼리들이 있다. (논리적, 물리적)

샘플데이터
사원 5명의 평균급여
평균값을 소수점 2번째에서 반올림(round)했다.
전체 사원의 숫자를 셈(count)했다.


문자열 함수
concat()
upper()/lower()
trim()
substring()

-- 문자열 결합, 대문자 처리

select concat('Mr/Ms ', name) as formal_name
from new_employees;

select concat(upper('Mr/Ms '), name) as formal_name
from new_employees;

select concat(lower('Mr/Ms '), name) as formal_name
from new_employees;

-- 문자열
-- 문자열 추출
select*, substring(name, 1, 2)
from new_employees;

-- 문자열 추출, 문자열 결합
select*, concat( substring(name, 1, 2), '*') as formal_name
from new_employees;

name 칼럼의 값에 임의의 문자열을 결합(concat)했다.
name 칼럼에서 1~2번째까지 글자를 추출하고 임의의 문자열을 결합했다.


논리 조건 함수
case
coalesce()

-- 논리 조건
-- case when then else
select*,
	case when employees.gender = 'M' then '남자' else '여자' end as formal_gender
from employees.employees;
-- 다른 db의 table을 불러올 수 있다.

조건문(case)을 통해 gender 칼럼의 값을 한글로 보여주는 새 칼럼을 만든 모습


날짜
current_date
current_time
current_timestamp
extrat()

-- 날짜 시간
select current_date as today;
select current_time as now;

-- 날짜 차이 계산
-- datediff 두 날짜 차이 계산
select*,
	datediff(current_date, hire_date)/365 as years_working
from new_employees;

-- floor 소수점 버림
select*,
	floor(datediff(current_date, hire_date)/365) as years_working
from new_employees;

select 문을 통해 오늘 날짜(current_date)를 나타냈다.
current_date와 hire_date의 차이(datddiff)를 구하고, 그 값을 연도로 표시한뒤, 소수점 값을 버렸다(floor).


형변환
cast()

-- 형 변환
-- dicimal => 형변환 => 문자열 (char) 고정길이
select*, cast( floor(salary) as char) as salary_text
from new_employees;

select*, concat( cast( floor(salary) as char),'원' ) as salary_text
from new_employees;

select*, concat( cast( floor(salary) as char),'원' ) as formal_salary
from new_employees;

select*, concat( substring(cast( floor(salary) as char),1,3),'만원' ) as salary_text
from new_employees;

salay 칼럼의 값에서 소수점을 버리고(floor), 문자열(char)로 형변환(cast)했다. 그 다음 1~3번째 글자만 추출(substring)하고, 임의의 문자열을 결합(concat)했다.



👍sql 함수를 잘 조합해서 정제된 정보를 만들 수 있다면
☕java 단의 코딩이 간결해질 수 있다.