[새싹] 현대IT&E 231026 기록 - Oracle 1~2장

최정윤·2023년 10월 26일
0

새싹

목록 보기
8/67

oracle 설치하기


  • colima 설치
$ brew install colima
  • 도커 설치 - 도커 데스크탑
$ brew install --cask docker
  • colima 실행
$ colima start --memory 4 --arch x86_64
  • 컨테이너 리스트 확인
$ docker ps // 실행 중

$ docker ps -a // 종료된 것
  • 컨테이너 시작/재시작
$ docker start 컨테이너명
$ docker restart 컨테이너명
  • 컨테이너 생성 및 시작
$ docker run -e ORACLE_PASSWORD=pass -p 1521:1521 -d gvenzl/oracle-xe
$ docker ps
  • 컨테이너 이름 변경
$ docker rename 현재컨테이너이름 변경할이름
  • sqlplus 터미널 연결
$ docker exec -it oracle sqlplus

system
pass

ace
ace

system as sysdba
oracle
  • 컨테이너 종료 & 콜리마 종료
docker stop 컨테이너명
colima stop
  • sqlplus 명령어 사용법
sqlplus 뒤에 붙이고 사용
docker exec -it oracle sqlplus ace/ace@localhost:1521/xepdb1
conn ace/ace@localhost:1521/xepdb1

docker exec -it oracle bash
쉘에서 
sqlplus /nolog
conn ace/ace@localhost:1521/xepdb1

docker exec
  • 컨테이너 삭제
docker rm 컨테이너이름
docker exec -it oracle sqlplus

  • 도커 접속
docker exec -it oracle sqlplus /nolog
  • 오라클 접속 (컨테이너 비밀번호 / pdb 접속방법)
conn sys/pass@localhost:1521/xepdb1 as sysdba

docker exec -i oracle sqlplus sys as sysdba/pass@localhost:1521/xepdb1
docker exec -i oracle sqlplus system/pass@localhost:1521/xepdb1
docker exec -i oracle sqlplus ace/ace@localhost:1521/xepdb1

강사님 코드

=============================
 Oracle 21c XE 설치 후
=============================

  C:\Users\COM> notepad xe_start.bat

    net start OracleOraDB21Home1TNSListener
    net start OracleServiceXE


  C:\Users\COM> notepad xe_stop.bat

    net stop OracleServiceXE
    net stop OracleOraDB21Home1TNSListener

  C:\Users\COM> xe_stop
  C:\Users\COM> xe_start


# Connecting to a Pluggable Database (PDB)

  참고.https://oracle-base.com/articles/12c/multitenant-connecting-to-cdb-and-pdb-12cr1#pdb
  
  [1] 설치 뒤 SQL*Plus로 접속

  C:\Users\COM> sqlplus / as sysdba         <- CDB에 접속하는 것임

  SQL> col name format a30
  SQL> col pdb  format a30

  SQL> select name, pdb
       from   v$services
       order  by name;

  NAME                           PDB
  ------------------------------ ------------------------------
  SYS$BACKGROUND                 CDB$ROOT
  SYS$USERS                      CDB$ROOT
  xe                             CDB$ROOT   <- CDB(Container Database)
  xeXDB                          CDB$ROOT
  xepdb1                         XEPDB1     <- PDB(Pluggable Database), 우리가 사용할 DB

  SQL> show con_name

  CON_NAME
  ------------------------------
  CDB$ROOT

  SQL> alter session set container = xepdb1;

  SQL> show con_name

  SQL> exit

  C:\Users\COM> sqlplus system/oracle@localhost:1521/xepdb1     <- PDB에 관리자로 접속
  C:\Users\COM> sqlplus pass/oracle@localhost:1521/xepdb1     <- PDB에 관리자로 접속

  SQL> show con_name

  CON_NAME
  ------------------------------
  XEPDB1
  
  SQL> select * from session_privs;
  
  SQL >  drop user ace cascade;  

  SQL> create user ace identified by ace default tablespace users temporary tablespace temp;

  SQL> alter user ace quota unlimited on users;

  SQL> grant connect, resource, create session, create table, create procedure, create trigger, create view, create sequence to ace;
      
  SQL> exit

  C:\Users\COM> sqlplus ace/ace@localhost:1521/xepdb1
  C:\Users\COM> conn ace/ace@localhost:1521/xepdb1

  SQL> show con_name

  CON_NAME
  ------------------------------
  XEPDB1

  SQL> show user
  USER은 "ACE"입니다
docker exec -i 컨테이너이름 sqlplus ace/ace@localhost:1521/xepdb1 < 경로

172.17.0.2

도커 이미지와 컨테이너 삭제

https://brunch.co.kr/@hopeless/10

oracle 메뉴얼

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/index.html#Oracle%C2%AE-Database


오라클 실습 코드

ace

select * from tab;

