국비학원/공부

8일차 oracle(1)

mikan- 2023. 5. 4. 00:04

; 없이 실행되는 명령어 = SQl plus

Schema(스키마) = 테이블의 기본적인 정보(구조)를 확인

DML->insert,update,delete
DQL->select 

Q 1.
어떠한 계정이름으로 로그인 된 상태인지 확인?
오라클은 계정단위로 작업

SQL>show user(환경변수명)

SQL> show user
USER은 "SCOTT"입니다 =>계정이름을 확인


Q 2.
현재까지 작업한 목록을 보고 싶다.=>select 구문
형식) select 보고자하는 항목(=컬럼),,(*) from 저장된 테이블명
                                                                 tab(오라클에서 제공)

sql>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
EMP(직원정보)                            TABLE
SALGRADE                       TABLE

=>테이블 4개로 구성=>프로젝트 (주제에 따라 테이블의 갯수)

sql>select * from emp;//실무에서는 잘 안사용=>조건식을 사용(검색)


Q 3.
테이블의 기본적인 정보를 확인하고 싶다.(구조=Schema)스키마
형식) desc(ribe) 구조를 확인하고 싶은 테이블명

SQL>desc emp


Q 4.
계정(=회원id)을 생성?  test계정,t1234 암호
형식) create user 생성할 계정명 identified by 암호명; = SQL 종류 DDL
         create로 시작하면 DDL

SQL>create user test identified by t12344;


Q 5.
로그인 상태에서 관리자 또는 일반유저로 전환시키는 방법?

형식) conn(ect) 접속할 계정명/암호 ->일반유저
       connect 관리자계정명/암호 as sysdba(관리자)롤

SQL>conn sys/sys12345 as sysdba
연결되었습니다.

화면을 지우는 명령어->clear screen
SQL>clear screen
SQL> show user
USER은 "SYS"입니다


Q 6.
권한을 부여하는 방법=>DCL
형식) grant 권한종류,,, to 계정명,,,,
                             to public //모든 계정(X)
SQL 종류 = DCL
SQL>grant connect,resource to test;


Q 7.
테이블을 생성시키는 방법
형식) DDL
  create table 생성할 테이블명(필드명 자료형(데이터형식));

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


********************************************************************************
Q 8.
********************************************************************************
SQL Buffer창에 내용을 수정하고나서 실행시키는 방법?
단답형(단어), 서술형

방법1 ->/ ->SQL Buffer창에 수정된 내용대로 그대로 실행하라
            ->실행시킬 SQL구문을 보여주지 않고 그대로 실행

방법2->r(un)->실행시킬 SQL문장을 한번 더 보여주고나서 실행이 된다.

ed=>prtest3로 변경->r

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1* create table prtest3(id number(2),name varchar2(10))
SQL> r
  1* create table prtest3(id number(2),name varchar2(10))
테이블이 생성되었습니다.
r = 실행할 sql 출력 후 실행


Q 9.
데이터 저장->insert
형식)insert into 테이블명 values(값);
SQL>insert into  prtest values(1,'테스트');  = DML
1 개의 행이 만들어졌습니다.

insert into  prtest values(1,'테스트');
insert into  prtest values(2,'테스트2');
insert into  prtest values(3,'임시');
insert into  prtest values(4,'홍길동');
insert into  prtest values(5,'테스트22');
=====================

SQL> select * from  prtest;

        ID NAME
---------- ----------
         1 테스트
         2 테스트2->'임시테스트'변경  
         3 임시
         4 홍길동
         5 테스트22


Q 10.
데이터를 수정(=변경)?
형식) update 수정할 테이블명 set 수정할필드명=수정할값,수정할필드명2=값2,,,,
       =모두 변경
         update 수정할 테이블명 set 수정할필드명=수정할값,수정할필드명2=값2,,,,
         where 조건식(찾을 필드명  연산자 찾을값(3장))

SQL> update prtest set name='임시테스트'
      where id=2;//id가 2번인 데이터를 찾아서 이름을 임시테스트로 변경하라 
            or 
       update prtest set name='임시테스트'
       where  name='테스트2'; = name 필드중 이름이 테스트2 라는 데이터를 찾아서 임시테스트 란 이름으로 변경
