#21

조성현·2023년 3월 28일
0

데이터 베이스의 정의
데이터의 집합
여러 명의 사용자 응용프로그램이 공유 + 원격

데이터의 저장 용랼
대용량
DB2 IBM
Oracle Oracle
범용
MySQL Oracle
Mariadb Mariadb
SQLSever MS
소형
Access MS
SQLite-android SQLite

데이터 베이스와 연관된 개발자
1. 시스템 관리자(SA)
설치
외부 접근 보안
2. 데이터베이스 관리자(DBA)
모니터링 - 튜닝
백업, 복원(restore)
내부 접근 보안
3. 개발
데이터베이스와 프로그램의 연동 => SQL

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

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;

where - 조건부 출력

select 컬럼명 from 테이블명
where 컬럼명 비교/논리연산 값
ex)
select * from dept where deptno = 10;

급여가 1000 이하인 사원번호 이름 급여출력
select empno, ename, sal
from emp
where sal <= 1000;

+문자열 데이터는 ''를 사용해야함

alias(별칭)

컬럼의 이름바꾸기
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로 다시 정렬함

부가적인 기능 - https://mariadb.com/

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출력

0개의 댓글