SELECT 문에서 행 제한

WHERE 절을 사용하여 반환되는 행을 제한

컬럼 별칭, 그룹함수 사용 불가

문자열 및 날짜/시간 비교 

 문자열 : 대소문자 구별 O

 날짜/시간 : 대소문자 구별 X, 세션의 날짜 형식에 맞춰 자동 변환 시도, 

- TO_DATE : 세션의 날짜 형식과 무관하게 날짜 표현 가능 

- 날짜 리터럴 사용: 세션의 날짜 형식과 무관하게 날짜 표현 가능 

- 세션의 날짜/시간 형식 확인 쿼리 

SELECT * 

      FROM nls_session_paameters

WHERE parameter LIKE '%FORMAT%';

- 세션의 날짜/시간 형식 변환

- 문자열 비교는 첫번째 숫자의 알파벳 순서를 비교함 

<> 같지않음 / BETWEEN ~ AND ~ / IN (or조건) / IS NULL / %(0개이상의문자) _(암거나하나의문자)  

- A_A 를 검색하려면?

      WHERE c1 LIKE 'A!_A' ESCAPE '!';  _에서 탈출 

 1. 오라클데이터베이스 11g XE
- RDBMS, ORDBMS
  유저 정의의 데이터 유형 및 객체 
- EX(Express Edition)
  오라클에서 제공하는 다양한 데이터베이스중 소규모 입문용 버전
- 다운로드 (이미있음) 

■ 2. 오라클데이터베이스 Client Program
- SQL Plus
- SQL Developer (Toad로 대신하기)

■ 3. SELECT
- 사용하는 이유 : 데이터를 보려고.. 하면 아쉬움 
- 정의 : 재료 집합으로부터 [원하는 결과 집합을 : WHAT]  [정의, 요청, 기술, 묘사 : HOW ] 하는 SQL 문장
- 기본구조 
  5) SELECT (WHAT 정의 : how)  
     *(asterisk), 컬럼, 수식, SQ(scalar sq)
  1) FROM (재료집합 정의) 
     T테이블, V뷰가테이블로부터정의됨, SQ(Inline View)서브쿼리임시뷰, 
      MV(객체화된뷰데이터를별도로저장하는뷰), JOIN(둘이상의재료집합을결합하여새로운재료집합만듬) 등 
  2) WHERE (Filtering Rows) 후보행, 로우를 필터링
     조건식(Predicate) : True일때만 통과 (True False Null)
  3) GROUP BY (무리짓기) 
     기준값(컬럼, 수식) : 같은 값을 갖는 행을 한묶음 으로 
  4) HAVING (Filtering Groups) 그룹 전체에 대해서, 그룹을 필터링, 조건에 만족하는 그룹의 모든 로우
     조건식(Predicate) : True일때만 통과 (True False Null) 
  6) ORDER BY (결과집합 정렬)
      값(컬럼, 수식, 컬럼 별칭 alias), 오름/내림차순, 널처리 (뒤에 위치 시킨다던지)

■ 4. 테이블 
- 의미 
  같은 성질(컬럼)을 저장하는 데이터의 집합, 테이터를 저장하는 기본 데이터베이스 객체
  ** 데이블을 사용하기 전 테이블의 구조를 이해하는 것은 정말로 중요
- 구조
   테이블을 구성하는 컬럼(에 관한 정보)
   구조 확인 desc [테이블이름], SQL Developer의 connection navigator 에서 table 노트 확장 

SELECT문


■ 1. SQL 작성 지침 
- 대소문자 구별안함, 들여쓰기 

■ 2. SQL문의 기본 구조 


■ 3. 원하는 것 정의/요청 하기
- 정의/요청 위치
   SELECT절과 FROM절 사이, select-list : 원하는 것(what)을 요구사항에 맞게(how) 정의하여 나열 
- select-list에 가능한 요소
   *(아스타), 테이블명.* : 모든컬럼 
   컬럼, 리터럴, 수식, 함수, 스칼라 서브쿼리 > 값 
- EX 모든 부서에 대한 전체 정보를 일련번호를 붙여서 출력하세요
   SELECT ROWNUM, departments.*
   FROM 부서 테이블
- 식별자(identifier)
   데이터베이스 객체이름, 컬럼이름, 컬러별칭 
- 식별자 이름 지정 규칙
   영문자로 시작, 30 byte 이하, #, $, _을 제외한 특수문자 불가, 키워드/예약어 불가
   예외: quoted name 방식 CREATE TABLE "from" (no NUMBER); 여기선 대소문자 구분, "" 로 사용해야함

