KIC/ORACLE

[Oracle] (SQL 기초)

octopengj 2020. 9. 21. 23:22

사용자명 입력:scott

비밀번호 입력:tiger =>커서는 입력되지 않은것처럼 표시

다음에 접속됨:

Personal Oracle Database 11g Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>=>프로그램 종료=>exit

데이터베이스

데이터베이스 관리 시스템(DBMS) =>오라클을 사용(MySQL,infomis,sybase)

=>DataBase Management System

= = = =

- DBMS의 장점

1. 데이터의 공유가 가능하다. (공유폴더처럼) => 원격접속

2. 데이터 중복성이 감소된다.(중복데이터 금지)

3. 데이터의 무결성을 유지할 수 있다.

올바른 값만 입력이 가능(자바의 캡슐화 기법과 동일)

4. 데이터 보안을 유지할 수 있다. => 계정으로 로그인

5. 표준화가 가능하다. (정해진 방식으로 만듬) => table형태로 저장(표)

(저장할 대상자가 많으면 하나의 테이블에 다 저장X)

- DBMS의 단점

1. 데이터 입력이 불편(필드수가 많아질수록)

2. 검색속도가 너무 느리다.

- RDBMS(Realtional Data Base Management System)의 구성

1. 기본적인 데이터 저장 단위는 ( 테이블 )이다.

2. 로우(ROW)와 칼럼(COLUMN)으로 구성

3. 로우는 하나의 레코드이다. (테이블의 가로)

4. 칼럼(필드)은 속성을 나타낸다.

- SQL(Structured Query Language)?

1. 관계 DB를 처리하기 위해 고안된 언어

2. 독자적인 문법을 갖는 DB 표준 언어

3. 데이터를 조회, 입력, 수정, 삭제

SQL+?

1. SQL+는 SQL 명령문 기능을 제공

2.칼럼이나 데이터의 출력 형식을 설정

3. 환경설정하는 기능 제공

* SQL의 종류 *

1. DML(Data Manipulation Language) -> 데이터 조작어 insert,update,delete,select

2. TCL(Transaction Control Language) -> 트랜잭션 처리어(commit,rollback)

3. DDL(Data Definition Language) -> 데이터 정의어 create(생성), alter(수정), drop(삭제)

4. DCL(Data Control Language) -> 데이터 조절어 (권한을 주거나 회수해주는 명령어) grant(권한주기), revoke(권한회수)

<문1>현재 어떠한 계정으로 로그인해서 작업?

SQL plus명령어 => 오라클에서만 사용하는 명령어

;을 쓰지 않고도 실행이 되는 명령어

SQL 명령어 => 전 세계 표준 DB언어

oracle, sysbase, mysql,maria 에서 공통

문장 뒤에 ;을 사용해야 실행이 되는 명령어

<문2>현재 작업한 내용목록을 확인?

SQL>select * from tab(=>동의어)=>테이블

SQLselect * from tab(=>동의어)=>테이블

반드시 문장끝에 ; 을 주고 enter

<문3> 오라클 설치중간에 계정의 암호를 설정하지 않고 skip해서 오라클을 설치한 경우?

scoott is locked =>에러 메세지=>무조건 관리자계정으로 로그인을 해야 된다.

=>관리자 암호 설정X

sqlplus 계정명/암호 as sysdba

====>롤(관리자를 의미)

C:\oracle>sqlplus / as sysdba

관리자로써 암호없이 무조건 로그인해달라

형식) alter user 수정할계정명 account unlock;

scott

alter user sys account unlock;

사용자가 변경되었습니다.

형식) alter user 수정할계정명 identified by 변경할 암호명

alter user sys identified by sys12345; ​

사용자가 변경되었습니다.

창이 열린상태->exit =>프로그램 종료 // 기존에 열린창은 닫고 다시 로그인을 해야 한다.

<문4> emp테이블에 저장된 내용을 확인?

형식) select 보고자하는 필드명(*) from 테이블명;

SQL>select * from emp;

 

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
---------- ---------- --------- ---------- -------- ---------- ----------
    DEPTNO
----------
      7369 SMITH      CLERK           7902 80/12/17        800
        20

      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300
        30

      7521 WARD       SALESMAN        7698 81/02/22       1250        500
        30


     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
---------- ---------- --------- ---------- -------- ---------- ----------
    DEPTNO
----------
      7566 JONES      MANAGER         7839 81/04/02       2975
        20

      7654 MARTIN     SALESMAN        7698 81/09/28       1250       1400
        30

      7698 BLAKE      MANAGER         7839 81/05/01       2850
        30


     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
