자바풀스택 과정/자바 풀 스택 : 수업내용정리

자바 풀 스택 11/27 오전 기록 005-1

파티피플지선 2024. 11. 27. 18:08

8:10 학원 도착. 올 겨울 첫눈이 엄청 많이 왔다. 나도 눈오리 만들고 싶은데 ㅠㅠ

오전 복습 시간에 해본 거 : ANSI JOIN 표현 확인하기

모든 사원의 이름, 부서번호, 부서명, 급여를 출력하세요.단, emp 테이블에 없는 부서도 출력해보세요.
OUTER JOIN의 ANSI 방법과 일반 방법의 차이

 

 

<9:30 1교시>

우리가 사용하는 ORACLE DATABSE 11g 는 네트워크 통신 포트로 디폴트값 1521을 사용한다고 한다.

윈도우가 이 1521포트를 방화벽으로 막지 않았다면 내 컴퓨터가 아닌 외부에서도 이 포트를 통해 데이터 베이스에 접속할 수 있다.

로그인할 때 입력하는 SQLPLUS가 1521 포트로의 접속을 가능하게 해주고, SQLPLUS는 더블클릭으로 실행할 수 있는  GUI가 아니고 명령 프롬프트로 직접 실행하는 프로그램이다.

 

■ 지난 시간 내용 복습

 

 

■ VIEW를 관리하는 데이터베이스 관리자가 잠깐 되어 보기 (아하 이런게 있구나)

 

DB 관리자들이 관리하는 정보들은 TABLE이라고 하지 않고 VIEW라는 가상의 테이블이라고 생각하면 된다.

 

 

 

<10:30 2교시>

외래키를 사용해서 참조된 부모 테이블은 자식 테이블보다 먼저 삭제될 수 없다.

(그러면 자식들이 미아가 된다!! 표현 엄청나!!)

 

■ 테이블의 변경 ALTER

ALTER 테이블에서 쓸 수 있는 여러 명령어

더보기

  - 테이블의 칼럼의 데이터 타입 수정

    MODIFY(칼럼 데이터타입) : 1개의 칼럼에 대한 데이터타입 수정 

    MODIFY(칼럼 데이터타입, 칼럼 데이터타입, ...) : 여러 개 칼럼에 대한 데이터타입 일괄 수정

  - 테이블에 칼럼을 추가하는 것

     ADD(칼럼 데이터 타입) : 1개의 칼럼 추가

     ADD(칼럼과 데이터 타입, 칼럼과 데이터타입, ...) : 여러개 컬럼, 데이터 타입 일괄 추가

  - 테이블에 칼럼 이름을 다시 붙이는 것

    RENAME COLUMN 변경전칼럼이름 TO 변경후칼럼이름

 

  - 테이블 이름 다시 짓기

    RENAME 변경전테이블이름 TO 변경후테이블이름

 

  - 테이블에 제약 조건을 추가하는 것

    ADD CONSTRAINT 표이름_칼럼이름_제약조건약자 제약조건풀네임(칼럼이름)

  - 테이블에 제약 조건을 삭제하는 것

    DROP CONSTRAINT 표이름_칼럼이름_제약조건약자

  - 테이블에 제약 조건을 비활성화 하는 것 : 개발 초기에 부여해둔 제약조건을 비활성화 시킴

    DISABLE CONSTRAINT 표이름_칼럼이름_제약조건약자

  - 테이블에 제약 조건을 활성화 하는 것 : 비활성화한 제약조건을 다시 활성화 시키는 것

    ENABLE CONSTRAINT 표이름_칼럼이름_제약조건약자

 

SQL> CREATE TABLE TEST(NUM NUMBER);

Table created.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER

SQL> ALTER TABLE TEST
  2  ADD NAME varchar2(10);

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(10)

SQL> -- TEST 테이블에 ADDR VARCHAR2(20)을 추가해보세요
SQL> ALTER TABLE TEST
  2  ADD ADDR VARCHAR2(20);

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(10)
 ADDR                                                           VARCHAR2(20)

SQL> ALTER TABLE TEST
  2  MODIFY NAME VARCHAR2(30)
  3  ;

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(30)
 ADDR                                                           VARCHAR2(20)
 
 
SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(30)
 ADDRESS                                                        VARCHAR2(20)
 
 
 SQL> ALTER TABLE TEST
  2  DROP ADDRESS;
DROP ADDRESS
     *
ERROR at line 2:
ORA-00905: missing keyword


SQL> ALTER TABLE TEST
  2  DROP(ADDRESS);

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(30)
 
 
 SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(30)

SQL> ALTER TABLE TEST
  2  DROP(NAME)
  3  ;

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 
 
SQL> CREATE TABLE TEST(NUM NUMBER);

