2021.01.05 국비교육 1일차

오전수업

  1. 오라클 dbms 설치 - 11g xe

  2. 관리자 sys/oracle 설정

  3. sqldeveloper 설치 - sys계정 접속 추가

  4. sys계정 - scott(교육목적) 계정 생성/tiger 부여

    4-1 권한부여 : 접속, 테이블 사용 권한 부여

  5. scott에서 사용할 테이블 4개를 sys에서 명령문 실행

    5-1 권한을 부여하는 명령문이 있어서 sys에서 실행함

    5-2 BONUS(보너스 금액), DEPT(부서), EMP(직원), SALGRADE(급여등급) 테이블 생성

Oracle 설치 및 환경설정

(Oracle SQL Developer)

SID = 식별자 -> XE = 전역 데이터 베이스

-> system identifier

Oracle DBS Developer 실행 단축기 -- ctlr + enter

scott 만드는 이유 -> 특정 기능을 사용하기 위한 데이터베이스를 새로 만들어서 사용하는 것이 효율적이기 때문에

사용자 설정 롤에서 SYSDBA는 관리자 모드

그 외는 기본값

새로운 계정 생성

--ctlr + enter 커서가 있는 줄의 명령문 실행

show user; --유저 확인

alter user scott IDENTIFIED by tiger 
  -- scott 계정의 사용자 패스워드를 tiger로 설정(변경)
  -- IDENTIFIED by sth: 비밀번호를 sth로 지정

create user scott IDENTIFIED by tiger;
  -- scott/tiger 계정 생성

GRNAT connect, resource to scott;
 --sys(관리자)가 scott에게 접속, 데이터베이스 사용 권한 부여
  • 주 작업은 scott계정에서 이루어질 예정

? sys가 아닌 scott계정에서 작업을 하는 이유

-> 보안문제

? 관리자 계정과 일반 계정 권한 차이

-> 일반계정에서는 grant 사용못함

  • 강사님이 주신 파일을 sys계정에서 실행시킴(목적: scott계정의 테이블 생성)

?왜 sys 계정에서 실행시켰는가

-> 중간중간 grant명령어가 있어서 sys에서 일괄실행

  • 재접속 후 오류 생김

    ORA-01017: invalid username/password; logon denied

    1. 00000 - "invalid username/password; logon denied"
      *Cause:
      *Action:
      업체 코드 1017

--> 강사님이 보내주신 파일 중간에 비밀번호 변경 명령문이 있었음

alert user scott IDENTIFIED by tiger; 명령문으로 패스워드 재설정 후 접속 성공


오후수업

01장 데이터베이스 개요

03장 SELECT

오라클

데이터베이스 = 조직에서 공동으로 사용하는 데이터를 중앙집중적으로 관리하기 위며 공유하기 위해 만들어짐

DBMS = 데이터베이스 관리 시스템

  • 관계형데이터베이스(RDB)는 행(튜플, 레코드, 로우) x 열(어트리뷰트, 컬럼)의 테이블로 이루어짐
  • 행 전체 = 카디널리티, 컬럼 전체 = 차수(degree)

SQL 종류 ****중요

  • DQL - Data Query Language 질의어

    select

  • DML - Data Manipulation Language 데이터 조작

    insert update delete

  • DDL - Data Definition Language 데이터 정의

    create drop alter rename truncate

  • TCL - Transaction Control Language 트랜잭션 처리

    ? what is transaction

    • DML(insert, update, delete + select)의 집합
    • 여러 작업들이 하나처럼 이루어짐(즉, 자동차 부품 = DML 자동차 = Transaction
    • 트랜잭션이 정상적으로 수행(내재된 DML들이 모두 성공적으로 수행)되면 commit 그렇지 않으면 rollback

    commit rollback savepoint(책갈피)

  • DCL - Data control Language 데이터 제어어

    grant revoke

? drop과 truncate 차이

SQL 특징
  • 대소문자 구별 안함
  • 줄바꿈 쌉가능

의사코드

SELECT * FROM TAP;
-- 계정에서 사용할 수 있는 테이블 출력

DESC 테이블이름;
-- 테이블 구조 확인 명령

SELECT * FROm EMP; -- 에스터리스크(*)는 전체를 뜻함
-- EMP 테이블에 있는 전체 테이블 출력

SELECT ENAME FROM EMP; 
-- EMP 테이블에 있는 ENAME 열 출력

SELECT EMPNO, ENAME FROM EMP;
-- EMP 테이블에 있는 ENAME, EMPNO 열 출력

SELECT EMPNO, ENAME FROM EMP
WHERE ROWNUM <10;  --> 여기가 의사코드 부분
-- 1번부터 9번까지의 데이터 출력

ROWNUM / ROWID

DESC 테이블; 명령문 출력값

EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)

  • NUMBER(전체자릿수, 소수점자리수)

SELECT

  • SELECT 기능

    • selection 행 선택
    • projection 열 선택
    • join 다중 테이블
  • 기본 문법

    • SELECT [DISTINCT]{*, column[alias]} FROM table; // * = 에스터리스크
    • DISTINCT = 중복 제거
    • ALIAS = 별칭 부여 // heading을 변환 //// 별칭 부여시 특수문자 들어갈 경우에 쌍따옴표로 감싸주어야함
