일단 급한대로 이틀동안 했던 생 것을 들고왔다. 추후 다시 수정예정..
SQL MariaDB
1일차
select 출력 타이틀
from DB.테이블
where 조건문
and, or 등등 필요에 따라
Join
같은 컬럼을 통해 두 테이블을 묶어줌. Key값을 통해 묶었었음
SELECT last_name,first_name,dept_name,title,COUNT(*)
FROM employees.employees e, employees.dept_emp de, employees.departments d, employees.titles ti
WHERE e.emp_no=de.emp_no
AND de.emp_no=ti.emp_no
AND de.dept_no=d.dept_no
AND de.dept_no='d001'
AND ti.title='Senior Staff'
date_format(컬럼,%Y%m%d)=’yyyymmdd’
date_format(컬럼,%y%m%d)=’yymmdd’
date_format(컬럼,%Y-%m-%d)=’yyyy-mm-dd’
SELECT b.salary,b.from_date,b.to_date
,DATE_FORMAT(to_date,'%Y%m%d')
,DATE_FORMAT(to_date,'%y%m%d')
,DATE_FORMAT(to_date,'%m%d')
FROM employees a, employees.salaries b
WHERE a.emp_no=b.emp_no
AND last_name='Peac' AND first_name='Sumant'
AND date_format(to_date,'%Y') BETWEEN '1997' AND '1999'
조건에 맞춘 상황별 결정. < <= = != > >=
SELECT first_name, last_name, title, date_format(ti.to_date,'%Y'),COUNT(*)
FROM employees.employees e, employees.titles ti
WHERE e.emp_no=ti.emp_no
AND ti.title='Engineer'
AND date_format(ti.to_date,'%Y')>='2000'
AND date_format(ti.to_date,'%Y')!='9999'
데이터값이 이상할 때
and last_name IS not null
정렬
order by 컬럼명
묶음
group by
Join
Left Join
Right Join
Inner Join
Fullouter Join
나이구하기
SELECT NOW(),birth_date,
ROUND((TO_DAYS(NOW()) - TO_DAYS(DATE_FORMAT(birth_date, '%Y-%m-%d'))) / 365) AS rage
FROM employees
최대,최소,평균,합계
Min, Max,avg, sum
2일차
Like – 특정 단어 검색
like “%be” - be가 뒤쪽일 때
like “be%” - be가 앞쪽일 때
like “%be%” - be 포함 모두 탐색
SELECT * FROM employees
WHERE first_name LIKE "%Be%“
IF – 조건에 따라 표기
SELECT last_name, if(first_name LIKE "%Be%", "o","x") AS NAME
FROM employees
CASE문
조건에 따라 값을 변경
SELECT case when emp_no='10001' then '사람1'
when emp_no='10002' then '사람2'
ELSE '사람3'
END
when then을 추가해 늘릴 수 있음
from employees
WHERE emp_no='10002'
concat
문자와 문자를 결합
SELECT CONCAT(last_name,'&',first_name),last_name+first_name AS 이름 FROM employees
SELECT CONCAT(last_name,' ',first_name) FROM employees
숫자의 경우 일반 덧셈으로 해결
SELECT salary+salary AS 합계 FROM salaries
substr
문자를 일정 규칙에 맞게 자르기
SELECT first_name,SUBSTR(first_name,3),SUBSTR(first_name,3,2) FROM employees
앞에서 세 번째 글자까지 자르고 출력
세 번째 구간에서 두 번째 글자까지만 출력
SELECT first_name,left(first_name,3),right(first_name,3) FROM employees
SELECT
SUBSTRING_INDEX('gocoder.tistory.com','.',1),
SUBSTRING_INDEX('gocoder.tistory.com','.',2),
SUBSTRING_INDEX('gocoder.tistory.com','.',3),
SUBSTRING_INDEX('gocoder.tistory.com','.',-1),
SUBSTRING_INDEX('gocoder.tistory.com','.',-2),
SUBSTRING_INDEX('gocoder.tistory.com','.',-3),
FROM dual
‘.’을 기준으로 앞에 문장을 출력
-1, -2, -3은 뒷문장을 출력
count
원하는 소숫점까지만 보여주기
SELECT dept_name AS '부서명',COUNT(dept_name) AS '부서별 인원수'
, round(avg(salary),2) AS '평균연봉'
FROM dept_emp de, departments d, salaries s
order by desc limit
올림차순 정렬/ 몇 개까지 표기
SELECT dept_name AS '부서명',COUNT(d.dept_no) AS '부서별 인원수'
, round(avg(salary),2) AS '평균연봉'
FROM dept_emp de, departments d, salaries s
WHERE de.dept_no=d.dept_no
AND de.emp_no=s.emp_no
GROUP BY d.dept_no
ORDER BY AVG(s.salary) DESC LIMIT 3
having
조건에서 정렬
SELECT dept_name AS '부서명',COUNT(d.dept_no) AS '부서별 인원수', round(avg(salary),2) AS '평균연봉'
FROM dept_emp de, departments d, salaries s
WHERE de.dept_no=d.dept_no
AND de.emp_no=s.emp_no
GROUP BY d.dept_no
HAVING AVG(s.salary)>70000;
Rank
순위를 매기는 함수
SELECT dept_name AS '부서명'
,COUNT(d.dept_no) AS '부서별 인원수'
,round(avg(salary),2) AS '평균연봉'
,RANK() over(ORDER BY AVG(s.salary)DESC)AS rank
FROM dept_emp de, departments d, salaries s
WHERE de.dept_no=d.dept_no
AND de.emp_no=s.emp_no
GROUP BY d.dept_no
ORDER BY RANK
rank() over 기준(order by 비교기준)