1.표준 SQL -> MariaDB
2. 데이터베이스에 대한 구성
책 p.512
데이터베이스 클라이언트 데이터베이스 서버
내장 클라이언트 (네트워크) DBMS(시스템) + 데이터베이스(저장소)
MySQL Client(관리자)
Command Prompt(기타 사용자)
외장 클라이언트
HeidiSQL
직접 제작
java
c
python
=>
SQL(Structured Query Lang.)
표준 SQL(모든 데이터베이스가 동일) + 확장 SQL(각 데이터베이스가 다름)
표준 SQL - ANSI
DML(데이터 조작)
DDL(데이터 저장구조 조작)
DCL(데이터 접근권한)
TCL(트랜지션)
데이터베이스 서버 - 고용량 처리 원칙
* 파일
파일 데이터베이스
SQLite => 스마트폰
MariaDB <- MySQL
MariaDB DBMS
데이터베이스
테이블
행(데이터*) / 열(필드)
1. 접속 (클라이언트 사용법)
1. Command Prompt
mysql -u 사용자아이디 -p
2. HeidiSQL
2. 데이터베이스의 목록
MariaDB [(none)]> show databases;
3. 한개 데이터베이스 선택
MariaDB [(none)]> use sample;
Database changed
MariaDB [sample]>
4. 테이블 목록
show tables;
5. 필드에 대한 규정 설정
desc(ribe) 테이블명;
6. ....
한글 -> SQL
select - 컬럼절 : *, 컬럼이름, 별칭
from - from 절 : 테이블명
where - where 절 : 행(데이터) 선택에 대한 조건
연산자
like
....
order by - order by절 : 정렬
limit - 데이터 추출
함수
length()
concat() - select concat(ename, '님의 담당업무는', job, '입니다.')
-> from emp
-> where deptno = 10;
instr()
left(), right(),
mid(), substring()
replace()
insert()
rower(), upper()
reverse()
ltrim(), rtrim(), trim()
lpad(), rpad()
format()
now()
sysdate()
current_timestamp()
curdate()
curtime()
date_add() - select now(), date_add(now(), interval 2 day);
date_sub()
datediff()
ifnull()
1과 3을 동시에 하고 싶으면
mysql -u 사용자아이디 -p 데이터베이스이름
* ERP(Enterprise REsource Palnning - 전사적 자원관리 계획)
회사업무에 필요한 모든 자료를 전산화 <= 업무 문서 자료(페이퍼)
=> 데이터베이스 화
=> 저장,수정,삭제
https://www.oracle.com/kr/erp/what-is-erp/
ERP란 무엇인가?
ERP란 무엇인가? ERP는 Enterprise Resource Planning의 약칭이며 조직들이 회계, 조달 및 제조 등 일상 업무 활동을 관리하기 위해 사용하는 시스템 및 소프트웨어 패키지를 의미합니다.
www.oracle.com
ex )
사원번호 ?? 님의 부서번호는 ??번 입니다.
30번 부서의 사원들에 대한 정보를 'XXXX 사원번호의 입사일은 XXXX년XX월XX일이다.'로 출력
SELECT CONCAT(empno, ' 사원번호의 입사일은', DATE_FORMAT(hiredate, ' %Y년 %m월 %d일'), '이다.')
30번 부서의 사원들의 급여 중 2000보다 많으면 많다 적으면 적다고 출력
dbscript 사용 - source c:\mariadb\ex01.sql
ansi 방식 메모장 저장
case when ... then ... else .. end
= if else if...
사원 테이블 사원번호, 사원이름, 부서명
10 - > 회계
20 -> 조사
30 -> 영업
40 -> 총무
10 -> 급여의 10%
20 -> 급여의 20%
30 -> 급여 인상없음
암호화
가역적
문자열 -> 암호 -> 암호화된 문자열-> 복호화(X)
비가역적
문자열 -> 암호 -> 암호화된 문자열-> 복호화 -> 문자열
=> 단일행 함수
입력 갯수 = 출력 갯수
10 10
==============================================================================
=> 그룹 함수
입력 갯수 => 적은 양의 출력 갯수
count()
max(), min(),
sum(), avg()
분산
표준편차
그룹화
select 컬럼명
from emp
group by deptno;
select deptno, count(*)
-> from emp
-> group by deptno;
+--------+----------+
| deptno | count(*) |
+--------+----------+
| 10 | 3 |
| 20 | 5 |
| 30 | 6 |
+--------+----------+
담당업무별 평균급여
select job, avg(sal) from emp
-> group by job;
+-----------+-------------+
| job | avg(sal) |
+-----------+-------------+
| ANALYST | 3000.000000 |
| CLERK | 1037.500000 |
| MANAGER | 2758.333333 |
| PRESIDENT | 5000.000000 |
| SALESMAN | 1400.000000 |
+-----------+-------------+
5 rows in set (0.000 sec)
두 개 이상의 컬럼으로도 그룹화가능
=> distinct / order by
부서별
담당업무별
select deptno, job, sum(sal)
-> from emp
-> group by deptno, job;
having절
서브쿼리(쿼리 안에 쿼리)
SCOTT 사원의 급여보다 큰 급여를 받는 사원에 대한 정보를 출력
1. SCOTT 사원의 급여
2, 이 급여보다 큰 사원 정보
첫번째 쿼리
select sal
-> from emp
-> where ename='scott';
두번째 쿼리
select ename, sal
-> from emp
-> where sal >= 3000;
서브쿼리
select ename, sal
-> from emp
-> where sal >= (select sal from emp where ename='scott');
내부 쿼리의 결과에 따라서
단일행 서브쿼리 - 반드시 1열 1행
=, !=, >, <, >=, <=
복수행 서브쿼리 - 여러행
in, any, all
=================================================
20번 부서에서 최고 급여를 받는 사원보다 많은 급여를 받는 사원 정보 출력
select * from emp
where sal > (select max(sal) from emp where deptno=20);
=================================================
각 부서별 최고 급여를 받는 사원의 대한 정보출력
1번쿼리
select max(sal)
from emp
group by deptno;
2번쿼리
select * from emp
where sal in (5000,3000,2850);
서브쿼리
select * from emp
where sal in(select max(sal) from emp group by deptno);
=================================================
20번 부서의 사원이 속한 업무와 같은 사원들에 대한 정보
select * from emp
group by job;
Any / All
컬럼명 < any 값
컬럼명 > any 값
컬럼명 < all 값
컬럼명 > all
직책이 manager인 사원들의 급여 전체보다 적은 사람들에 대한 정보 출력
<all
select empno, ename, sal
-> from emp
-> where sal < all(select sal from emp where job = 'manager');
+-------+--------+---------+
| empno | ename | sal |
+-------+--------+---------+
| 7369 | SMITH | 800.00 |
| 7499 | ALLEN | 1600.00 |
| 7521 | WARD | 1250.00 |
| 7654 | MARTIN | 1250.00 |
| 7844 | TURNER | 1500.00 |
| 7876 | ADAMS | 1100.00 |
| 7900 | JAMES | 950.00 |
| 7934 | MILLER | 1300.00 |
+-------+--------+---------+
===============================================================
각 부서의 평균 급여 전체보다 적은 사원들에 대한 정보 출력
select * from emp
-> where sal < all (select avg(sal) from emp group by deptno);
+-------+--------+----------+------+------------+---------+---------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+----------+------+------------+---------+---------+--------+
| 7369 | SMITH | CLERK | 7902 | 2010-12-17 | 800.00 | NULL | 20 |
| 7521 | WARD | SALESMAN | 7698 | 2011-02-22 | 1250.00 | 500.00 | 30 |
| 7654 | MARTIN | SALESMAN | 7698 | 2011-09-28 | 1250.00 | 1400.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 2011-09-08 | 1500.00 | 0.00 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 2017-07-13 | 1100.00 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 2011-12-03 | 950.00 | NULL | 30 |
| 7934 | MILLER | CLERK | 7782 | 2012-01-23 | 1300.00 | NULL | 10 |
+-------+--------+----------+------+------------+---------+---------+--------+
===============================================================