인공지능/SQL 26

오라클 SQL - Top - N 분석

SQL에서 Top-N분석을 하기 위해서는 rank() over()문을 사용한다. 1.1) rank()는 중복 순위 다음 순위를 건너뛰고 1.2) dense_rank()는 중복 순위 다음 순위를 건너뛰지 않는다. rank() over()에서 over()은 분석함수이며 괄호 안에 2.1) order by를 사용하여 정렬하거나 2.2) partition by를 사용하여 분류별 랭크를 지정할 수 있다. 2.3) 또한 select절의 group함수 뒤에 over()을 붙이면 group by절을 사용하지 않아도 되며 2.4) group함수 뒤에 over(order by)를 붙이면 정렬 및 누적 연산을 구할 수있다. 1. rank와 dense_rank 1.1 select rank() over(order by sala..

인공지능/SQL 2020.03.19

SQL문 처리 단계

1. parse 문법(syntax)검사 -> 의미(semantic)검사 -> 권한 검사 -> 실행 계획 생성 메모리에 실행 계획 만든다. 실행계획 : 데이터를 어떻게 찾아오는게 가장 좋은지(데이터 엑세스방법 : rowidscan / fulltablescan) 2. bind 변수에 실제값이 들어가는 단계 SQL 문장의 변수처리 : select * from employees where employee_id = :v_id; 변수처리하는 이유는 실행계획을 sharing하기 위해서이다. sql문장의 실행계획을 sharing하려면 대소문자, 공백문자, tap키, enter키, 주석문자, 힌트, 상수값, 리터럴값이 다 맞아야한다. 실행계획 sharing 못하면 실행계획을 만들어야한다. -> CPU 사용량과 디스크 I..

인공지능/SQL 2020.03.18

오라클 SQL 오류 모음

1. 오류발생 요청한 작업을 수행하는 중 오류 발생: IO 오류: The Network Adapter could not establish the connection 업체 코드 17002 원인 Oracle Listener가 실행되지 않음. 해결방법 [내PC] - 오른쪽 마우스 클릭 - [관리] - [서비스 및 응용 프로그램] - [서비스] - [OracleXETNSListener] - 오른쪽 마우스 클릭 - [시작] 2. 오류발생 ORA-00904: "GIRE_DATE": invalid identifier 00904. 00000 - "%s: invalid identifier" *Cause: *Action: 원인 컬럼명을 잘못씀 해결방법 오타난 부분 수정 3. 오류발생 ORA-01830: date forma..

인공지능/SQL 2020.02.29

오라클 SQL - ROWID와 INDEX

ROWID 데이터 처리 방법은 크게 두 종류로 나뉜다. full table scan by user rowid scan 여기서 by user rowid scan은 row마다 갖고있는 고유 주소(rowid)를 찾아가는 방법이다. {HR SESSION} rowid를 확인하는 방법은 다음과 같다. : create table emp as select * from employees; select rowid, employee_id from emp; rowid를 사용하면 원하는 데이터를 직접 찾을 수 있다. : select * from emp where rowid = 'AAAE/5AAEAAAAJTAAD'; F10을 눌러서 실행계획을 보자. 처리 방식이 변한것을 확인할 수 있다. (기존 fullscan 방식의 실행계획 ..

인공지능/SQL 2020.02.16

오라클 SQL - Data 처리 방법

Data 처리 방법 개요 Data를 처리는 아래와 같은 방법들이 있다. 각 방법의 I/O가 얼마나 발생하는지 보고 더 적게 발생하는 방법을 선택하는 것이 좋다. 1. full table scan 2. rowid scan 2-1) by user rowid scan 2-2) by index rowid 2.2.1 index unique scan 2.2.2 index range scan 2.2.3 inlist iterator 2.2.4 index full scan 2.2.5 index fast full scan 1. full table scan 많은 양의 데이터를 검색할때 유용하다. 그룹함수 쓸 때 사용한다. multi block I/O가 발생한다. multi block : block을 한번에 여러개씩 묶어서 ..

