[sql]subquery - basic
1. 최종 결과를 출력하는 쿼리를 메인 쿼리라고 한다면, 이를 위한
이를 위한 중간 단계 혹은 보조 역할을 하는 SELECT문을 서브쿼리라고 한다.
2. 서브쿼리는 다음과 같은 곳에서 사용할 수 있다.
2-1. SELECT, FROM, WHERE
2-2. INSERT, UPDATE, MERGE, DELETE
3. 서브쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다.
*단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하이어야 하고 복수 행 비교 연산자는 서브쿼리의 결과 건수와 상관 없다.
4. 서브쿼리에서는 ORDER BY를 사용하지 못한다.
*ORDER BY절은 SELECT절에서 오직 한 개만 올 수 있기 때문에 ORDER BY절은
메인쿼리의 마지막 문장에 위치해야 한다.
메인쿼리의 마지막 문장에 위치해야 한다.
5. Correlated(연관) 서브쿼리
*서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태의 서브쿼리이다. 일반적으로 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용된다.
6. 다중 행 서브 쿼리 (여러개의 row을 가진 subquery)
*다중 행 서브쿼리는 다중 행 비교 연산자와 함께 사용된다.
*다중 행 비교 연산자에는 IN, ALL, ANY, SOME ,EXISTS가 있다.
6-1. IN
6-2. EXISTS
*서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미한다.
*조건을 만족하는 건이 여러 건이더라도 1건만 찾으면 더 이상 검색하지 않는다.
*EXISTS는 조건이 맞는 지에 대한 TRUE / FALSE만 확인하기 때문이다.
만족하는 결과가 최소 하나가 나오면 바로 TRUE로 판단한다.
*AND EXISTS ( SELECT 1 FROM TABLE WHERE ... )
EXISTS는 ROW가 존재하는지만 판별하기때문에 SUB-QUERY의 SELECT에는 1을 기입
SELECT A.EMPNO,
A.ENAME,
A.DEPTNO
FROM EMP A
WHERE A.JOB = 'MANAGER'
AND EXISTS ( SELECT 1
FROM EMP_HISTORY H
WHERE A.EMPON = H.EMPNO )
*IN, EXISTS의 결과는 모두 동일하나, EXISTS의 경우 1건의 ROW가 발견되면 더이상 조회하지않는다. 그러므로 대용량의 경우 EXISTS가 성능에 유리하다.
SQL의 개요
*sql은 "집합적"언어이다.
집합적 언어는 데이터를 특정 집합 단위로 분류해 이 단위별로 한 번에 처리하는 언어라고 할 수 있다.
*SQL은 크게 DDL과 DML로 나눌 수 있다.
DDL은 데이터 정의어Data Definition(정의) Language로 데이터베이스 객체를 관리하는 언어고,
DML은 데이터 조작어Data Manipulation(조작) Lanaguage로 데이터 삽입, 조회, 삭제, 갱신 등 실제로 데이터를 조작하는 언어다.
개발자 입장에서는
DDL보다는 DML을 사용하는 빈도가 압도적이며 그 종류 역시 DML이 많다.
PL/SQL의 개요
*PL/SQL은 다른 프로그래밍 언어처럼 절차적 언어다. 하지만 그 뿌리는 SQL이다.((PL/SQL에서 P는 Procedural의 약자))
* PL/SQL은 DB 서버에 코드가 올라가 컴파일되어 수행되는 것이 특징이다.
사실 DB 프로그래밍이라는 것은 PL/SQL을 이용해 함수나 프로시저를 만들어 여러 작업을 처리하는 것을 일컫는다.
데이터베이스 객체의 개요
*데이터베이스 객체란 데이터베이스 내에 존재하는 논리적인 저장 구조를 말한다.
*데이터베이스에 정보는 어딘가에 저장된다. 저장하기 위해선 특정한 구조로 저장되어야하는데. 이때 "논리적 구조"으로 저장된다.
데이터베이스 객체의 종류
*"테이블"은 데이터베이스에서 가장 기초적인 "객체"이다.
*뷰, 인덱스, 시노님, 시퀀스
함수, 프로시저, 패키지
--나중에 세부적인 특징을 추가해야하지만, 지금으로썬
--(머리에)강력하게 인식되도록 해야한다.
뷰 == 여러개의 테이블(객체)의 묶음
인덱스 == 자료를 존나 빨리 찾을 수 있는 테이블
시노님 == 데이터베이스(테이블 ❌)의 별칭
시퀀스 == 데이터의 별칭(순서)
시노님
*시노님Synonym은 ‘동의어’란 뜻이다.(다름 명칭과 동일한 지위를 가지고 있다. 즉 닉네임)
데이터베이스 객체는 각자 고유한 이름이 있는데, 이 객체들에 대한 동의어를 만드는 것이 바로 시노님이며
이 또한 데이터베이스 객체에 속한다.
*시노님에는 PUBLIC과 PRIVATE 시노님이 있다.
PUBLIC은 ‘공동’이란 의미가 있듯이 PUBLIC 시노님은 데이터베이스의 모든 사용자가 접근할 수 있다.
이에 반해 PRIVATE 시노님은 특정 사용자에게만 참조되는 시노님이다.
댓글
댓글 쓰기