*서브 쿼리(sub query)
=> 한번의 select문으로는 원하는 data 조회가 불가능해서 여러번의 select 문이 필요.
문법
select 컬럼명
from 테이블 명
where 컬럼명 연산자 (select from...);
위 where 문에서 연산자는 단일행, 다중행 연산자가 있다.
1. 단일행 연산다 : =, >, >=, <, <=, !=
2. 다중행 연산자: >all, >any
=> 서브쿼리->메인쿼리 순으로 동작한다. 서브쿼리가 from 절에 있을때는 인라인 뷰라고 하는데, 성능 때문에 사용한다.
all
=> >all (서브쿼리): 서브쿼리의 실행결과를 메인쿼리가 모두 만족 ㅡ> 서브쿼리의 결과값 중에서 최대값보다 큰 값 조회.
<all (서브쿼리): 서브쿼리의 실행결과를 메인쿼리가 모두 만족 ㅡ> 서브쿼리의 결과값 중에서 최솟값보다 작은 값 조회
any
=> >any: 최소값보다 큰 값 조회
<any: 최대값보다 작은 값 조회
**sql 종류
1)query language: select 문
projection 기능: 컬럼선택 => select 컬럼명
selection 기능 => 행선택 => where 조건식
join 기능: 테이블 간 연결
select: *, 컬럼명, 연산가능, 별칭, || , 함수, distinct, 서브쿼리
form: table, 서브쿼리(인라인뷰)
where: 조건식
1) 비교연산자: =, >, >=, <, <=, !=(<>,^=)
2) 범위: between a and b
3) 여러개: in(값1,값2)
4) like: %, _ ==> %는 0개 이상의 문자 치환, _는 반드시 1개문자 치환
5) 논리연산 : and or not
6) is null
group by: 별칭 x 순서 x , select 절의 표현식 그대로 사용한다.
having: 조건식
order by: 컬럼명 asc/desc, 별칭, 순서
***DML은 마지막에 COMMIT / ROLLBACK 으로 정리를 해줘야 물리적으로 저장된다!!!!!!!!!
*CTAS(씨탁스) 테이블 생성 방법.
CREATE TABLE TABLE명 AS SUBQUERY;
==> 존재하는 테이블을 이용해서 새로운 테이블을 만드는 방법
씨탁스는 not null 제약조건을 제외한, 나머지 조건들은 복사가 안되서 pk 및 uk키 등 중복으로 복사가 된다.(주의@!!!!)
=> 원본의 제약조건은 복사가 안된다.(not null 제외)
*UPDATE(수정)
WHERE X ==> 전체 레코드를 수정하므로 거의 사용하지 않음.
WHERE O ==> 조건에 일치하는 레코드만 수정
문법
UPDATE 테이블명 SET 컬럼명 = 변경 값 , 컬럼명2 = 변경 값
WHERE 조건식; ==> SELECTION (행 선택)
*DELETE(삭제)
WHERE X ==> 전체 레코드를 삭제
WHERE O ==> 조건에 이치하는 레코드만 삭제
문법
DELETE FROM 테이블명
WHERE 조건식;
***트랜잭션: 여러개의 DML 작업을 하나의 작업처럼 처리하는 개념
==> 트랜잭션을 사용하는 이유? 무결성을 보장하기 위함 EX) COMMIT / ROLLBACK도 무결성을 보장하는 키워드이다.
'Oracle SQL' 카테고리의 다른 글
Oracle 간단 정리 (0) | 2022.07.25 |
---|---|
Oracle JOIN (0) | 2022.07.21 |
Oracle SELECT (0) | 2022.07.20 |
Oracle SQL 시작 (0) | 2022.07.19 |