select last_name, to_char(dhire_date, 'YYYY/MM/DD') as hire_date
from employees;

select * from employees;

-- employees 에서 이름(last_name), 급여(salary), 연봉(salary*12+salary*commission_pct) 출력
SELECT last_name as 이름, salary as 급여, (salary * 12 + salary * nvl(commission_pct,0)) as 연봉 from employees;

system

create user tester1
identified by 1234
account unlock;

alter user tester1
identified by 1234;

alter user tester1
default tablespace users
temporary tablespace temp
quota unlimited on users;

select username from dba_users
where username like '%TESTER%';

grant connect,
    resource,
    create session,
    create table,
    create procedure,
    create trigger,
    create view,
    create sequence
to tester1;

tester1

select rowid, deptno, dname, loc
from dept;

-- 부서 테이블 제거하기
DROP TABLE EMP;
-- 사원 테이블 제거하기
DROP TABLE DEPT;
-- 급여 테이블 제거하기
DROP TABLE SALGRADE;
-- 부서 테이블 제거하기
DROP TABLE EMPLOYEE;
-- 사원 테이블 제거하기
DROP TABLE DEPARTMENT;
-- 급여 테이블 제거하기
DROP TABLE SALGRADE;

-- 부서 테이블 생성하기
CREATE TABLE DEPT(
	 DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
	 DNAME VARCHAR2(14),
	 LOC   VARCHAR2(13) ) ;