1행이 갱신되었습니다.

sql = DML update

********************************************************************************
Q 11.
********************************************************************************
DB관리->데이터를 insert,update,delete : 테이블의 구조에 영향을 미치는 명령어
                     =>데이터를 백업시키는 방법
형식1) create table 백업테이블명(b_테이블명)
       as select * from 원본테이블명; //full backup (필드명과 데이터가 동일)
*제약조건은 복사가 안되서 따로 설정해야 됨

형식2) create table 백업테이블명(b_테이블명)
       as select * from 원본테이블명 where 조건식
                                               ========
=>조건에 만족하는 데이터만 검색을 해서 새로운 백업테이블에 저장
    부분 백업

SQL>create table b_prtest as select * from prtest;

SQL>select * from b_prtest;

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


Q 12.
데이터를 삭제?=>조심)=>백업테이블을 작성->대비하자.
=>백업테이블의 데이터를 삭제시키는 연습=>원본을 보존
형식1) delete from 삭제시킬 테이블명;//테이블의 모든 데이터를 삭제
                                    폴더------>비어있는 폴더
=>delete * from 테이블명(X)
형식2) delete from 삭제시킬 테이블명
         where 조건식-->조건에 만족하는 데이터만 삭제(회원탈퇴)

SQL> delete from b_prtest where id=3;
1 행이 삭제되었습니다.

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

SQL> delete from b_prtest;
4 행이 삭제되었습니다.

SQL> select * from b_prtest;
선택된 레코드가 없습니다.


Q 13.
데이터를 잘못 insert,update,delete한 경우 어떻게 복구를 하나요?
편집기->ctrl+z (undo) 처럼 rollback 명령어를 사용해서 복구가 된다.
rollback=>insert,update,delete만 복구가 된다.
============================
 DDL,DCL은 복구가 안된다.
============================
sql>rollback; //전체 복구
롤백이 완료되었습니다.


Q 14.
검색하는 방법
형식)select 보고자하는 필드명,,,(*) ->만들어진 순서대로 
      from  테이블명
      where 조건식(검색하는 필드명 연산자 검색할값
                         '홍길동' 날짜('2021-6-8'),age=23


Q 15. 
작업한 내용(sql구문) -> 실행결과 -> 파일로 저장하고 싶다.
형식)spool 경로를 포함해서 저장할 파일명(~.sql or ~.txt(권장))

SQL>spool c:\webtest\2.db\print\20230501.txt = spool 기록 시작
SQL>show user
SQL>spool off = spool 기록 순간부터 지금까지 저장됨 


Q 16. 
emp테이블에서 사원번호(empno), 이름(ename), 업무(직책)(job)만 검색
형식)select 보고자 하는 필드명(*) -> 만들어진 순서대로 from 테이블명 where 조건식(검색하는 필드명 연산자 검색할 값'홍길동' 날짜('2021-6-8'),age=23

SQL>select empno, ename, job from emp;

     EMPNO ENAME      JOB
---------- ---------- ---------
      7369 SMITH      CLERK
      7499 ALLEN      SALESMAN
      7521 WARD       SALESMAN
      7566 JONES      MANAGER


Q 17.
위의 16번문제 sql구문중에서 사원이름과 업무를 별칭을 부여해서 출력시켜주는 SQL 구문을 작성 = 실제 테이블의 필드가 변경되지는 않는다.(보기 편하게 가상으로 변경)
형식)select 보고자 하는 필드명 as 변경할 단어(=별칭) from 테이블명
       필드명 별칭명 from 테이블명

SQL>select ename as 사원이름, job as 업무 from emp;
SQL>select ename 사원이름, job 업무 from emp;

사원이름   업무
---------- ---------
SMITH      CLERK
ALLEN      SALESMAN
WARD       SALESMAN