Table created.
SQL> ALTER TABLE TEST
  2  ADD(NAME VARCHAR2(20), ADDR VARCHAR(30));

Table altered.


SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(20)
 ADDR                                                           VARCHAR2(30)
 
 
 
SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(20)
 ADDR                                                           VARCHAR2(30)

SQL> ALTER TABLE TEST
  2  DROP(NAME, ADDR);

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 
 SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER

SQL> RENAME TEST TO TRY;

Table renamed.

SQL> DESC TRY
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM

 

테이블의 변경 여러가지 연습과 정답이 섞인 삽질

더보기

SQL> ALTER TABLE TEST
  2  DROP(ADDRESS);

Table altered.

SQL> DESC TABLE;
ERROR:
ORA-00931: missing identifier


SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(30)

SQL> ALTER TABLE TEST
  2  DROP(NAME)
  3  ;

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER

SQL> DROP TABLE;
DROP TABLE
         *
ERROR at line 1:
ORA-00903: invalid table name


SQL> DROP TABLE TEST;

Table dropped.

SQL> CREATE TABLE TEST(NUM NUMBER);

Table created.

SQL> ALTER TABLE TEST
  2  ADD(NAME, NEIGHBOR, ADDR);
ADD(NAME, NEIGHBOR, ADDR)
    *
ERROR at line 2:
ORA-02263: need to specify the datatype for this column


SQL> ALTER TABLE TEST
  2  ADD(NAME VARCHAR2(20) ADDR VARCHAR(30));
ADD(NAME VARCHAR2(20) ADDR VARCHAR(30))
                      *
ERROR at line 2:
ORA-00907: missing right parenthesis


SQL> ALTER TABLE TEST
  2  ADD(NAME VARCHAR2(20), ADDR VARCHAR(30));

Table altered.

SQL> DESC TABLE
ERROR:
ORA-00931: missing identifier


SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(20)
 ADDR                                                           VARCHAR2(30)

SQL> ALTER TABLE TEST
  2  DROP(NAME, ADDR);

Table altered.

SQL> DESC TEST
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER

SQL> RENAME TEST TO TRY;

Table renamed.

SQL> DESC TRY
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER

SQL> ALTER TABLE TRY
  2  ADD (NAME VARCHAR2(6), PHONE VARCHAR2(10));

Table altered.

SQL> DESC TRY
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(6)
 PHONE                                                          VARCHAR2(10)

SQL> ALTER TABLE TRY
  2  ADD(REGDATE DATE);

Table altered.

SQL> ALTER TABLE TRY
  2  ;

*
ERROR at line 2:
ORA-02210: no options specified for ALTER TABLE


SQL> DESC TRY
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(6)
 PHONE                                                          VARCHAR2(10)
 REGDATE                                                        DATE

SQL> RENAME TABLE TRY REGISTER
  2  ;
RENAME TABLE TRY REGISTER
       *
ERROR at line 1:
ORA-00903: invalid table name


SQL> RENAME TRY TO REGISTER;

Table renamed.

SQL> DESC TRY
ERROR:
ORA-04043: object TRY does not exist


SQL> DESC REIGSTER
ERROR:
ORA-04043: object REIGSTER does not exist


SQL> DESC REGISTER
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(6)
 PHONE                                                          VARCHAR2(10)
 REGDATE                                                        DATE

SQL> ALTER TABLE REGISTER
  2  RENAME REGDATE TO REGI;
RENAME REGDATE TO REGI
       *
ERROR at line 2:
ORA-14155: missing PARTITION or SUBPARTITION keyword


SQL> ALTER TABLE REGISTER
  2  RENAME COLUMN REGDATE TO REGI;

Table altered.

SQL> DESC REGISTER;
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 NUM                                                            NUMBER
 NAME                                                           VARCHAR2(6)
 PHONE                                                          VARCHAR2(10)
 REGI                                                           DATE

SQL>

 

 

LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록하는 조건 예제 풀어보는데 망했음 ㅋㅋ

더보기

SQL> --LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록
SQL> ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN';
SP2-0734: unknown command beginning "ADD LOC CO..." - rest of line ignored.
SQL> --LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록
SQL> ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN');
ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN')
                                                        *
ERROR at line 1:
ORA-00906: missing left parenthesis


SQL> ALTER TABLE DEPT2
  2  ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN');
ALTER TABLE DEPT2 ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN')
*
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option


SQL> ALTER TABLE DEPT2
  2  ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN');
ADD LOC CONSTRAINT DEPT2_LOC_CK CHECK IN('SEOUL', 'BUSAN')
                                      *
ERROR at line 2:
ORA-00906: missing left parenthesis