-- 사원 테이블 생성하기
CREATE TABLE EMP( 
  	 EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
	 ENAME VARCHAR2(10),
 	 JOB   VARCHAR2(9),
	 MGR  NUMBER(4),
	 HIREDATE DATE,
	 SAL NUMBER(7,2),
	 COMM NUMBER(7,2),
	 DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

 -- 급여 테이블 생성하기
CREATE TABLE SALGRADE(
	 GRADE NUMBER,
	 LOSAL NUMBER,
	 HISAL NUMBER );

-- 사원 테이블에 샘플 데이터 추가하기
INSERT INTO DEPT VALUES(10, '경리부', '서울');
INSERT INTO DEPT VALUES(20, '인사부', '인천');
INSERT INTO DEPT VALUES(30, '영업부', '용인'); 
INSERT INTO DEPT VALUES(40, '전산부', '수원');

-- 부서 테이블에 샘플 데이터 추가하기
INSERT INTO EMP VALUES(1001, '김사랑', '사원', 1013, to_date('2007-03-01','yyyy-mm-dd'), 300, NULL, 20);
INSERT INTO EMP VALUES(1002, '한예슬', '대리', 1005, to_date('2007-04-02','yyyy-mm-dd'), 250,   80, 30);
INSERT INTO EMP VALUES(1003, '오지호', '과장', 1005, to_date('2005-02-10','yyyy-mm-dd'), 500,  100, 30);
INSERT INTO EMP VALUES(1004, '이병헌', '부장', 1008, to_date('2003-09-02','yyyy-mm-dd'), 600, NULL, 20);
INSERT INTO EMP VALUES(1005, '신동협', '과장', 1005, to_date('2005-04-07','yyyy-mm-dd'), 450,  200, 30);
INSERT INTO EMP VALUES(1006, '장동건', '부장', 1008, to_date('2003-10-09','yyyy-mm-dd'), 480, NULL, 30);
INSERT INTO EMP VALUES(1007, '이문세', '부장', 1008, to_date('2004-01-08','yyyy-mm-dd'), 520, NULL, 10);
INSERT INTO EMP VALUES(1008, '감우성', '차장', 1003, to_date('2004-03-08','yyyy-mm-dd'), 500,    0, 30);
INSERT INTO EMP VALUES(1009, '안성기', '사장', NULL, to_date('1996-10-04','yyyy-mm-dd'),1000, NULL, 20);
INSERT INTO EMP VALUES(1010, '이병헌', '과장', 1003, to_date('2005-04-07','yyyy-mm-dd'), 500, NULL, 10);
INSERT INTO EMP VALUES(1011, '조향기', '사원', 1007, to_date('2007-03-01','yyyy-mm-dd'), 280, NULL, 30);
INSERT INTO EMP VALUES(1012, '강혜정', '사원', 1006, to_date('2007-08-09','yyyy-mm-dd'), 300, NULL, 20);
INSERT INTO EMP VALUES(1013, '박중훈', '부장', 1003, to_date('2002-10-09','yyyy-mm-dd'), 560, NULL, 20);
INSERT INTO EMP VALUES(1014, '조인성', '사원', 1006, to_date('2007-11-09','yyyy-mm-dd'), 250, NULL, 10);

-- 급여 테이블에 샘플 데이터 추가하기
INSERT INTO SALGRADE VALUES (1, 700,1200);
INSERT INTO SALGRADE VALUES (2, 1201,1400);
INSERT INTO SALGRADE VALUES (3, 1401,2000);
INSERT INTO SALGRADE VALUES (4, 2001,3000);
INSERT INTO SALGRADE VALUES (5, 3001,9999);
COMMIT;

01. 데이터베이스 개념과 오라클 설치

1.7 Oracle SQL Developer를 설치하고 실습을 위한 예제 테이블 생성하기

1.7.3 데이터 타입

  • CHAR(size): size 크기의 고정 길이 문자 데이터 타입
  • VARCHAR2(size): size 크기의 가변 길이 문자 데이터 타입
  • NVARCHAR2(size): 국가별 문자 집합에 따른 size
  • NUMBER(p,s): 정밀도(p)와 스케일(s)로 표현되는 숫자 데이터 타입
  • DATE: 날짜 형식을 저장하기 위한 데이터 타입
  • ROWID: 테이블 내 행의 고유 주소를 가지는 64진수 문자 타입
  • BLOB: 대용량의 바이너리 데이터를 저장하기 위한 데이터 타입
  • CLOB: 대용량의 바이너리 데이터를 저장하기 위한 데이터 타입
  • BFILE: 대용량의 바이너리 데이터를 파일 형태로 저장하기 위한 데이터 타입
  • TIMESTAMP(n): DATE 데이터 타입의 확장된 형태
  • INTERVAL YEAR TO MONTH: 년과 월을 이용하여 기간을 저장
  • INTERVAL DAY TO SECOND: 일, 시, 분, 초를 이용하여 기간을 저장

1.7.4 데이터 무결성과 제약 조건

  • 제약 조건은 컬럼에 들어가는 값을 제한하여 데이터의 정확성과 일관성을 보장한다.
  • 조건을 만족하는 데이터를 무결하다고 한다.
  • 무결성 조건을 만족하기 위해 컬럼에 들어가는 값을 제한하기 위한 표준 방법 중의 하나가 제약 조건으로 NOT NULL, PRIMARY KEY, FOREIGN KEY 등이 이에 해당된다.

ORTRUEFALSENULL
TRUETRUETRUETRUE
FLASETRUEFALSENULL
NULLTRUENULLNULL

ANDTRUEFALSENULL
TRUETRUEFALSENULL
FLASEFALSEFALSENULL
NULLNULLNULLNULL

02. SQL의 기본

2.1 데이터를 조회하기 위한 SELECT문

2.1.5 컬럼 이름에 별칭 지정하기

2.1.5.1 AS로 컬럼에 별칭 부여하기

SELECT ename, sal*12+NVL(comm, 0) as Annsal
FROM emp;

2.1.5.2 AS 없이 컬럼에 별칭 부여하기

SELECT ename, sal*12+NVL(comm, 0) Annsal
FROM emp;

2.1.6 Concatenation 연산자의 정의와 사용

SELECT ename || '의 직급은 ' || job || '입니다.' as 직급
FROM emp;

2.1.7 Distinct 키워드

SELECT deptno
FROM emp;

google lighthouse
jwt토큰으로 로그인 만료 관리
파일 업로드시 확장자 검증
개인정보 마스킹

추천 알고리즘 join 4번의 쿼리

2.2 특정 조건의 데이터만 조회하는 WHERE절

2.1.2 비교 연산자

2.2.1.2 날짜 데이터 조회

SELECT *
FROM emp
WHERE hiredate < TO_DATE('2005/01/01', 'YYYY/MM/DD');

2.2.2 논리 연산자

2.2.1 AND 연산자

SELECT *
FROM emp
WHERE deptno=10 AND job='과장';

2.2.2.2 OR 연산자

SELECT *
FROM emp
WHERE deptno=10 OR job='과장';

2.2.2.3 NOT 연산자

SELECT *
FROM emp
WHERE depto = 10;
select last_name, department_id
from employees
where department_id is not null;

2.2.2.4 논리 연산자의 다양한 활용

select * 
from emp
where 400 <= sal and sal <= 500;

select * 
from emp
where sal between 400 and 500;

select *
from emp
where sal>=400 and sal<=500;

select *
from emp
where comm=80 or comm=100 or comm=200;

2.2.3 BETWEEN AND 연산자

Select *
from emp
where hiredate between to_date('2003/01/01', 'YYYY/MM/DD')
                and to_date('2003/12/31', 'YYYY/MM/DD');
                
select *
from emp
where to_char(hiredate,'YYYY') = 2003;

-> 해당 코드에서 아래코드를 사용할 경우 모든 날짜 정보를 YYYY형태로 바꿔버리기 때문에 비효율적이다.
-> 위 코드를 사용하는 것이 좋다.

2.4 IN 연산자

SELECT *
FROM emp
WHERE comm=80 Or comm=100 OR comm=200;

SELECT *
FROM emp
WHERE comm NOT IN(80, 100, 200);
profile
개발 기록장

0개의 댓글