개발/KH국비지원과정

[KH국비지원 웹개발자 과정] Day_26 키워드 서브쿼리, 제약조건

mabb 2022. 7. 19. 09:05
반응형

 

 안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
드디어 국비지원 학원을 다니며 공부에 전념을 할 수 있게 되었습니다.해당 포스팅은 강의 복기용으로 키워드를 기록하는 용도의 포스팅입니다.
--------------------------------------------------------------------------------------------------

-서브쿼리
하나의 SQL문 안에 포함되어 있는 또 다른 SQL문 (SELECT 속의 SELECT)

-서브쿼리의 종류

-반환되는 데이터의 형태에 따라 -> 단일행, 다중행, 다중열,

-동작하는 방식에 따라 -> 비연관, 연관(상관)

-단일행 서브쿼리는 단일행 비교연산자(=,<,>,<=,>=,<>)와 함께 사용한다. 1건의 결과값을 반환하는 쿼리문을 그 결과값이 필요한 자리에 넣는다. WHERE절에서 DEPT_ID가 홍길동의 DEPT_ID인 경우

-이해가 안 됐던 부분. 

SELECT DEPT_CODE, EMP_NAME
FROM EMPLOYEE E
WHERE EXISTS (SELECT 1 FROM EMPLOYEE M WHERE M.DEPT_CODE = E.DEPT_CODE AND M.EMP_NAME='대북혼');
어째서 E.DEPT_CODE와 M.DEPT_CODE가 같고 EMP_NAME이 '대북혼'인 두가지 조건을 충족하는 행이 여러개 출력되는 것일까 이해가 되지 않았음. WHERE절은 WHERE조건에 맞는지 한 행 한 행 확인하고 조건에 맞는 행이 출력되는 것이라고 이해하고 있음.
->첫 조건이 일치하는 행들을 먼저 추려낸 후 그 중에서 B조건에 일치하는 행을 추려내는 것이라고 생각하면 이해가 감. 그렇다면 A AND B와 B AND A가 다른가? 그렇지 않다. 이렇게 이해하는 방식은 옳지 않음.
-> A조건에 부합하면서 B조건에 부합하는.. 조금더 생각해보자. EXISTS 라서 다른가? 수업내용을 제대로 소화하지 못한 것같다.

->집합으로 생각하면 어느정도 이해가 간다. A조건이 참인 집합 AND B조건이 참인 집합. 그 교집합이 있으면 1을 반환하므로 EXISTS는 참이 되고 참이되는 행들이 출력 된다.

 

-다중행 서브쿼리는 서브쿼리가 반환하는 결과값이 여러개인 경우이며 메인쿼리에서 IN/ NOT IN/ ANY/ ALL/ EXISTS 의 연산자를 사용한다.

-EXISTS 서브쿼리의 결과 중에서 만족하는 행이 하나라도 존재하면 참.

-상호연관쿼리

-스칼라쿼리

-인라인 뷰

 

메인쿼리와 서브쿼리의 컬럼을 비교. 결과값이 한 개만 나오는 서브쿼리는 셀렉트 뒤에 쓸 수 있다. 상호연관 커리중 하나인 스칼라쿼리. 메인쿼리의 값을 서브쿼리에서 사용하는 것을 상호연관쿼리라고 한다.

스칼라쿼리 알면 좋다.


인라인 뷰 // 오라클 객체 중 뷰를 할 때 또 나올 것임.
서브쿼리를 테이블로 사용.

ROWNUM과 함께 활용하여 랭킹 구하기 가능.

인서트인투밸류스

인서트 시 밸류스 대신 서브쿼리를 이용할 수 있다.

서브쿼리로 셀렉트한 값을 바로 인서트에 때려 넣을 수 있다.


--CREATE & SUBQUERY
--테이블 복사 -> 컬럼의 갯수, 컬럼명, 컬럼의 타입 .. 모두 복사 ->스키마라고 한다.
--테이블 스키마가 어떻게 되나? 라고 표현
DESC EMPLOYEE;
CREATE TABLE EMPLOYEE_COPY
AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE  --*로 전체 복사가능, 예시를 위해 조금만 씀.
    FROM EMPLOYEE
    WHERE 1 = 0;   -- FALSE값을 넣어 스키마만 복사한다.

회사에서 DELETE 쓸 때 절대 WHERE절 없이 쓰면 안됨.

--INSERT ALL > 한번에 2개 테이블에 데이터 넣기.
-- 두 테이블에 한번에 값을 넣을 때 필요한 컬럼을 다 입력해야한다.

TCL
COMMIT ROLLBACK SAVEPOINT

제약조건과 오라클 객체 진도가 남았음. 진도가 많이 남았으나 시간이 없어 JDBC로 넘어간다고 함.
JDBC하고 HTML/CSS만 하면 루즈해질 것같아서 SERVER를 같이 하기로 함.

세미를 JSP로 나가고 싶은지 스프링으로 나가고싶은지  어차피 스프링을 써야하므로 적응 기간을 가질 수 있다. 
JSP/서블릿을 쓰는 곳은 JSP/서블릿을 스프링으로 바꾸는 곳일 것이라고 함.

어차피 일은 스프링으로 하니까 스프링을 미리 하는 것이 좋다고 함.

트랜잭션/ 한꺼번에 수행되어야 할 최소의 작업단위를 말함.
atm기기로 예시를 들음.

INSERT/UPDATE/DELETE를 하면 커밋 대기 상태인 것.
커밋을 해야 최종 저장. 이전 커밋으로 돌아가는 것이 롤백. 중간저장은 세이브포인트

제약조건
CONSTRAINTS
DBMS를 쓰는 이유?  무결성.
NOT NULL
ID입력없이 가입이 되면 안됨

, UNIQUE
ID가중복되면 안됨

, PRIMARY KEY
NOT NULL, UNIQUE가 합쳐짐. 여러 테이블 중 한 컬럼으로 설정하여 고유 식별자로 사용하는 컬럼. 유일함을 증명하는 키.
한 개밖에 없는 키.

, FOREIGN KEY
두 테이블의 관계 설정. 부모 테이블의 값만 자식테이블이 쓸 수 있게 함.
참조되는 테이블의 컬럼의 값이 존재하면 허용한다.

, CHECK
저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만 허용한다
EX) 남, 녀 M,F 남자,여자  등으로 형식을 지정함.

제약조건이 없으면 쓰레기데이터, 의미없는데이터, 중복데이터가 테이블에 들어갈 수 있다.
데이터 중복을 막고 데이터 무결성을 지키기 위해 사용한다. 
대표 컬럼, 중복방지, NULL방지, 두 테이블의 관계를 설정.

//CONSTRAINT 제약조건에 대해 자동으로 저장되어 있는 테이블.
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE TABLE_NAME ='EMPLOYEE';


오류메시지를 보고 체크할 수 있어야 함.

유니크 위반
ORA-00001: unique constraint (KH.SYS_C007144) violated
체크 위반
check constraint (KH.SYS_C007148) violated

복합키
제약조건의 컬럼레벨 설정 / 테이블레벨 설정 NOT NULL은 테이블레벨이 없다.

상호연관이 중요하므로 복습하도록.

 

반응형