데이터 베이스의 정의
데이터의 집합
여러 명의 사용자 응용프로그램이 공유 + 원격
데이터의 저장 용랼
대용량
DB2 IBM
Oracle Oracle
범용
MySQL Oracle
Mariadb Mariadb
SQLSever MS
소형
Access MS
SQLite-android SQLite
데이터 베이스와 연관된 개발자
1. 시스템 관리자(SA)
설치
외부 접근 보안
2. 데이터베이스 관리자(DBA)
모니터링 - 튜닝
백업, 복원(restore)
내부 접근 보안
3. 개발
데이터베이스와 프로그램의 연동 => SQL
DML : Data Manipulation Lang - 데이터 조작
- select(중요)
insert
update
delete
DDL : Data Definition Lang - 데이터 정의
- create
alter
drop
rename
truncate
DCL : Data Control Lang - 데이터 정의
- grant
revoke
TCL : Transaction Control Lang - 트랜잭션
- commit
rollback
savepoint
데이터베이스의 데이터베이스 - 디렉토리(폴더)
테이블 - 데이터와 저장소
행과 열(excel)
순서
show databases;
use 데이터베이스명;
show tables;
describe 테이블명;(컬럼의 정의)
DML
-- 데이터베이스 생성
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);
--
create index idx_emp on emp ( deptno );
alter table emp add constraint fk_emp_dept foreign key ( deptno ) references dept( deptno ) on delete no action on update no action;
--
인사관리
dept - 부서정보
deptno - 부서번호
dname - 부서이름
loc - 부서위치
emp - 사원정보
empno - 사원번호
ename - 사원이름
job - 직책
mgr - 관리자 사원번호
hiredate - 입사일자
sal - 급여(월급)
comm - 수당
deptno - 부서번호
salgrade - 호봉정보
grade - 호봉
losal - 급여하한
hisal - 급여상한6
서버 접속
mysql - h 아이피 -u 아이디 -p
mysql - h 아이피 -u 아이디 -p 데이터베이스명
데이터배이스 목록불러오기
show databases;
특정 데이터베이스 사용
use 데이터베이스명;
테이블 목록 불러오기
show tables;
특정 테이블 구조
descirbe 테이블명;
desc 테이블명;
함수
단일행 함수 => 1:1
Information - 시스템정보
Numeric - 수학 함수
String - 문자열 처리 함수
Date - 날짜 처리
Control - 제어
그룹함수 => 다수 : 1
데이터 개수 count(컬럼명을 쓸 경우 null은 빼고 계산 -> *사용)
최대/최소 값 max/min
합 sum
평균 everige
분산/표준편차
select 컬럼명
from 테이블명
where 조건
order by 정렬
limit
select 컴럼 from 테이블명;
또는
select 컴럼
from 테이블명;
select * from dept; -> dept 테이블에서 모든 컬럼을 가져온다.
ex)
select deptno, dname
from dept;
또는
select empno, ename from emp;
select 컬럼명 from 테이블명
where 컬럼명 비교/논리연산 값
ex)
select * from dept where deptno = 10;
급여가 1000 이하인 사원번호 이름 급여출력
select empno, ename, sal
from emp
where sal <= 1000;
+문자열 데이터는 ''를 사용해야함
컬럼의 이름바꾸기
select 컬럼명 as(생략가능) 바꿀이름 from 테이블명;
띄어쓰기를 적용할 경우 ''를 사용
산술연산자
select 숫자 연산자 숫자;
select 컬럼 연산자 숫자;
비교연산자
true 1 / false 0
다르다 : != / <>
'문자열'을 비교 대상자로 하면 아스키코드 값을 기준으로 비교한다
논리연산자
0 : false / 1이상 true
범위형 : &&, and, between A and B
목록형 : ||, or , in ('A', 'B')
null을 뽑아내려면 is null 이라고 입력
일부 문자열이 포함되게 출력하기
like 'A%' : 앞자리가 A로시작하는 / '%A' : 뒷자리가 A로 끝나는 / '%A%' : A가 포함된
_ : 정확한 값을 확인하고 싶을 때 사용
distinct 컬럼명 : 중복 제거
distinct 컬럼명, 컬럼명 : 두개의 컬럼명 하나의 쌍으로 이루어져서 나옴
모르는 테이블 조회
select 컬럼명 from 테이블명 limit 3;
select deptno, job, empno, ename from emp;
select deptno, job, empno, ename from emp order by deptno;
select deptno, job, empno, ename from emp order by deptno, job;
select deptno no, job, empno, ename from emp order by no;
select deptno, job, empno, ename from emp order by 1;
select
from
where
order by 컬럼명(오름차운(asc) 기본값/내림차순(desc))
order by a, b : a를 먼저 정렬하고 그 정렬에서 b로 다시 정렬함
abs() : 절대값
ceil() : 올림
floor() : 내림
round() : 반올림
truncate() : 절삭(-를 쓰면 소수점 위에서 부터 절삭)
pow(a, b) : a의 b제곱
mod(a, b) : a%b와 동일
greatest(a, b, c) : 최대값
least(a, b, c) : 최소값
char_length() : 문자열을 구할 때
concat(a, b) : a와b의 문자열을 연결
insrt(a, b) : a문자열에 b문자열의 위치가 어딘지/indexOf와 같음
left(a , n) : 왼쪽부터 n번째 까지 잘라내서 출력
rigth(a, n) : 오른쪽부터 n번째 까지 잘라내서 출력
mid(a, n, n2) : 왼쪽부터 n번째에서 n2번째 까지 잘라내서 출력
substring(a, n, n2) : mid()와 동일
replace(a, b, c) : a문자열에 있는 b의 문자열을 c문자열로 변경
insert(a, n, n2, b) : a문자열의 n번째에서 n2까지의 문자열에 b문자열 삽입
lcase()/lower() : 대문자->소문자
ucase()/upper() : 소문자->대문자
reverse(): 거꾸로 바꿈
lpad(a, n, b) : n의 숫자만큼 a문자의 왼쪽기준으로 b문자열을 채움 - 주로 숫자에 사용
rpad(a, n, b) : n의 숫자만큼 a문자의 오른쪽기준으로 b문자열을 채움 - 주로 문자열에 사용
trim(' a ') : 공백을 지움
ltrim(' a ') : 왼쪽의 공백을 지움
rtrim(' a ') : 오른쪽의 공백을 지움
now(), sysdate(), current_timestamp() : 날짜 출력
now(), date_format(now(), '%Y-%m-%d') : 두번째 형식으로 날짜 출력
now(), date_add(now()/'xxxx-xx-xx', interval n day) : 현재/'xxxx-xx-xx' 날짜에서 n일 후
now(), date_sub(now()/'xxxx-xx-xx', interval n day) : 현재/'xxxx-xx-xx' 날짜에서 n일 전
timestampdiff(day, now(), 'xxxx-xx-xx') : 현재를 기준으로 'xxxx-xx-xx'과의 일수 차이
year('20230708'), year('2023-07-08'), year('2023/07/08') : 연도 출력
extract(year from now()) : 연도 출력
select dayname(now()) : 요일 출력
unix_timestamp() : 타임스탬프
if(1 = 2, '참', '거짓') : true면 참, false면 거짓을 출력
ifnull(a, b) : a가 null이면 b를 출력, 그렇지 않다면 a출력