SQL> --LOC에 CHECK 제약 조건을 부여해보기 'SEOUL' OR 'BUSAN'만 가능하도록
SQL> ALTER TABLE DEPT2
  2  ADD CONSTRAINT DEPT2_LOC_CK CHECK(LOC IN('SEOUL', 'BUSAN'));

Table altered.

SQL>

 

SQL> -- 제약 조건 추가
SQL> ALTER TABLE DEPT2
  2  ADD CONSTRAINT DEPT2_DEPTNO_PK PRIMARY KEY(DEPTNO);

Table altered.

SQL> -- 제약 조건 비활성화 하기 : 프로젝트 시작할 때 부여해둔 제약 조건을 꺼두기
SQL> ALTER TABLE DEPT2 
  2  DISABLE CONSTRAINT DEPT2_DEPTNO_PK;

Table altered.

SQL> --제약 조건 활성화 하기 : 프로젝트 진행 중 꺼뒀던 제약 조건 다시 활성화 하기
SQL> ALTER TABLE DEPT2
  2  ENABLE CONSTRAINT DEPT2_DEPTNO_PK;

Table altered.

SQL> --제약 조건 삭제
SQL> ALTER TABLE DEPT2
  2  DROP CONSTRAINT DEPT2_DEPTNO_PK;

Table altered.

 

 

<11:30 3교시>

■ 선생님 컴퓨터에 접속해서 데이터 추가할 수 있도록 해보기

① 원격접속 시작 : 방화벽 내리기

더보기

내컴퓨터가 아닌 외부 컴퓨터가 내 컴퓨터의 오라클에 접속할 수 있도록 하기 위해서는 방화벽이 외부의 컴퓨터를 들여보낼 수 있게 해주는 방법이 필요하다.

내 컴퓨터의 오라클에 외부의 컴퓨터를 접속하게 해주기 위해선 방화벽의 인바운드 규칙을 설정할 필요가 있다.

인바운드 규칙을 설정하는 방법은 다음과 같다.

 

방화벽 열기 > 윈도우 검색창에 방화벽 검색 > 제어판의 방화벽 상태 확인 클릭 > 고급설정 클릭 > 인바운드 규칙 클릭 > 우측의 인바운드 규칙 하단의 새규칙 클릭 > 포트를 누르고 다음 클릭 -> TCP(일반 인터넷) 누르고 다음 클릭 -> 특정로컬포트에 1521 입력하고 다음 클릭 -> 연결허용하고 다음 클릭 -> 모두 선택 하고 다음 클릭 -> 이름입력(일단 테스트니까 아무렇게나 입력해도 됐지만 실제로 하게 되면 뭔가 관련 이름 해야겠지) > 마침 => 이후에 인바운드 목록에 방금 만든 인바운드 규칙이 뜸

 

② 원격접속하려는 PC의 IP 확인하기

더보기

명령 프롬프트에서 ipconfig를 엔터치면 자신의 컴퓨터의 IP를 확인할 수 있다. (맥OS면 ifconfig를 대신 입력해야 한다고 함)

IP 주소는 iPv4의 주소를 읽어서 192.168.X.XXX 이렇게 10자리로 구성된다. 이 IP주소는 가상 IP로, 컴퓨터를 재부팅하면 뒤에 X 부분 네 자리는 랜덤으로 채워진다고 한다.

③ 원격접속하기

더보기

원격 접속하려는 PC에 인바운드 규칙이 생성돼 있으면 아래와 같이

계정/비밀번호@IP주소:포트번호/XE <= SCOTT/TIGER@192.168.X.XXX:1521/XE

를 입력하면 원격 접속 된다.

 

내가 INSERT로 입력한member_seq.nextval, 거북, 서울을 commit 하면

선생님의 컴퓨터의 scott 계정의 table에 추가된다.

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

C:\Users\acorn>SQLPLUS SCOTT/TIGER@192.168.X.XXX:1521/XE

SQL*Plus: Release 11.2.0.2.0 Production on 수 11월 27 12:02:54 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> -- 선생님 컴퓨터 MEMBER 테이블에 본인의 정보를 inserT 하고 COMMIT 해보세요
SQL> INSERT INTO MEMBER
  2  (NUM, NAME, ADDR)
  3  VALUES
  4  (MEMBER_SEQUENCE.NEXTVAL, 거북, '서울');
(MEMBER_SEQUENCE.NEXTVAL, 거북, '서울')
                          *
ERROR at line 4:
ORA-00984: column not allowed here

SQL> INSERT INTO MEMBER
  2  (NUM, NAME, ADDR)
  3  VALUES
  4  (MEMBER_SEQ.NEXTVAL, '거북', '서울');

1 row created.

SQL> COMMIT
  2  ;

Commit complete.

 

내가 만든 내 테이블에 선생님이 접속해서 코드를 입력해주시기도 했는데,

