RDBMS
하나의 테이블은 여러 개의 column으로 구성
같은 데이터가 여러 컬럼 또는 테이블에 존재 했을 경우
데이터를 수정 시 문제가 발생할 가능성이 높아짐 - 정규화
SQL
SQL 구문은 DCL, DDL, DML로 구분하며, 아래와 같은 종류가 있다.
DDL (Data Definition Language) : 데이터 정의어
DML (Data Manipulation Language) : 데이터 조작어
DCL (Data Control Language) : 데이터 제어어
TCL (Transaction Control Language) : 트랜잭션 제어어
데이터베이스 생성
create database 데이터베이스명;
create database 데이터베이스명
default character set값
collate 값;
데이터베이스 변경
alter database 데이터베이스명
default character set값 collate 값;
*데이터베이스 삭제
drop database 데이터베이스명;
*이름이 'dbtest'인 데이터베이스 삭제
drop database dbtest;
데이터베이스 사용.
use 데이터베이스명;
use ssafydb;
use ssafydb;
-- 모든 사원의 모든 정보 검색.
select *
from employees;
-- 사원이 근무하는 부서의 부서번호 검색.
select department_id
from employees;
-- 사원이 근무하는 부서의 부서번호 검색.(중복제거)
select distinct department_id
from employees;
-- 회사에 존재하는 모든 부서.
select employees
from departments;
-- 모든 사원의 사번, 이름, 급여 검색.
select employee_id, first_name, salary
from employees;
-- 모든 사원의 사번, 이름, 급여, 급여 * 12 (연봉) 검색.
select employee_id, first_name, salary, salary * 12
from employees;
-- 모든 사원의 사번, 이름, 급여, 급여 * 12 (연봉), 커미션, 커미션포함 연봉 검색.
select employee_id, first_name, salary, salary * 12, commission_pct,
salary * 12 * (1+ifnull(commission_pct, 0))
from employees;
프로그램에서 null값 : 값이 없다.
sql에서 null값 : 값을 알 수 없다.
-- 부서번호가 50인 사원중 급여가 7000이상인 사원의
-- 사번, 이름, 급여, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id = 50
and salary >= 7000;
-- 근무 부서번호가 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id = 50
or department_id = 60
or department_id = 70;
-- 근무 부서번호가 50, 60, 70이 아닌 사원의 사번, 이름, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id != 50
and department_id != 60
and department_id != 70;
-- 근무 부서번호가 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id in (50,60,70);
-- 근무 부서번호가 50, 60, 70이 아닌 사원의 사번, 이름, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id not in (50,60,70);
-- 급여가 6000이상 10000이하인 사원의 사번, 이름, 급여
select employee_id, first_name, salary, department_id
from employees
where salary >= 6000 and salary <= 10000;
select employee_id, first_name, salary, department_id
from employees
where salary between 6000 and 10000;
-- 근무 부서가 지정되지 않은(알 수 없는) 사원의 사번, 이름, 부서번호 검색.
select employee_id, first_name, salary, department_id
from employees
where department_id is null;
-- 근무 부서가 지정된 사원의 사번, 이름, 부서번호 검색.
select employee_id, first_name, salary, department_id
from employees
where department_id is not null;
-- 커미션을 받는 사원의 사번, 이름, 급여, 커미션
select employee_id, first_name, salary, department_id, commission_pct
from employees
where commission_pct is not null;
-- 이름에 'x'가 들어간 사원의 사번, 이름
select employee_id, first_name, salary, department_id
from employees
where first_name like '%x%';
-- 이름의 끝에서 3번째 자리에 'x'가 들어간 사원의 사번, 이름
select employee_id, first_name, salary, department_id
from employees
where first_name like '%x__';
-- 모든 사원의 사번, 이름, 급여
-- 단 급여순 정렬(내림차순)
select employee_id, first_name, salary
from employees
order by salary desc;
-- 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호, 급여
-- 단, 부서별 정렬(오름차순) 후 급여순(내림차순) 검색
select employee_id, first_name, department_id, salary
from employees
where department_id in (50,60,70)
order by department_id asc, salary desc;