SELECT EMPNO FROM EMP;
SELECT ENAME FROM EMP;
SELECT JOB FROM EMP;
SELECT HIREDATE FROM EMP;

SELECT EMPNO, ENAME, JOB, HIREDATE FROM EMP;
-- 칼럼 순서를 변경하면 변경 된 채로 출력

SELECT EMPNO, ENAME, SAL * 1.1 FROM EMP;
-- NUMBER, DATE 타입 연산가능, 연산 후 원본 데이터 타입 바뀌지 않음

SELECT EMPNO AS "사번", ENAME AS "성명", SAL AS "급여" FROM EMP;
-- 칼럼에 별칭 부여

ex) SELECT EMPNO AS "사원번호", ENAME AS "이름", SAL AS "월급", SAL * 12 AS "연봉" FROM EMP;
-- 각 사원들의 월급과 연봉을 출력하는 명령문

Null

이용 불가(Unavailable)(계산, 비교 등등)

지정 불가(unassigned)

알 수 없는(unKnown)

적용할 수 없는 값(Inapplicable)

  • 관련 명령어

    • IS NULL
    • IS NOT NULL
  • 관련 함수

    • NVL(컬럼명, 기본값) : 컬럼의 값이 NULL인 경우 기본값으로 변경

      SELECT ename, comm, NVL(comm, 0) + 100 FROM EMP;
      -- comm열에서 로우가 null값인 것은 0으로 치환
  • NVL2(컬럼명, A, B) :컬럼의 로우가 null값이 아니면 A출력 맞으면 B 출력

    IF DATA = NULL -> B / IF DATA != NULL -> A

    SELECT ename, comm, NVL(comm, 0) + 100, NVL2(comm, 1, 2) FROM EMP;
    -- null이 아니면 1출력 null이면 2출력

Dual

Dual은 하나의 메모장이라고 생각하면된다. 연산을 위한 공백row (1x1)

SYS관리자가 소유한 테이블이지만 모든 사용자가 이용할 수 있다.

SELECT 1 + 10 FROM DUAL;

연결 연산자

|| 를 이용하여 여러개의 문자열을 하나의 문자열로 만들 수 있다.

!!! "" (쌍따옴표)는 alias 사용시에만 사용 ''는 문자, 문자열, 날짜에 사용

SELECT ENAME || '사원' FROM EMP;
-- 이름뒤에 '사원'을 붙여서 출력 / 당연하게 사원을 쌍따옴표로 감싸면 오류가 발생한다

SELECT ENAME || JOB FROM EMP;
-- 임의의 문자외에 칼럼끼리 문자열을 합칠 수 도 있다.

SELECT ENAME || SAL "이름 월급" FROM EMP;
-- 당연하게 alias에는 쌍따옴표를 사용하였다

리터럴('Literal')

SELECT ENAME||'의 직급은'||JOB||'입니다.' AS "사원별 직급" FROM EMP;

SQL을 비롯한 모든 프로그램 언어의 코드는 식별자(Identifier)와 리터럴(literal)로 구성

위 명령어에서 식별자는 SELECT, ENAME, FROM와 같은 SQL을 구성하는 각각의 단어이며

리터럴은 '의 직업은'같은 데이터를 의미

즉, 식별자는 SQL이 구분할 수 있는 단어 리터럴은 그렇지 않은 것

DISTINCT

열에 포함된 중복 제거 후 한번만 출력

SELECT DISTINCT JOB FROM EMP;
-- 하나 이상의 칼럼 가능

WHERE

검새 조건을 지정

  • 기본문법

    SELECT [DISTINCT]{* COLUMN[ALIAS]} FROM TABLE [WHERE 조건식];

SELECT * FROM EMP WHERE DEPTNO = 30;
SELECT EMPNO, ENAME, JOB,DEPTNO FROM EMP WHERE DEPTNO = 30;
-- 부서 번호가 30번인 직원만 출력

SELECT EMPNO, ENAME, JOB FROM EMP WHERE ENAME = 'BLAKE';
-- 이름이 BLAKE인 사원의 정보 출력

SELECT EMPNO 사원번호, ENAME 이름, SAL 월급, SAL * 12 연봉 FROM EMP WHERE ENAME = 'BLAKE';
-- BLAKE의 월급과 연봉 출력

비교 연산자

연산자 의미
= 같다
> 보다 크다
>= 보다 크거나 작다
< 보다 작다
<= 보다 작거나 같다
<> 다르다

나머지는 MOD()함수를 이용한다.

SELECT EMPNO, ENAME, JOB, DEPTNO FROM EMP WHERE JOB = 'SALESMAN';
-- 직업이 'SALESMAN'인 사람 출력

SELECT EMPNO, ENAME, JOB, DEPTNO FROM EMP WHERE HIREDATE = '81/11/17';
-- 고용일이 '81/11/17'인 사람 출력

+ Recent posts