본문 바로가기

programming/Gukbi

국비 교육 32일차 - DB

728x90
반응형

 데이터베이스란?

- 유용한 데이터의 집합

- 검색에 용이하게 데이터를 저장하도록 한 것

- 검색뿐만 아니라 수정, 삭제까지도 용이하게 한것

 

통합 데이터

- 여러 부서에서 사용하는 데이터를 한 곳에 모아서 공동관리하는 것

- 원칙적으로 동일한 데이터의 중복을 허용하지 않지만, 검색의 효율성을 위해서 최소한의 중복을 허용하여 통합한다

=(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&amp;crop=600:400;*,*&amp;output-format=jpg&amp;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;
728x90
반응형