아래와 같은 인사관리 테이블이 있습니다.
아래 코드를 통해 데이터베이스 생성, 테이블 생성, 컬럼 생성을 했습니다.
여기서 Query OK, ~ 문구가 출력되었다면 입력이 잘된 것 입니다.
더보기를 누르시면 볼 수 있습니다.
'인사관리 테이블' 코드
-- 데이터베이스 생성
create database sample;
use sample;
-- 테이블 생성
create table dept (
deptno int(2) primary key,
dname varchar(14),
loc varchar(13)
);
create table emp (
empno int(4) primary key,
ename varchar(10),
job varchar(9),
mgr int(4),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno int(2)
);
create table salgrade (
grade int(1),
losal numeric(7,2),
hisal numeric(7,2)
);
-- 데이터 입력
insert into dept values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept values(20, 'RESEARCH', 'DALLAS');
insert into dept values(30, 'SALES', 'CHICAGO');
insert into dept values(40, 'OPERATIONS', 'BOSTON');
insert into emp values( 7839, 'KING', 'PRESIDENT', null, STR_TO_DATE ('17-11-2011','%d-%m-%Y'), 5000, null, 10);
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('1-5-2011','%d-%m-%Y'), 2850, null, 30);
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('9-6-2011','%d-%m-%Y'), 2450, null, 10);
insert into emp values( 7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('2-4-2011','%d-%m-%Y'), 2975, null, 20);
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, STR_TO_DATE('13-7-2017','%d-%m-%Y') , 3000, null, 20);
insert into emp values( 7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('3-12-2011','%d-%m-%Y'), 3000, null, 20);
insert into emp values( 7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-2010','%d-%m-%Y'), 800, null, 20);
insert into emp values( 7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-2-2011','%d-%m-%Y'), 1600, 300, 30);
insert into emp values( 7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-2-2011','%d-%m-%Y'), 1250, 500, 30);
insert into emp values( 7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-2011','%d-%m-%Y'), 1250, 1400, 30);
insert into emp values( 7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('8-9-2011','%d-%m-%Y'), 1500, 0, 30);
insert into emp values( 7876, 'ADAMS', 'CLERK', 7788, STR_TO_DATE('13-7-2017', '%d-%m-%Y'), 1100, null, 20);
insert into emp values( 7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('3-12-2011','%d-%m-%Y'), 950, null, 30);
insert into emp values( 7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-1-2012','%d-%m-%Y'), 1300, null, 10);
insert into salgrade values (1, 700, 1200);
insert into salgrade values (2, 1201, 1400);
insert into salgrade values (3, 1401, 2000);
insert into salgrade values (4, 2001, 3000);
insert into salgrade values (5, 3001, 9999);
표준 SQL은
- 대소문자 구분이 없으며,
- 문장 끝에는 항상 세미클론(;)을 넣어줘야 합니다.
DML(Data Manipulation Lang.)
select - 테이블 내부의 데이터 확
desc 테이블명; - 열(row)명 확인
select 선택할 열명 ... from 테이블명;
select 선택할 열명 as 새 이름 from 테이블명;
- 새 이름으로 출력하기, 따옴표를 통해 띄어쓰기 가능, as 생략가능
컬럼(Column)의 데이터 타입은 크게 3가지로 나눌 수 있습니다.
- 문자열
- varchar
- char
- 숫자(산술 연산 가능)
- 정수형 int
- 실수형 decimal
- 날짜
- date
우선, 데이터베이스에 접근할 수 있는 명령어부터 확인해보겠습니다.
// 전체 데이터베이스 출력
show databases;
// 데이터베이스 사용
use 데이터베이스명;
// 전체 테이블 출력
show tables;
// 테이블 구조 정보 출력
desc 테이블명;
//
select * from 테이블명; => 자칫 잘못하다간 모든 데이터를 출력해서 방대한 양의 데이터가 출력됨.
select * from 테이블명 limit 2; => limit을 통해서 출력 수 제한
emp(사원정보)테이블에 있는 모든 열의 데이터를 확인해보겠습니다.
select * from emp;
emp 테이블에 있는 empno(사원번호), ename(사원이름), job(직책), mgr(관리자 사원번호), hiredate(입사일), sal(급여), comm(수당), deptno(부서번호)에 대한 데이터를 출력해보겠습니다.
// [Enter] 입력 시 한칸 아래로 내려갑니다.
select empno, ename, job, mgr, hiredate, sal, comm, deptno [Enter] from emp;
영문자에 익숙하지 않는 제3자가 봤을 때, 어떤 열의 데이터인지 헷갈릴 수 도 있습니다.
select 선택할 열명 as 새이름 from 테이블명;
select deptno as 부서번호, dname as 부서이름, loc as 부서위치 from dept;
혹시나 띄어쓰기를 하고 싶다면 따옴표( ' 또는 ")을 넣어주면 됩니다.
사칙연산을 통해서 데이터 출력이 가능합니다.
아래에서는 sal(급여 또는 월급)에 숫자 12을 곱해서 연봉을 계산했습니다.
여기서, Null값은 아직 정의되지 않은 값으로써, 0 또는 공백이 아닙니다. (0은 숫자이고, 공백은 하나의 문자)
조건문도 가능합니다.
사원정보 테이블에서 부서번호가 10인 데이터를 확인하고싶다면?
select * from emp where deptno = 10;
(Java에서는 '==' 연산자를 사용했지만, SQL에서는 '='을 사용합니다. 또한 조건문은 if가 아닌 where을 사용합니다.)
사원정보 테이블에서 부서번호가 10이 아닌 데이터를 확인하고 싶다면?
select * from emp where deptno != 10;
사원정보 테이블에서 empno(사원번호), ename(사원 이름), sal(급여) 컬럼을 선택하고 급여가 1000 이하인 데이터를 확인하고 싶다면?
select empno "사원 번호", ename "사원 이름", sal "급여" from emp where sal <= 1000;