열심히 끝까지

디바이스 융합 자바(Java) day19 - 오라클(SQL)설치 및 실행,생성,삽입 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)

디바이스 융합 자바(Java) day19 - 오라클(SQL)설치 및 실행,생성,삽입

노유림 2022. 7. 1. 15:53

[저번 수업 복습]
MVC
     : 유지보수가 용이하다
      >> 낮은 결합도
          -> 1개의 변경사항이 발생했을 때,
              코드를 1곳만 수정 가능

      >> 높은 응집도
          -> A로직과 관련된 코드를 알고싶을 때,
              로직마다 모듈화가 되어있어서
              하나의 모듈만 확인해도 알 수 있음

Model 
    : VO
    -> 학생 | 제품
         특정 정보를 객체화

    : DAO
    -> 데이터를 사용하는 로직
         핵심 로직, 비즈니스 메서드, CRUD
         input VO output boolean/VO/AL<VO>

네이버 회원 VO
  회원 VO
     ID 이름 PW
  회원 DAO
    회원가입 마이페이지 내정보변경 회원탈퇴 로그인 로그아웃
  웹툰 VO
    웹툰등록번호 요일 회차 작가
  웹툰 DAO(거의 관리자용)
    웹툰등록(관리자)(서비스가 아니다) 목록보기 해당웹툰보기 내용변경 웹툰삭제
  댓글 VO
    댓글번호(PK) 작성자 작성일 좋아요/싫어요 개수 내용 어떤글에작성
  댓글 DAO
   댓글등록 댓글목록 해당댓글보기 내용변경 댓글삭제

>> 초기데이터 한두개 정도는 넣어놓고 해주는 것이 좋다

View
     UI/UX
     사용자의 편의성
     1차적인(기본적인) 유효성 검사 ex ) URL로 직접 접근하는 사용자
     V의 메서드는 무언가를 화면에 출력해야할 때 input 발생
     >> input을 받으면 이쁘게 출력하는 것!
     >> 무언가를 C,M에게 전달해야할 때 output 발생

Controller
     완성된 M-V를 연결하는 역할
        >> 완성이 안된것들을 연결 -> 에러 => C가 해결하려한다?
        >> 그러면 안된다!!(위험하다), 
        >> Controller에 로직은 작성하지 않을 것
        >> View에서 넘어온 값이 올바른지 판단하는 것!!!
             >> 올바르지 않으면 바로 View로........... .....back...
        ex ) 이미 없어진 글이거나, 볼 수 없는(등급이 맞지 않아서) 비공개 글입니다!
                 M방문 없이 바로 V로 이동!
        M에서 반환된 값이 T/F -> 어떤 V로 이동할지 판단
             ex ) 구매완료! / 구매실패!

[오늘 수업]
DBMS 설치
0. DB를 사용해보자!
     자판기 프로그램
     -10개 종료
     >> 새로 시작하기 전까지만 해도 10개..
     20개 -> 20개....(초기 데이터.. 20)바뀌지 않는다
     >> 자판기 재고데이터가 DB로 보관
          프로그램 외부에 데이터를 보관
     ex ) 스마트폰의 경우 각 폰마다 "갤러리"라는 기능 존재
           >> 각각의 폰의 내용물이 다르다.. 
   >> 앞으로 DB에 저장할 것이다!!
   >> 이걸 모르면 취업을 못한다!! 의...기준으로 설명할 것이다
   >> 최소한의 것만 설명
         >> 욕심이 있고 선택해서 가고싶다! 추가공부할 것
   >> 받은 책 중에 빨간색 책 DO-IT! 오라클로 배우는 데이터베이스 입문
         >> 웬만한 내용 다 안다
         >> 30일 만에 끝낼 수 있다? 구라다...ㅋㅋㅋ
         1과 안에도 목차가 존재
              >> 1, 2개만 봐도 수료전에 끝내는 것 가능!
   >> 오라클에서 조인을 다양한 방식으로 제공하는구나~
         중복없이 출력하고 싶은데...DISTINCT

     
1. DBMS 결정
   >> 오라클, MySQL, ....
     ex ) 사투리..
        오라클문법과 MySQL문법이 살짝 다르다
         SELECT * FROM STUDENT WHERE NAME="홍길동"(오라클)
         SELECT * FROM STUDENT WHERE NAME="홍길동";(MySQL)
         문법이 조금 다른가...?
         >> 검색할 때 이용하는 DBMS와 같이 검색
   >> DBMS 1개만 사용하는 것이 일반적
   >> 강사님은 2개 이상 사용..;; : 나는 오라클, MySQL 둘 다 사용가능합니다.(X)
                                              DBMS가 바뀌어도 다 적용시킬 수 있습니다!(O)
                                            : 코드변화 최소화
2. 설치
   >> 실수로 결제가 되었을 때 취소하기 곤란...
   >> 학부때... 