---------- ---------- --------- ---------- -------- ---------- ----------
    DEPTNO
----------
      7782 CLARK      MANAGER         7839 81/06/09       2450
        10

      7788 SCOTT      ANALYST         7566 87/04/19       3000
        20

      7839 KING       PRESIDENT            81/11/17       5000
        10


     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
---------- ---------- --------- ---------- -------- ---------- ----------
    DEPTNO
----------
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0
        30

      7876 ADAMS      CLERK           7788 87/05/23       1100
        20

      7900 JAMES      CLERK           7698 81/12/03        950
        30


     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
---------- ---------- --------- ---------- -------- ---------- ----------
    DEPTNO
----------
      7902 FORD       ANALYST         7566 81/12/03       3000
        20

      7934 MILLER     CLERK           7782 82/01/23       1300
        10


14 개의 행이 선택되었습니다.

 

<문5> 계정을 생성(test1), 암호는 t1234라는 계정을 생성하는 SQL명령어를 작성하시오.

형식) create user 생성시킬 계정명 identified by 암호명;

=>관리자만 사용이 가능한 명령어

SQL> create user test1 identified by t1234;
create user test1 identified by t1234
                             
1행에 오류: ORA-01031: 권한이 불충분합니다 

=> 이유(일반유저 scott은 이 명령어를 사용이 불가하다는 말)

=> 1.관리자로 로그인해서 명령어 사용

2.일반유저에게 권한을 주는 경우

<문6> 일반유저------>관리자

일반유저 <----- 관리자 전환시켜주는 명령어

형식) connect 접속할 계정명/암호=>일반계정 로그인

connect 접속할 계정명/암호 as sysdba=>관리자로써 로그인

SQL> connect sys/sys12345 as sysdba     =>SQL Plus명령어
     연결되었습니다.    =>관리자로 로그인했음을 의미

 

<문7> test1/t1234로 로그인해 보자

SQL> conn test1/t1234
ERROR:ORA-01045: user TEST1 lacks CREATE SESSION privilege; logon denied
                       =>계정이 존재(권한이 없기때문에 로그인하는 권한)
                       =>계정에 따른 권한이 존재해야 접속해서 사용할 수 있다.

 

<문8> 테이블을 생성?=>데이터를 저장하기위해서 탐색기에서 폴더를 생성

형식) 회원가입(이름,주소,전번,나이,성별,,,,)=>문자열

- char(고정길이) - 길이가 정해짐 3글자,4글자

- varchar2 => 주소 - 길이가 정해져X (이름,주소,나이(숫자), 계좌번호,주민번호,사원번호)

(영어 한글자 저장 (1byte)필요 한글 한글자 저장 (2byte)필요)

숫자형태 => 계산이 되는 숫자인지 확인 O => 숫자

계산과 전혀 관련X => 문자

주소 => varchar2(60(자릿수)) => 한글 30자까지

숫자 => number(2) => 23 (정수)

number(3,2) (실수) 자릿수,소수점 이하

형식) create table 저장할 테이블(=회원테이블)

(필드명(=컬럼명)(저장 대상자) 자료형(문자,숫자) 제약조건, 필드명2,,); => DDL

SQL> create table prtest(id number(3),name varchar2(10));
테이블이 생성되었습니다.
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
PRTEST                         TABLE
​

 

<문9> 테이블의 구조(=Schema)를 확인하고 싶다. (필드명,필드 몇개로 구성, 필드의 자료형을 확인하고 싶다)

형식) describe 구조를 확인할 테이블명

SQL> desc prtest
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(3)
 NAME                                               VARCHAR2(10)

 

<문10> 데이터를 입력(=저장)?=>insert 기능(DML)

형식) insert into 테이블명 values(123,'홍길동'); //숫자는 그냥 그대로 표시,

문자열은 ' '으로 사용

날짜----->'2020-06-29'

SQL> insert into prtest values(1,'홍길동');

1 개의 행이 만들어졌습니다.

SQL>   insert into prtest values(2,'테스트');

1 개의 행이 만들어졌습니다.

SQL>      insert into prtest values(3,'임시');

1 개의 행이 만들어졌습니다.

SQL>      insert into prtest values(4,'임시2');

1 개의 행이 만들어졌습니다.

SQL>      insert into prtest values(5,'테스트2');
SQL> select * from prtest;

        ID NAME
---------- ----------
         1 홍길동
         2 테스트
         3 임시
         4 임시2
         5 테스트2