안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
드디어 국비지원 학원을 다니며 공부에 전념을 할 수 있게 되었습니다.해당 포스팅은 강의 복기용으로 키워드를 기록하는 용도의 포스팅입니다.
--------------------------------------------------------------------------------------------------
-서브쿼리
하나의 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은 테이블레벨이 없다.
상호연관이 중요하므로 복습하도록.
'개발 > KH국비지원과정' 카테고리의 다른 글
[KH국비지원 웹개발자 과정] Day_28 키워드 PL/SQL (1) | 2022.07.21 |
---|---|
[KH국비지원 웹개발자 과정] Day_27 키워드 제약조건, VIEW, SEQUENCE 등 (0) | 2022.07.20 |
[KH국비지원 웹개발자 과정] Day_25 키워드 SQL그룹함수, 집합연산자, JOIN, GROUP BY 등 (0) | 2022.07.15 |
[KH국비지원 웹개발자 과정] Day_24 키워드 SQL 함수 (0) | 2022.07.15 |
[KH국비지원 웹개발자 과정] Day_23 키워드 오라클 (0) | 2022.07.13 |