데이터베이스란?
- 유용한 데이터의 집합
- 검색에 용이하게 데이터를 저장하도록 한 것
- 검색뿐만 아니라 수정, 삭제까지도 용이하게 한것
통합 데이터
- 여러 부서에서 사용하는 데이터를 한 곳에 모아서 공동관리하는 것
- 원칙적으로 동일한 데이터의 중복을 허용하지 않지만, 검색의 효율성을 위해서 최소한의 중복을 허용하여 통합한다
=(PRIMARY KEY 사용)
저장 데이터
- 컴퓨터가 접근할 수 있는 디스크와 같은 저장 매체에 저장된 것
운영 데이터
- 조직의 운영에 기본적으로 반드시 필요한 데이터를 저장하는 것
공용 데이터
- 한 조직의 여러 운용 프로그램이 공동으로 사용하는 것
Data File은 하드디스크에 저장됨
Application은 자바
DBMS - 오라클
데이터 베이스 언어
- 데이터베이스를 정의하고 접근하기 위한 통신수단
- 사용 목적에 따라 데이터 정의어, 데이터 조작어, 데이터 제어어로 구분
1) 데이터 정의어 (DDL Data Definition Language)
- 데이터 베이스 스키마를 DBMS가 이해할 수 있도록 기술하는데 이용
- 데이터베이스 관리자, 설계자가 주로 사용
2) 데이터 조작어 (DML Data Manipulation Language)
- 사용자가 DMS로 하여금 원하는 데이터를 처리하게끔 명세하는 도구
- 사용자(응용 프로그램)와 DBMS간 인터페이스 제공
검색, 삽입, 삭제, 변경 등을 포함
3) 데이터 제어어(DCL Data Control Language)
- 데이터 보안, 무결성, 회복, 병행 수행 제어를 명세할 수 있는 명령어들을 포함
- 주로 관리목적으로 데이터베이스 관리자가 사용함
-- 한줄 주석
/*
여러줄 주석
오라클 표현법
= 숫자표현 : 10 , 10.5 => 정수 / 실수
= 문자/문자열 표현 : 'A'=(문자) ,'ABC' (문자열) => ""(인용부호:별칭)
= 날짜표현: '' (문자열 형식으로 저장)
형식) 'YY/MM/DD' => '21/02/08'
데이터베이스
오라클
SQL
= DQL : SELECT (저장된 데이터를 검색)
= SELECT의 형식
= 조건
= 연산자
= 내장 함수 => 사용처
= 단일행 함수
= 집합 함수
= JOIN : 데이터 연결
= INNER JOIN
= EQUI_JOIN
= NON_EQUI_JOIN
= OUTER JOIN (INNER JOIN+알파)
= LEFT_OUTER_JOIN
= RIGTH_OUTER_JOIN
= FULL_OUTER_JON
= SUBQUERY : SQL문장 연결
= 단일행 서브쿼리
= 다중행 서브쿼리
= 스칼라 서브쿼리 : 컬럼대신 사용
= 인라인(Top-N) : 테이블 대신 사용
= DML : 조작언어 (추가 , 수정, 삭제)
INSERT , UPDATE , DELETE
------------------------------------- 웹프로그래머가 사용
= DCL : DBA (권한부여 / 권한 해제)
GRANT / REVOKE
= DDL : 생성 => CREATE , ALTER , DROP , RENAME , TRUNCATE
생성 수정 삭제 이름 변경 잘라내기
제약조건 : 오라클에 저장되는 데이터 (공유) : 필요한 데이터만 저장
(정형화된 데이터)
=> 정규화 (프로젝트)
= TCL : 정상 저장 / 취소
COMMIT / ROLLBACK => TRANSACTION (일괄처리) : Spring,JSP
사용자 요청 ========> Java ============> 오라클
데이터를 받아서 => SQL문장으로 변환 => 오라클 전송
<========= Java <============= 오라클
1. SQL (DQL) => Column명이 어떤게 있는지 확인
======== 자바 멤버변수
1) Column을 확인 => DESC table명 => table(column+record)
======= row
오라클은 데이터가 저장이 될때 기본단위가 table (column명+실제 데이터)
2) 오라클 문법
========= 1. 대소문자 구분이 없다 (약속: 키워드는 대문자로 사용)
2. 문장이 종료하면 ;을 사용한다 (자바에서 SQL문장을 전송할때 ;을 사용하면 오류발생
*/
DESC emp;
/*
EMPNO NOT NULL NUMBER(4) => 사번 (중복이 없다) => 정수형으로 저장 (int)
========= 0~9999
ENAME VARCHAR2(4000) => 이름 => 문자열 ==> '' WHERE ename='SCOTT' (String)
==== 1~10 => Byte
JOB VARCHAR2(9) => 직위 => 문자열
MGR NUMBER(4) => 사수 => 정수형
HIREDATE DATE => 입사일 => 날짜형 (java.util.Date)
SAL NUMBER(7,2) => 급여 => 실수형 (double)
COMM NUMBER(7,2) => 성과급
DEPTNO NUMBER(2) => 부서번호
=========== 0~99
*/
/*
폴더 , 파일
=== ===
데이터베이스 , 테이블
========== XE
DQL : SELECT (오라클에 저장된 데이터를 검색)
1) SELECT의 문법 형식
SELECT *|column명,column명 ==> *(전체데이터 검색),필요한 데이터만 읽기 (column...)
FROM 테이블명(파일명) ==> for
[
1.WHERE 조건문 ==> 자바 (if) => 연산자
2.GROUP BY (그룹컬럼) => 그룹별로 나눠서 처리 (입사년도,직위별,부서별)
3.HAVING 그룹 조건 => GROUP BY가 있는 경우에만 사용이 가능 => 연산자
4.ORDER BY 컬럼명 (ASC|DESC) => 정렬
ename ASC|DESC
]
=> 조건 , 정렬 WHERE , ORDER BY
*/
-- 1. emp(사원 정보) => 모든 사원 정보를 보여 달라
SELECT * FROM emp;
-- 2. emp(사원정보) => 사번 , 이름 , 급여
SELECT empno,ename,sal FROM emp;
-- 3. emp(사원정보) => 이름 , 직위 , 입사일
SELECT ename,job,hiredate FROM emp;
-- 4. SELECT 사용방식
SELECT ename,job,hiredate
FROM emp;
-- 5. XE(데이터베이스:폴더) : 모든 테이블(파일)이 저장 => 모든 테이블 확인
-- 테이블명이 중복되면 안된다 (테이블 명이 유일)
SELECT * FROM tab;
/*
이미 만들어진 테이블 확인
SELECT * FROM tab;
컬럼 확인
DESC 테이블명
*/
-- 옵션 사항 (1. 문자열 결합, 2. 컬럼의 별칭 , 3.중복없는 데이터 출력)
/*
문자열 결합 (자바 + , 오라클 || => OR)
별칭 hiredate , job , sal
hiredate "입사일"
hiredate as 입사일
중복없는 데이터 DISTINCT
*/
-- 1. 별칭
SELECT empno "사번",ename as 이름,job "직위",hiredate as 입사일,sal "급여"
FROM emp;
-- 2. 중복없는 데이터 (직위 종류)
SELECT DISTINCT job FROM emp;
-- 3. 부서(deptno)의 종류를 가지고 온다 => 별칭을 부서번호
SELECT DISTINCT deptno "부서번호"
FROM emp;
-- 4. 문자열 결합 (||)
SELECT '이름은 '||ename||'이고 입사일은 '||hiredate||'입니다' as 사원정보
FROM emp;
/*
오라클 연산자
1. 산술 연산자 ( + , - , * , / ) => 형변환이 존재하지 않는다,단항연산자(X)
/ => 0으로 나눌 수 없다
정수 / 정수 = 실수 => 출력시에 주로 사용 (SELECT뒤에서 주로 사용)
이름 국어 영어 수학
=====================
홍길동 80 80 80 SELECT 국어+영어+수학,(국어+영어+수학)/3
심청이 90 90 90
박문수 70 70 70
=====================
SUM(국어) ,AVG(영어)
2. 비교연산자 ( = , !=(<>,^=) , < , > , <= , >=)
WHERE문장 뒤에 사용 (조건문을 만드는 경우에 주로 사용) => 조건(true/false)
## WHERE문장은 자바의 if문과 동일 => 조건문
3. 논리 연산자 (WHERE,HAVING뒤에 사용) : AND(범위포함) , OR(범위미포함)
& => 입력값을 받는 경우에 사용 , || => 문자열 결합으로 사용
## 데이터 수집 : 이미지를 저장할 경우에 &가 있는 경우에 문제가 발생
// https://mp-seoul-image-production-s3.mangoplate.com/keyword_search/meta/pictures/xt8viz_sbbjiyalo.jpg?fit=around|600:400&crop=600:400;*,*&output-format=jpg&output-quality=80
4. IN => OR가 여러개 일 경우
5. BETWEEN ~ AND => 기간, 범위
6. IS NULL , IS NOT NULL : NULL값일 경우
7. LIKE : 검색(유사)
8. NOT : 부정
9. 집합연산자 (UNION, UNION ALL,INTERSECT , MINUS) : 출력 결과값을 제어 (두개의 select문장이 필요하다)
ORDER BY : 정렬
=> 오라클은 출력시에 정렬은 ? 저장된 순서 (정렬이 없다)
=> SELECT *
FROM emp
========
ORDER BY (컬럼명) ASC|DESC (ASC=> 올림차순 , DESC => 내림차순)
음악 , 영화 => 순위 => ASC
게시판 , 댓글 => 최신 => DESC
*/
SELECT *
FROM emp
ORDER BY empno ASC;
-- ASC는 ORDER BY시에 생략이 가능
-- empno ename job mgr hiredate comm sal deptno
SELECT empno, ename, job, mgr, hiredate, comm ,sal, deptno
FROM emp
ORDER BY empno;
-- 번호는 컬럼의 순서
SELECT *
FROM emp
ORDER BY 8;
-- 출력 순서로
-- 오라클은 0번부터가 아니고 1번부터
/*
HELLO JAVA
0123456789 => 자바
12345678910 => 오라클
*/
SELECT ename,deptno
FROM emp
ORDER BY 2;
-- DESC는 생략할 수 없다
SELECT ename,deptno
FROM emp
ORDER BY deptno DESC;
-- 급여가 높은 순서로 출력
SELECT ename, sal
FROM emp
ORDER BY sal DESC;
SELECT ename,sal
FROM emp
ORDER BY 2 DESC , 1 ASC;
-- sal 내림차순 출력 => 같은 값이 있는 경우에 이름 올림차순
/*
SELECT
= SELECT * | column명,column명...
FROM (테이블명,뷰명, SELECT~)
===== =======
View 인라인뷰
[
1. WHERE
2. GROUP BY
3. HAVING => 단독으로 사용이 불가능 (Group by가 있을때만 사용이 가능)
4. ORDER BY
]
= DESC는 테이블의 컬럼명과 데이터형 확인
= 문자열,날짜는 ''을 사용한다
== YY/MM/DD
= 별칭 => 컬럼 , 테이블에 사용
SELECT abcdefghije "AA" , as 별칭
FROM salgrade s
= || => 문자열 결합
= & => 입력값을 받는 경우
= DISTINCT : 중복이 없는 데이터 출력
= 저장된 데이터는 대소문자를 구분 (테이블이 저장될 경우 => 대문자로 저장)
= 비교연산자 => 숫자 , 문자,날짜 포함
= BETWEEN ~ AND >= AND <=
*/
SELECT deptno,sal,ename
FROM emp
ORDER BY 1,2 DESC;
'programming > Gukbi' 카테고리의 다른 글
국비 교육 34일차 - ORACLE (0) | 2021.02.10 |
---|---|
국비 교육 33일차 - DB (0) | 2021.02.09 |
국비 교육 31일차 - oracle (0) | 2021.02.07 |
국비 교육 31일차 - 네트워크를 이용한 채팅 프로그램 (0) | 2021.02.07 |
국비 교육 30일차 - 네트워크 (0) | 2021.02.03 |