이 전에 내가 두 개 row를 입력했던 내용을 commit하지 않고 창을 닫았었는데,

선생님과 옆에 앉은 수강생이 내 컴퓨터에 원격 접속하여 데이터를 insert하고 갔는데,

sequence의 특징을 확인할 수가 있었다.

개인정보 보호를 위해 입력된 name, addr 에 입력된것만 바꿨는데 내가 입력 전에 insert 했던 1,2 두 개의 row가 commit되지 않았음에도 sequence가 이미 번호를 부여해버리고 현재 번호가 3이 되어버린 탓에 선생님께서 번호 부여하셨을 때엔 3, 옆자리 수강생이 했을 때엔 4가 부여된 것이었다!

SQL> select * from member;

       NUM NAME                     ADDR
---------- ------------------------ --------------------------------
         3 선생님                   XX동
         4 옆자리                   XX동

 

 

■ VIEW 권한 부여하고 만들기

VIEW는 테이블로부터 참고한 내용들을 보여주는 가상의 테이블로, 원래 사용하는 목적은 테이블에 포함된 기밀/민감 정보들을 가려서 보여주기 위함+단일테이블의 조인의 편리성 때문이라고 한다.

 

① GRANT CREATE VIEW

system 계정으로 로그인 해서 grant create view to 계정; 명령을 통해 view를 만들 수 있는 권한을 부여한다.

 

② VIEW (테이블) 다루기

VIEW는 다시 말하지만 임의의 테이블 역할을 하는 임시표이다. 

집계함수로 된 다중행 데이터는 특별한 명령 없이는 바로 VIEW로 선택되고 만들어질 수 없어서, 보통 VIEW는 단일행으로 이루어진 표이다. 그래서 VIEW에서 변경한 내용이 TABLE에도 적용될 수 잇는데, 이를테면 VIEW에서 삭제한 내용이 TABLE에서도 동일하게 삭제되는 것이다.

단, VIEW를 만들 때 JOIN으로 여러 개의 테이블을 합쳤다면 이 VIEW는 READ ONLY가 되어서 변형이 불가하다.

더보기
SQL> CREATE VIEW MEMBER_VIEW AS
  2  SELECT NUM, NAME
  3  FROM MEMBER;
CREATE VIEW MEMBER_VIEW AS
            *
ERROR at line 1:
ORA-01031: insufficient privileges


SQL> CREATE VIEW MEMBER_VIEW AS
  2  SELECT NUM, NAME
  3  FROM MEMBER;

View created.

SQL>
SQL> CREATE VIEW EMP_VIEW as
  2  select empno, ename, deptno
  3  from emp;

View created.

SQL> desc view emp_view
Usage: DESCRIBE [schema.]object[@db_link]
SQL> desc emp_view;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 DEPTNO                                             NUMBER(2)

SQL> select * from emp_view;

     EMPNO ENAME                    DEPTNO
---------- -------------------- ----------
      7369 SMITH                        20
      7499 ALLEN                        30
      7521 WARD                         30
      7566 JONES                        20
      7654 MARTIN                       30
      7698 BLAKE                        30
      7782 CLARK                        10
      7839 KING                         10
      7844 TURNER                       30
      7900 JAMES                        30
      7902 FORD                         20

     EMPNO ENAME                    DEPTNO
---------- -------------------- ----------
      7934 MILLER                       10

12 rows selected.

SQL> create view my_view as
  2  select empno, ename, sal, deptno, dname
  3  from emp
  4  join dept using(deptno);

View created.

SQL> select * from my_view;

     EMPNO ENAME                       SAL     DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
      7369 SMITH                       800         20
RESEARCH

      7499 ALLEN                      1600         30
SALES

      7521 WARD                       1250         30
SALES


     EMPNO ENAME                       SAL     DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
      7566 JONES                      2975         20
RESEARCH

      7654 MARTIN                     1250         30
SALES

      7698 BLAKE                      2850         30
SALES


     EMPNO ENAME                       SAL     DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
      7782 CLARK                      2450         10
ACCOUNTING

      7839 KING                       5000         10
ACCOUNTING

      7844 TURNER                     1500         30
SALES


     EMPNO ENAME                       SAL     DEPTNO
---------- -------------------- ---------- ----------
DNAME
----------------------------
      7900 JAMES                       950         30
SALES

      7902 FORD                       3000         20
RESEARCH

      7934 MILLER                     1300         10
ACCOUNTING


12 rows selected.

 

 

<12:30 4교시>

오늘 1,2,3교시때 했던 내용 손에 익게 복습하라고 시간 주셨음.

블로그 2,3교시 때 한거 내용 정리하러 올라감.

 

 

+ 정리 다 못해서 8교시에도 하는 중