/*
SQL>select ename as "사원 번호", job 업 무 from emp;
1행에 오류:
ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
= 별칭 이름을 작성하는 중에 공백을 포함하는 단어를 사용 하거나 특수기호(#,$)를 사용하는 경우에는 반드시 단어 양 쪽에" "을 줘야 된다.
   공백을 보함하지 않은 일반단어중심의 경우에는 "" or 안써도 된다.
"사과 배" = OK, "사과배" = OK
사과 배 = NO, 사과 = OK


Q 18.
계산필드 = 기존의 필드를 이용해서 수식(=계산식)을 도입, 가상으로 필드를 만들어서 검색하는 방법
emp테이블 에서 직원의 연봉을 계산해서 출력하기
사원이름(ename), 업무(job), 급여(sal), 연봉 순으로 출력하는 SQL문장을 작성

SQL>select ename, job, sal, sal*12 from emp;
SQL>select ename as 이름, job as 직업, sal as 월급, sal*12 as 연봉 from emp;

이름       직업            월급       연봉
---------- --------- ---------- ----------
SMITH      CLERK            800       9600
ALLEN      SALESMAN        1600      19200
WARD       SALESMAN        1250      15000
JONES      MANAGER         2975      35700


Q 19.
하나 이상의 필드들의 데이터들을 결합해서 출력
java 언어 "ab"+"cd" = "abcd" -> 문자열+문자열 = 문자열의 결합
"ab"+" "+"cd" = "ab cd"
oracle 언어 + -> || 로 사용

ename, job 필드 2개를 합쳐서 하나의 필드로 만들어서 출력

SQL>select ename, job, ename || ' ' || job as "connect" from emp;

ENAME      JOB       connect
---------- --------- --------------------
SMITH      CLERK     SMITH CLERK
ALLEN      SALESMAN  ALLEN SALESMAN
WARD       SALESMAN  WARD SALESMAN
JONES      MANAGER   JONES MANAGER


Q 20.
검색을 하기 위한 연산자(where 조건식)
형식)select 필드명... from 테이블명 where 조건식
emp테이블 에서 급여가 3000이상 되는 직원을 찾아서 그 직원들의 이름, 업무, 급여 순으로 출력 시켜주는 SQL 출력

SQL>select ename, job, sal from emp where sal >= 3000;

ENAME      JOB              SAL
---------- --------- ----------
SCOTT      ANALYST         3000
KING       PRESIDENT       5000
FORD       ANALYST         3000


Q 21.
emp테이블 에서 업무(job)가 manager인 사원을 찾아서 그 사원의 사원번호(empno), 이름(ename), 업무(job)순서대로 출력 시켜주는 SQL 출력
*영어로 데이터가 저장된 경우는 대, 소문자 구분해서 검색

SQL> select empno, ename, job from emp where job = 'MANAGER';
'Manager' = 조건에 만족하는 데이터가 없음

     EMPNO ENAME      JOB
---------- ---------- ---------
      7566 JONES      MANAGER
      7698 BLAKE      MANAGER
      7782 CLARK      MANAGER


Q 22.
emp테이블 에서 급여가 1300 ~ 1800 사이에 있는 직원의 정보를 사원이름, 업무, 급여순 으로 SQL 출력
=범위 between A and B -> A 와 B 사이만
not between A and B -> A 와 B 사이를 제외한 나머지
A와 B사이의 데이터범위 밖의 데이터를 검색할때 사용하는 연산자

SQL>select ename, job, sal from emp where sal between 1300 and 1800;

ENAME      JOB              SAL
---------- --------- ----------
ALLEN      SALESMAN        1600
TURNER     SALESMAN        1500
MILLER     CLERK           1300

SQL>select ename, job, sal from emp where sal not between 1300 and 1800;

ENAME      JOB              SAL
---------- --------- ----------
SMITH      CLERK            800
WARD       SALESMAN        1250
JONES      MANAGER         2975
MARTIN     SALESMAN        1250
BLAKE      MANAGER         2850
CLARK      MANAGER         2450
SCOTT      ANALYST         3000
KING       PRESIDENT       5000
ADAMS      CLERK           1100
JAMES      CLERK            950
FORD       ANALYST         3000

'국비학원 > 공부' 카테고리의 다른 글

10일차 oracle(3)  (1) 2023.05.04
9일차 oracle(2)  (0) 2023.05.04
7일차 jsp ~ oracle 설치  (1) 2023.05.04
6일차 jsp(미니 프로젝트)  (0) 2023.04.28
5일차 jsp(Array) ~ DOM  (0) 2023.04.28