본문 바로가기

Oracle SQL

Oracle) Sub query & Transaction

*서브 쿼리(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