D+47- SUBQUERY.다중행, TABLE.CRUD,생성,삭제,값삽입,값삭제,삽입취소,확정,값 수정

Bku·2024년 3월 5일

학원 일기

목록 보기
45/67
post-thumbnail

SUBQUERY

다중 행 subquery

서브쿼리의 결과로 여러 건이 나온다. 즉 행이 여러개가 결과로 나오는 것이다.

"부서별 최소 급여를 받는 사원 중에서 사원번호와 이름을 출력하세요" 라는 문제가 있다. 이 문제에서는 부서별로 값을 구해야해서 여러 행의 값이 나온다.

이때는 = 을 사용할 수 없으므로 IN을 사용해서 여러 값을 비교해주어야한다.

SELECT ENO, ENAME
FROM EMPLOYEE
WHERE SALARY IN(SELECT MIN(SALARY) 
                FROM EMPLOYEE
                GROUP BY DNO );

IN안에 들어가야하는 쿼리 문은 GROUP BY가 있는 쿼리 문을 넣어야한다. 왜냐하면 IN 안에는 여러개의 값이 반환되는 것이 와야하기 때문이다.

Table

Table 생성

CRUD

DBA 또는 개발자가 실무에서 가장 많이 사용하는 용어이다.

  • C : CRATE
  • R : READ or RETRIEVE
  • U : UPDATE
  • D : DELETE

쉽게 말해 만들고, 조회하고, 수정하고, 지우는 것을 말한다.
각각 INSERT, SELECT, UPDATE, DELETE 명령어를 이용하여 조작한다.

CREATE 테이블 만드는 쿼리

  • 질의 : CREATE TABLE 테이블이름(
    컬럼1 값 자료형(자릿수),
    컬럼2 VARCHAR2(14),
    컬럼3 VARCHAR2(13)
    );

자릿수

자릿수를 넘는 데이터를 입력하면 들어갈 수 없다. 단, 날짜형은 자릿수가 없고 그냥 사용하면된다.

또 만약 NUMBER 자료형에도 자릿수를 적지 않으면 무한정 값을 넣을 수 있다. 그리고 NUMBER는 자릿수를 (7,2)이렇게 두개 적을수 있는데, 여기서 7은 정수 자리고, 2는 소수자리이다.

테이블 생성 코드

CREATE TABLE DEPT(
    DNO NUMBER(2),
    DNAME VARCHAR2(14),
    LOC VARCHAR2(13)
);

DEPT라는 이름의 테이블이 생겼다. 데이터는 INSERT로 넣어줘야하지만 넣지 않아 값이 아직 없다.

CREATE AS SELECT 테이블 복사

원본 테이블을 건들이지 못할때 테스트 테이블로 복사해서 테스트를 해보는 용으로 사용하고 싶을때 이용할 수 있다.

  • 질의 : CREATE TABLE 새 테이블 이름
    AS
    SELECT 가져올 컬럼 FROM 기존 테이블;
CREATE TABLE DEPT_COPY
AS 
SELECT * FROM DEPARTMENT;

복사한 테이블이다.원래 테이블과 값까지 같은 모습을 볼 수 있다.

컬럼만 복사하기

데이터를 가져오지 않고 컬럼만 가져오고 싶을 경우가 있다. 이때는 WHERE에 거짓 조건을 주면 된다.

CREATE TABLE DEPT_COPY2
AS 
SELECT * FROM DEPARTMENT
WHERE 1=2;

거짓조건을 줌으로 컬럼만 가져왔다.데이터가 없는 것을 볼 수 있다.

테이블 및 컬럼에 주석달기

테이블 주석달기

  • 질의 : COMMENT ON TABLE 테이블명 IS '주석내용';
COMMENT ON TABLE DEPT IS '부서정보';

테이블 주석 확인 코드

SELECT comments
FROM all_tab_comments
WHERE table_name = 'DEPT';

주석이 잘 달린것을 확인 할 수 있다.

컬럼 주석달기

테이블 열에서 컬럼 주석을 확인 할 수 있는데 지금은 아무것도 없다.

  • 질의 : COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';
COMMENT ON COLUMN DEPT.DNO IS   '부서번호';
COMMENT ON COLUMN DEPT.DNAME IS '부서명';
COMMENT ON COLUMN DEPT.LOC IS   '부서위치';

주석이 생긴 것을 확인할 수 있다.

테이블 삭제

테이블을 만들었으니 삭제 해보자

  • 질의 : DROP TABLE 테이블명;
DROP TABLE DEPT_COPY;

DEPT_COPY테이블이 삭제 되었다.

DDL문 (Data manipulation language)

데이터를 조작하는 명령문이다.

INSERT 데이터 삽입

INSERT를 통해서 테이블에 데이터를 삽입할 수 있다.

  • 질의 : INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3)
    VALUES(값1, 값2, 값3);
INSERT INTO DEPT_COPY(DNO, DNAME, LOC)
VALUES(10, 'ACCOUNTING', 'NEW YORK');

위와같이 넣으면 된다.
값이 잘 들어간 것을 확인 할 수 있다.

ROLLBACK 삽입 취소

데이터를 삽입했을때 이걸 확정해야지 DB에 영구 저장된다. 그 전에는 삽입 취소를 할 수 있는데 이때 사용하는 명령어가 ROLLBACK이다.

  • 질의 : ROLLBACK;
ROLLBACK;

그냥 이것만 적어주면 전의 했던 삽입을 취소해준다.
이런 메세지가 뜨면 성공이다.

COMMIT 삽입 확정

이걸 안 해주면 다른 유저는 DB에서 우리가 삽입한 데이터를 확인 할 수 없다.

  • 질의 : COMMIT

이렇게만 해주면 데이터 삽입이 확정이 된다.

COMMIT;

커밋완료가 뜨면 성공이다.

INSERT 할때 일부 컬럼을 제외하고 추가하기

INSERT INTO DEPT_COPY(DNO, DNAME)
VALUES(30, 'SALES');

특정 컬럼을 추가하지 않고 일부만 추가하면 다음과 같이 널이 자동으로 들어간다.

TRUNCATE TABLE 빠른삭제

테이블을 삭제할때 조건없이 모두 삭제하는 명령어가 있다. 이건 빠르게 삭제하므로 취소를 하지 못하므로 신중하게 해야한다.

  • 질의 : TRUNCATE TABLE 테이블명;
TRUNCATE TABLE EMP_COPY;

위 메세지가 나오면 성공이다.

다른 테이블의 데이터 복사

기존의 테이블에 다른 테이블의 데이터를 복사해서 가지고 올 수도 있다.

  • 질의 : INSERT TABLE 복사할 테이블 이름
    AS
    SELECT 가져올 컬럼 FROM 다른 테이블;
INSERT TABLE DEPT_COPY
AS 
SELECT * FROM DEPARTMENT;

일반 복사는 CREATE였지만 이건 INSERT이고, 테이블이 미리 만들어져 있어야한다는 차이가 있다.

UPDATE 데이터 수정

데이터의 값을 수정하는 기능이다.

  • 질의 : UPDATE 테이블명
    SET
    컬럼명 = '바꿀 값'
    컬럼명2 = '바꿀 값2'
    WHERE 컬럼 = 값;

10 번 부서의 값을 'ACCOUNTING'에서 'PROGRAMMING'으로 바꿔보자.

UPDATE DEPT_COPY
SET
    DNAME = 'PROGRAMMING'
WHERE DNO = 10;

10 번 부서의 값을 'ACCOUNTING'에서 'PROGRAMMING'으로 바뀌었다.

profile
기억보단 기록

0개의 댓글