3-1. DBMS를 편리하게 사용할 도구(프로그램)
    >> 디비버, 오라클 전용 DBMS를 사용하는 개발도구, ...

3-2. 이클립스 연동
     ★ 연동하는 방법
     >> Window -> Show view에 즐비
           >> other 눌러보기 -> data 검색 -> Data Management -> data source Explorer
           >> 오라클 연동 + MySQL 연동 가능
           Database Connections에서 연동 진행
           마우스 우클릭 NEW
           >> 데이터베이스 보인다(원통모양 DB)
                   -> ORACLE선택하고 next 
                   -> Drivers 선택 >> 이종기기간의 연결을 돕는 친구
                            >> name/Type Oracle Thin Driver Oracle 11
                            >> JarList < 추천해주는 드라이버 존재 (못쓴다)
                                      >> remove 하고 add 할 것
                                      >> ojdbc6.jar << 코드덩어리(Java archive) 넣어줄 것
                                      >> 설정사항
                                          >> 11g부터는 Server Name db가 아니라 xe로 변경
                                          >> Host의 로컬을 localhost(외부에 배포 x)
                                          >> Port number 우리는 바꾸지 않고 사용
                                          >> 오라클 계정만드는 법
                                                 선택관리자(cmd)에서 진행
                                                  sqlplus / as sysdba 엔터
                                                  >> 정상적으로 설치되면 깜빡깜빡
                                                  >> create user 영어이름 identified by 비번; // 생성
                                                  >> user created 떠야 성공
                                                  >> grant connect, resource, dba to영어이름; // 권한부여 명령어
                                                  >> grant success 떠야 성공
                                                  >> exit
                                                  >> 탈출!
                                                  ★★★★★ PC 사용자명 변경 -> 포맷..해야할 수도


>> java project >> ctrl + n >> sql file
       >> STUDENT(학생과 관련이 있으면)
            TEST.sql(현재 다루고 있는 VO 이름)
       >> 같은 레벨에 만들어진다
       >> 2번의 능력단위평가

       >> 강사님 블로그에.... 포인트 설명
       >> 12일 이후에 시험
       >> Point 설명 반드시 알아야 하는 것들 


  >> SQL에서는 주석을 -- 하이푼 두개
     -- SQL >> 오라클 기준
     용도에 따라 DDL, DML, DCL
     -- 이클립스 연동하기 위해 JAR파일 추가하여 연동
         >> 필요한 것이 JAR파일과 계정
===================
SQL 에서는 대문자 소문자 가리지 않지만 
 >> 일반적으로 대문자 많이 사용!!!!!
 - DCL
     >> 계정을 생성, 삭제
     >> 권한에 관련된 명령을 해야할 때 사용
     >> JAVA에서는 많이 다루지 않는다
 - DDL
     >> 학생부, 자판기, ...
            ex ) ArrayList<VO> 형태로 저장되는 것을 DB
     >> 개별적인 정보들을 저장한 DB
           : 테이블
           : 테이블 => VO
     >> 테이블을...
         CREATE, DROP, ALTER
         >> 설계를 완벽하게 진행한 뒤에, 테이블을 생성
                  > 중간에 테이블 구조를 바꾼다? 
                  > ALTER는 잘 쓰지 않는다....
     >> 생성하기 전 유의사항...
         >> 같은 이름을 가진 테이블은 생성 불가!!!
    드레그해서 실행
    >> SELECT * FROM USER_TABLES;
        execute select text< 해야하는데 안된다
        >> 드래그 -> 연동해놓은 New Oracle 커넥션과
              해당 .sql 페이지를 연결하지 않았기 때문에!
                >> 연결해서 써야한다..
        >> 상단에 NAME > NEW ORACLE 맞는 DB연결해서 사용
               >> ALT + X 해서 실행!
                    >> 성공하면 파란색, 실패하면 빨간색
     TABLE
    SELECT * FROM USER_TABLES;
    CREATE TABLE STUDENT(
         멤버변수명(속성)(칼럼) 자료형 제약조건
         // 실행조건
         NUM INT PRIMARY KEY,
         NAME VARCHAR(20) NOT NULL,
         AGE INT NOT NULL,
         SCORE INT DEFAULT 0,
         // NOT NULL의 경우 값을 안넣으면 에러
         // DEFAULT의 경우 값이 없으면 0 대입
         PHONE VARCHAR(20) NOT NULL UNIQUE 
    );
    DROP TABLE STUDENT; << 테이블 삭제

 - DML
    >> INSERT, SELECT, UPDATE, DELETE 
    INSERT INTO 테이블명 ( 칼럼명, 칼럼명, ...) VALUES(값 ,값, ...)
   ex ) 
       INSERT INTO STUDENT(NUM, NAME, AGE, SCORE, PHONE) VALUES(1, '아무무', 20, 80, '010-1234-5678');
       INSERT INTO STUDENT(NUM, NAME, AGE, PHONE) VALUES(1, '아무무', 20, '010-1234-5678');
       INSERT INTO STUDENT VALUES(3, '오리아나', 22, 45, '010-4543-1234');
       INSERT INTO STUDENT VALUES(?, '모르가나'22,0,'010-4236-2342');
       >> ?에 숫자가 들어가면 직접 지정해주는 것
            기존에 있는 PK중에서 제일 큰값 찾아서 +1한 값을 자동으로 주는 방법
            >> (SELECT ? FROM STUDENT) 
                  >> ?에는 MAX(NUM+1) : 최댓값 숫자의 +1 하여 추가
                  >> 
    -- 잘 들어갔는지 확인법
    -- SELECT 칼럼명 FROM 테이블명
    SELECT NUM, NAME, AGE, SCORE, PHONE FROM STUDENT;
    SELECT NUM, NAME FROM STUDENT;
    SELECT * FROM STUDENT; 맨 위에 것과 이 것은 같은 값을 출력