■ 4. 컬럼 별칭(column alias)
- 용도
   Column heading(필드 이름 아닌 select에서 정의 한 컬럼 이름)이 너무 길거나 특수문자 포함
   계산식에서 유용, 뷰 정의시 CTAS 방식으로 테이블 생서이 유용    
- 정의방식(3)
   한 칸 띄움, AS 키워드, 큰 따옴 표 
- 제한
   정의는 SELECT 절에서,
   사용은 ORDER BY절에서 (from, where, group by, having, select 절에서는 사용 불가) 
   1~6 순서 생각하면 됨.
   
▶5. DISTINCT(중복된 값을 하나만 고려)
SELECT job_id
 FROM employees;

SELECT DISTINCT job_id
 FROM emplyees;

SELECT job_id
 FROM employees
GROUP BY job_id;

[사원들의] 커미션 비율을 중복없이 출력하세요
SELECT DISTINCT 커미션 비율
 FROM 사원 테이블

[부서별 사원의] 직무를 중복없이 출력하세요
SELECT DISTINCT department_id, job_id (전체에 대한 DISTINCT)
 FROM 사원 테이블 
요거 조회 결과 이해하기!
 


3교시 : SQL 분류

 DML(데이터 조작어) 
대상 : 데이터 
- INSERT UPDATE DELETE MERGE / SELECT(Query)

 DDL(데이터 정의어) 
대상 : 데이터베이스 객체 
- 데이터를 관리하기 위한 데이터베이스 자료 구조
- 테이블, 뷰, 시퀀스, 인덱스, 제약조건, 유저 등등등
- CREATE, ALTER, DROP, TRUNCATE 
- DML, DCL, TCL을 제외한 거의 모든 SQL문 
- 데이터 베이스 객체는 종류가 다양하여 객체 카테고리를 지정해야함 

 DCL(데이터 제어어)
대상 : 데이터베이스 권한 
- 시스템 권한, 객체 권한, 롤
- GRANT ... TO ... : 권한 부여
- REVOKE ... FROM ... : 권한 외수 

 TCL(트랜잭션 제어어)
대상 : 트렌잭션
- 어떤 작업을 수행하는데 있어서 분리될 수 없는 일의 단계(원자적 단위)
- 일의 단계중 하나라도 실패하면 전체 작업 실패(ALL or NOTHING)
- 모든 단위기능이 성공해야만 트렌젝션 성공 
- COMMIT DML에 문제가 없어서 영구적으로 반영 
- ROLLBACK DML에 문제가 있어 트랜잭션 동안의 모든 변경사항을 없었던 일로
- SAVEPOINT 트랜잭션의 중간으로 되돌릴 수 있는 중간 지점 설정 (ROLLBACK TO SAVEPOINT sp1) 
- 세션 당 트랜잭션은 하나 (세션:유저접속논리적인연결, 물리적연결은커넥션)  
- 트랜잭션의 시작은 첫 DML 
- 트랜잭션의 종료는 COMMIT, ROLLBACK
- DDL, DCL은 문장 자체가 하나의 트랜잭션, 세션의 트랜잭션 자동 종료됨
- 트랜잭션은 DML로 구성됨.  SELECT는 아무영향X 




2교시 : SQL 소개, SQL 처리 과정


 SQL 
- Declarative Programming (선언적) SQL 
  WHAT 프로램이 무엇을 수행시킬것인가, Product 기능이 이미 갖춰짐, 다수의 명령어(익힐것이 많다)
  Insert를 구현하는 것이 아니라 이미 있는 Insert문을 써서 명령만 내리면 됨 
  Imperative Programming (명령적) java 등 언어
  HOW 프로그램이 어떻게 동작하는가, Algorithm, Tools 기능을 구현해야함, 소수의 명령어  
  *Oracle Database SQL Language Reference 메뉴얼, Graphic Syntax Diagram 참고

 SQL 처리과정
- SQL 처리 단계, Shared Pool 체크 (어려움.시간되면 다시듣기)
- 비용 기반 옵티마이저 (CBO) 
SQL을 실행하는 최적의(비용이 적게 드는) 실행 계획 선택
실제 일을 계획하고 수행, SQL처리에 있어서 핵심
- 실행 계획 (Execution Plan)
SQL을 실행하기 위한 예측 단계, 절차의 모음 

 SQL 학습 
무슨일을 요청할지 고민하고 실제 일은 옵티마이져가 수행한다.
옵티마이저가 최적의 실행계획을 세울 수 있도록 관리 해 줘야 함.
SQL문으로 어떠한 일을 할 수 있는지 메뉴얼 레퍼런스를 읽어 RDBMS가 할 수 있는 기능을 익혀야함.




+ Recent posts