인공지능/SQL 2020.02.14

오라클 SQL - 시퀀스(Sequence) 사용하기

시퀀스(Sequence)란 무엇인가? 자동 일련번호를 생성하는 object이다. create sequence 시스템 권한이 있어야 사용 가능하다. 시퀀스 생성 / 삭제 / 수정 1) 시퀀스 생성 간단 시퀀스 생성 : create sequence id_seq; select * from user_sequences; 구체적인 시퀀스 생성 : create sequence id_seq increment by 1 ------> 1씩 증가 (기본값 : 1) start with 1 -----------> 시작점 1 (기본값 : 1) maxvalue 100 ---------> 끝점 100 (기본값 : 10의 27승(무한)) nocache ---------------> 시퀀스를 미리 만들어 놓고 메모리에서 가져다 쓰지않겠..

인공지능/SQL 2020.02.13

오라클 SQL - 뷰(VIEW) 사용하기

뷰(View)란 무엇인가? 하나 이상의 테이블에 있는 데이터를 논리적으로 처리하는 오브젝트이다. 실제 데이터를 갖지 않고 단지 select 문만 가지고 있다. 간접 access 한다. 즉 보여주고 싶은 데이터만 나열해서 보여줄 수 있다. create view 시스템 권한이 필요하다. create view 권한 확인하는 방법 : > select * from session_privs; 뷰의 기능 (간접 access) {HR SESSION} 뷰 만들기 : create view emp_20 as select * from employees where department_id = 20; 뷰 조회하기 : select * from emp_20; 마치 employees 테이블의 데이터처럼 보여지고있다. 이것이 뷰의 기능..

인공지능/SQL 2020.02.13

오라클 SQL - CMD에서 CSV파일 만들기

현장에서 오라클 SQL Developer가 없다면 어떻게 csv파일을 만들어야 할까? CMD 창에서 csv파일을 생성하는 방법을 알아보자. 1) CMD창을 열고 지정한 물리 디렉토리로 들어간다. 2) 디렉토리에서 SQLPlus로 접속한다. 3) 메모장을 열어서 스크립트를 만든다. [스크립트 설명] set pagesize 0 -----> 컬럼 이름을 쓰지 않는다. set linesize 200 -----> 오른쪽 여백을 200자까지만 놔두고 자른다. set echo off ---------> 컬럼이름, sql문장 빼고 데이터만 export받는다. set termout off ------> 스크립트를 다 실행시켜도 화면상에 아무것도 출력하지 않는다. set trimspool on -----> linesize..

인공지능/SQL 2020.02.12

오라클 SQL - External Table 연습

External Table : data를 database 바깥쪽(OS)에 두고 마치 database에 저장된 data처럼 다루는 기능 1. 디렉토리 설정 { SYS SESSION } 1) 논리적인 디렉토리 생성 - SYS SESSION에서만 가능 물리적인 디렉토리 : C:\Data\ 논리적인 디렉토리 : data_dir # 논리적인 디렉토리 만들기 create directory data_dir as 'C:\Data\'; select * from dba_directories; --확인 # 디렉토리 삭제하려면drop directory data_dir; 2) 논리적 디렉토리를 사용할 수 있는 권한 부여 # 권한 부여하기 grant read, write on directory data_dir to hr; sel..

인공지능/SQL 2020.02.11

다중 테이블 INSERT

1. 무조건 insert all # 기존코드 # 테이블 만들기 (sal_history, mgr_history) / 테이블의 뼈대만 만들어 놓는다. create table sal_history as select employee_id, hire_date, salary from employees where 1 = 2; create table mgr_history as select employee_id, manager_id, salary from employees where 1 = 2; # 만들어진 테이블 뼈대 안에 데이터를 집어넣는다. insert into sal_history select employee_id, hire_date, salary from employees; insert into mgr_hist..

인공지능/SQL 2020.02.11
반응형