- 서브쿼리
>> 쿼리 안에 또 쿼리가 들어가는 것을 서브쿼리라고 한다 
   혹시 MAX가 NULL이면 0으로 취급해줘...
   NVL(A,B) << 함수!!(NULL VALUE)!
       >>  A값이 NULL이면 B값으로 취급하세요!!
        ex ) NVL(MAX(NUM), 0)+1
          INSERT INTO STUDENT VALUES(SELECT NVL(MAX(NUM), 0)+1 FROM STUDENT),

                                                                   '모르가나'22,0,'010-4236-2342');

-- 조건절 WHERE 
SELECT * FROM STUDENT WHERE NUM>=3
-- 출력 결과 컬럼에게 별칭 AS : 컬럼 별칭 
SELECT NUM,NAME,SCORE*100 AS GRADE FROM STUDENT;
SELECT NUM,NAME,SCORE*100 AS 등  급 FROM STUDENT;
SELECT NUM,NAME,SCORE*100 AS "grade" FROM STUDENT;
// error >> ORA-00923 
    >> 등급의 사이를 띄었더니..? 
    ? 띄어쓰기를 쓰고싶다면?
        >> "등  급" 이렇게 따옴표 사이에 넣을 것!!!
        >> 소문자를 출력하고 싶을 때에도! 저렇게 할 것!

-- 정렬 ORDER BY
SELECT * FROM STUDENT ORDER BY NUM DESC;
>> 내림차순 정렬
SELECT * FROM STUDENT ORDER BY AGE DESC, NUM ASC;
>> DESC 내림차순 / ASC 오름차순
>> 정렬 두 번 가능!!!
>> 최고가 정렬 때 사용 가능!!!

-- 연결 연산자 ||
SELECT NAME, SCORE || '점' AS "성적" FROM STUDENT;

-- 중복 데이터 제거 DISTINCT
SELECT DISTINCT AGE FROM STUDENT;
 >> 자바에서 equals를 써야하는 것을 여기서 막는다!!!

-- 검색에 많이 활용되는 LIKE
SELECT NAME FROM STUDENT WHERE NAME LIKE '아%';
>> '아'로 시작하는 단어 검색
SELECT NAME FROM STUDENT WHERE NAME LIKE '%아%';
>> '아'가 들어있는 단어 검색
SELECT NAME FROM STUDENT WHERE NAME LIKE '%나';
>> '나'가 마지막에 있는 단어 검색

-- 문자열 관련 함수들
INSERT INTO STUDENT VALUES(6, 'apPLE', 5, 12, '010-3451-1445');
SELECT * FROM STUDENT WHERE UPPER(NAME)='APPLE';
>> 저장된 데이터들을 모조리 대문자로 바꾸어서 생각을 할 수 있게 걸어주기

-- SUBSTR, LENGTH, INSTR, REPLACE, ...
개인공부해볼 것

-- IF문을 SQL로 구현
SELECT NAME, CASE WHEN SCORE >= THEN 'A' WHEN SCORE>=50 THEN 'B' 

                                                                     ELSE 'C' END AS 학점 FROM STUDENT;



-- COUNT() 함수
-- 하나의 데이터가 조건에 맞으면 출력 아니면 출력안함
    >> 6개 열을 카운팅해서 결과값을 한줄로 만들어서 출력 1:1 출력했었다!!
>> 다중행함수★
SELECT COUNT(*) FROM STUDENT;

-- UPDATE 테이블명 SET 컬럼명 = 값, ... WHERE 컬럼명 = 타겟컬럼값;
UPDATE STUDENT SET SCORE=60 WHERE NAME='아리';
>> 이거 실행하면 아리의 점수가 0이였을 경우 60으로 바꿀 수 있다!!

DELETE FROM STUDENT WHERE NUM = 6;
>> PK로 값을 찾아서 삭제하는 것이 일반적이다.