<14:30 5교시 >

■ create as를 이용한 표의 복제(복사)

테이블 복제 방법 = create 새로운 표 as select * from 복제대상 표

(단, 제약 조건은 복사가 안 되고 제약 조건을 넣고 싶으면 따로 추가해줘야 함.)

 

create 새로운 표 as select * from 복제대상 표

이방법으로 할 때 as 뒤에 오는 게

select * from 복제대상 표 where 절

이어도 복제 가능

 

만약, 복제해 오는 표의 row 값은 존재하지 않지만, 복제대상 표의 형식(DESC)는 가져오고 싶으면,

where 절에 무조건 거짓인 조건을 붙이면 된다.

 

만약 이렇게 만들어진 빈 테이블에 같은 칼럼 형식의 다른 표에서 가져온 데이터를 집어 넣고 싶으면 

insert into 복제된 테이블

select * from 데이터가 있는 테이블

만 입력해도 된다.

 

 

SQL> --dept 테이블을 복사해서 dept2 테이블을 만들어 보세요
SQL> create table dept2 as select * from dept;

Table created.

SQL> --dept2의 deptno 칼럼에 primary key 제약 조건을 걸어보세요.
SQL> alter table dept2
  2  add constraint dept2_deptno_pk PRIMARY KEY(deptno);

Table altered.

SQL> -emp 테이블을 복사해서 emp2 테이블을 만들어보세요.
SP2-0734: unknown command beginning "-emp 테이..." - rest of line ignored.
SQL> --emp 테이블을 복사해서 emp2 테이블을 만들어보세요.
SQL> create table emp2 as select * from emp;

Table created.

SQL> --emp2의 empno 칼럼에 PRIMARY KEY 제약 조건을 걸어보세요.
SQL> alter table emp2
  2  add constraint emp2_empno_pk Primary key(empno);

Table altered.

SQL> --emp2의 deptno 칼럼이 dept2의 deptno 칼럼을 참조하도록 외래키 제약조건을 걸어보세요
SQL> alter table emp2
  2  add constraint emp2_deptno_fk references dept2_deptno_pk;
add constraint emp2_deptno_fk references dept2_deptno_pk
                                         *
ERROR at line 2:
ORA-00902: invalid datatype


SQL> --emp2의 deptno 칼럼이 dept2의 deptno 칼럼을 참조하도록 외래키 제약조건을 걸어보세요
SQL> alter table emp2
  2  add constraint emp2_deptno references dept2_deptno_pk;
add constraint emp2_deptno references dept2_deptno_pk
                                      *
ERROR at line 2:
ORA-00902: invalid datatype


SQL> --emp2의 deptno 칼럼이 dept2의 deptno 칼럼을 참조하도록 외래키 제약조건을 걸어보세요
SQL> alter table emp2
  2  add constraint emp2_deptno references dept2(deptno);
add constraint emp2_deptno references dept2(deptno)
                                            *
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option


SQL> --emp2의 deptno 칼럼이 dept2의 deptno 칼럼을 참조하도록 외래키 제약조건을 걸어보세요
SQL> alter table emp2
  2  add constraint emp2_deptno references dept2(deptno);
                                              *
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option


SQL> --emp2의 deptno 칼럼이 dept2의 deptno 칼럼을 참조하도록 외래키 제약조건을 걸어보세요
SQL> alter table emp2
  2  add constraint emp2_deptno_fk Foreign key(deptno) references dept2(deptno);

Table altered.

 

<15:30 6교시> HR/HR 계정을 활용해서 SELECT 문 다시 연습해보기

■ HR 계정 Unlock 하기

Microsoft Windows [Version 10.0.26100.2454]
(c) Microsoft Corporation. All rights reserved.

C:\Users\acorn>sqlplus system/

SQL*Plus: Release 11.2.0.2.0 Production on 수 11월 27 15:12:43 2024

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> alter user HR Account Unlock identified by HR;

User altered.

SQL>

■ HR 계정 사용해서 여러가지 연습 문제 풀기 -> 더보기로 닫아 놓기

더보기
SQL> --어떤 사원이 얼마를 받는지 궁금하다면?
SQL> select employee_id, first_name, Last_name, salary from employees;


SQL> --departments 테이블에서 부서의 아이디와 이름을 선택하세요.
SQL> select department_ID, department_name from departments;

SQL> select first_name||' '||Last_name FULL_NAME, salary from employees;

SQL> --부서가 없는 직원의 LAST_NAME 조회
SQL> select Last_name from employees where department_id is null;

LAST_NAME
--------------------------------------------------
Grant

SQL> --부서별(부서ID) 근무하는 직원의 수를 조회하세요
SQL> select department_id, count(first_name) from employees
  2  group by department_id;

DEPARTMENT_ID COUNT(FIRST_NAME)
------------- -----------------
          100                 6
           30                 6
                              1
           90                 3
           20                 2
           70                 1
          110                 2
           50                45
           80                34
           40                 1
           60                 5
           10                 1

12 rows selected.

SQL> --급여가 가장 높은 직원의 이름(LAST_NAME)과 급여를 조회하세요;
SQL> select last_name, salary from employees 
where salary = (select max(salary) from employees);

LAST_NAME                                              SALARY
-------------------------------------------------- ----------
King                                                    24000

SQL> --사원 id, 이름, 부서id, 부서명을 select
SQL> select e.employee_id 사원ID, first_name||' '||last_name 이름, d.department_id, d.department_name
  2  from employees e
  3  join departments d on e.department_id=d.department_id;

SQL> --각 직원의 매니저 이름을 조회
SQL> --(단 매니저가 없는 사원의 이름도 나오게)
SQL> select e.Last_name, m.last_name
  2  from employees e
  3  join employees m on e.manager_id=m.employee_id(+);
  
SQL> --위에꺼를 똑같이 ANSI JOIN 으로 
SQL> select e.Last_name, m.last_name
  2  from employees e
  3  left join employees m on e.manager_id=m.employee_id;

 

 

 

<16:30 7교시> DBeaver 이용해서 데이터베이스를 GUI로 접근해서 데이터를 선택하고 조회하는 방법

■ DBeaver란

데이터 베이스 잘하는 비버   데이터베이스를 GUI로 실행할 수 있는 애플리케이션

우리가 그동안 했던건 sqlplus로 명령프롬프트를 사용해서 데이터베이스의 데이터들을 다루었는데

DBeaver는 sqlplus와 같은 기능을 하는데 GUI를 제공하면서 시각적으로도, 기능적으로도 편리하게 대신 해주는 게 많다.

 

■ DBeaver 설치 및 실행(다운로드 링크)

데이터베이스 연결하기

ORACLE 선택 다음 > DRIVER PROPERTIES > DOWNLOAD 끝

>MAIN 가서 HOST는 로컬 호스트(내 컴퓨터에서 내 IP를 가리키는 방법=127.0.0.1), DATABASE XE, SID 선택

>localhost의 계정과 비밀번호 입력

>DB에 연결됨

 

 

■ DB로 직접 select 해보기

+ Recent posts