Oracle Study(2)

jaehoon ahn·2025년 10월 16일

Oracle

목록 보기
2/2
post-thumbnail

11. 테이블 조작하기 #1 insert/select

-- DML 
-- INSERT / SELECT / UPDATE / DELETE 

-- INSERT 명령 규칙
-- INSERT INTO <테이블> VALUES <값목록>

-- 모든 필드 값을 입력하기
-- INSERT INTO MEMBER VALUES('newlec', '111', '홍길동', '남성', '1995-02-29', '010-2365-8956', 'newlec@newlecture.com', '2014-05-23');

-- 원하는 필드만, 원하는 순서대로 입력하기
INSERT INTO MEMBER(ID, PWD) VALUES ('newlec', '111');
INSERT INTO MEMBER(PWD, ID) VALUES ('111', 'newlec');

-- SELECT * FROM MEMBER;

⇒ 안넣는 값들은 null이 됨

⇒ 비어있는 값이 아닌 값 그 자체로 NULL이 들어감

INSERT INTO MEMBER (ID, PWD) VALUES ('newlec', '1234');
INSERT INTO MEMBER (ID, PWD) VALUES ('dragon', '1111');

SELECT id, pwd FROM MEMBER; -- id, pwd 정보만 가져옴

as

SELECT id as user_id, name, pwd FROM MEMBER;
-- as를 생략해도 가능!

⇒ 테이블 컬럼명을 수정하지 않고 원하는 컬럼명으로 바꾸는 방법

12. 데이터 조작하기 #2 update/delete

모든 행의 PWD를 ‘111’로 변경하기

UPDATE 테이블명 SET 컬럼명 = 수정할 값 ;

⇒ 이렇게 했을 때 모든 데이터의 값이 변경이 됌

조건에 맞게 update

UPDATE MEMBER SET PWD = '111' WHERE id = 'dragon';

삭제 delete

⇒ test 삭제하기

DELETE MEMBER WHERE id = 'test';

13. 트랜잭션 처리를 위한 commit / rollback

트랜잭션이란?

  • 업무 실행단위
    • ex) 계좌이체, 이벤트 게시글 등록
  • 물리적인 명령어 단위
    • 계좌이체

      • ex) update 2개 이상 명령어로 구성됌
      • ⇒ ex) 금액을 올리거나 내리는 것이 동시에 일어나야 함.
      • 완전하게 다 실행되던지, 아예 실행이 되지 않던지 해야함
    • 이벤트 게시글 등록
      - 글을 등록하면 포인트를 받는다고 가정
      - 사용자가 글을 입력하면 포인트를 업데이트 해줘야 함
      - 쿼리문 하나로 끝나는게 아닌 insert(글작성), update(포인트 적립)가 필요함

      ⇒ 현재 세션을 위한 임시저장소에서 테스트를 하고, 그동안 다른 세션이 건드리지 못하도록 LOCK을 해줘야 함

⇒ 이러한 과정을 위해 제공받는 명령어는 COMMIT과 ROLLBACK이 존재함

  • 같은 테이블이지만, 값이 안나오는 경우가 발생
  • insert 된 내용이 트랜잭션 처리를 위해 임시 저장소에서 테스트가 됌
  • 다른 세션이 봐도 문제가 없다고 하면 commit 명령을 내릴 수 있음
  • 모든 세션이 볼 수 있게됌

COMMIT

⇒ insert 한 내용이 보이는 것을 확인할 수 있음

ROLLBACK

⇒ 같은 테이블에 쿼리를 썻지만, 같은 계정으로 접근했어도 접속정보가 다르면 접속자(세션)가 다르다고 판단

한쪽에서 변경한 이후에 다른 쪽에서 변경을 하게 되면 LOCK을 한 상태이기 때문에 변경이 되지 않음

rollback

만약, test를 추가한게 마음에 안들어서 이전으로 돌리고 싶다면 rollback을 해주면 된다.

rollback;

LOCK 걸리는 작업이 있을 때

양쪽에서 COMMIT이 이루어져야 INSERT와 같은 값의 변경이 이루어 진다.

14. 연산을 통한 데이터 조회

연산자

  • +, , *, /가 존재

예시

공지사항의 조회수를 조회하시오. 단 기존 값에 1을 더해서 조회하시오.

SELECT HIT + 1 FROM NOTICE;

⇒ 1이 더해진 값이 나오지만, 컬럼명이 HIT + 1로 나옴

⇒ 사용자는 결과집합에 있는 컬럼명을 가지고 데이터를 뽑아냄

⇒ 컬럼명이 “HIT”이 되도록 만들기

SELECT HIT + 1 HIT FROM NOTICE;

문자 + 숫자

SELECT 1 + '3' FROM DUAL;

⇒ 이렇게 되면 ‘3’은 숫자로 변환을 시켜서 4가 나온다

⇒ 문자(ex) a)와 숫자를 더하는 방법은 다음과 같다.

SELECT 1 || 'a' FROM DUAL;

⇒ ID와 NAME을 출력

15. 비교 연산자

연산자

  • =, !=, ^=, <>, >, <, >=, <=, IS NULL, IS NOT NULL
    • ^=

    • <>

      ⇒ 둘다 같지 않다라는 의미

  • 문제1) 게시글 중에서 작성자가 ‘newlec’인 게시글만 조회하기
    SELECT * FROM NOTICE WHERE WRITER_ID = 'newlec';
  • 문제2) 게시글 중에서 조회수가 3이 넘는 글만 조회하시오
    SELECT * FROM NOTICE WHERE HIT > 3;
  • 문제3) 게시글 중에서 내용을 입력하지 않은 게시글을 조회하시오.
    SELECT * FROM NOTICE WHERE CONTENT IS NULL;

16. 관계 연산자

  • NOT, AND, OR, BETWEEN, IN
  • 문제) 조회수가 0, 1, 2인 게시글을 조회하시오
    SELECT * FROM NOTICE WHERE 0 <= HIT AND HIT <= 2;
    -- OR
    SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 2;
  • 문제) 조회수가 0, 2, 7인 게시글을 조회하시오
    SELECT * FROM NOTICE WHERE HIT = OR HIT = 2 OR HIT = 7;
    -- OR
    SELECT * FROM NOTICE WHERE HIT IN (0, 2, 7);
  • 문제) 조회수가 0, 2, 7이 아닌 게시글을 조회하시오
    SELECT * FROM NOTICE WHERE HIT NOT IN (0, 2, 7);

17. 패턴 비교 연산자

  • LIKE, %, _
  • 문제) 회원 중에서 ‘박’씨 성을 조회하시오.
    SELECT * FROM MEMEBER WHERE NAME LIKE '박%';
  • 문제) 회원 중에서 ‘박’씨이고 이름이 외자인 회원을 조회하시오
    SELECT * FROM MEMBER WHERE NAME LIKE '박_';
  • 문제) 회원 중에서 ‘박’씨 성을 제외한 회원을 조회하시오.
    SELECT * FROM MEMBER WHERE NAME NOT LIKE '박%';
  • 문제) 회원 중에서 이름에 ‘도’자가 들어간 회원을 조회하시오.
    SELECT * FROM MEMBER WHERE NAME LIKE '%도%';

0개의 댓글