혼자 보려고 정리한건데 도움이 됐으면 좋겠네요.
◆ 데이터베이스 – 무결성 + 항상 현재의 정보를 유지.
데이터베이스를 두는 이유는 나중에 정보를 활용하기 위함이다.
◆ 테이블
컬럼 열이름 ㄹ을 가지고 연결 세로 가로 행
◆ 기본키 무결성을 보장하기 위한 조건 프라이머리 키 주키
not null + Unique
외래키 포린 키
다른 테이블의 내용을 참조한다.
종속적인 삭제 방지
null과 중복을 허용
◆ 데이터 처리
일괄처리 / 실시간 온라인처리 / 분산처리
+ 하이브리드 처리
일괄처리를 하는 이유는 디스크의 I/O 성능 개선을 위함이다. 작업이 자꾸 일어나면 너덜너덜해진다.
디스크 – 프로세서 – 램과 롬
빼면 아웃풋, 넣으면 인풋
block – 컴퓨터에서 저장하는 최소단위 헤더와 value로 구성된다.
(저장주소를 보관)
◆ 0과 blank 와 null 의 차이
숫자 1바이트
공백문자 1바이트
값이 없다
◆ 트랜잭션 커밋 롤백 commit rollback
작업의 단위
일괄처리의 기준. 작업의 모음 / 단위 . 종료 후 커밋과 롤백 중 한가지가 무조건 일어난다.
커밋 : 트랜잭션이 정상적으로 작동했을 때, 그 내용을 디비에 물리적으로 영구히 저장하는 현상
롤백 : 잘못 수행된 트랜잭션의 내용을, 트랜잭션 이전의 시점으로 취소.
◆ 데이터 관련 4가지의 작업들
검색 삽입 수정 삭제
검색 – 정보로 활용하기 위해 사용
삽입 수정 삭제 - 디비의 무결성 유지 하기 위해서 사용
◆ DBMS – 사용자와 디비 사이에서 도움을 주는 도구가 있으면 좋겠다 에서 출발
데이터베이스 매니지먼트 시스템
◆ SQL - 스트럭쳐 쿼리 랭귀지 1999. Ansi
SQL디벨로퍼는 차후에 이용하게된다. 마우스커서 사용 가능
SQL명령문들은 항상 ; 로 종료가 된다. ; 문장종결자. 이 뒤에는 명령문이 없다
명령어들 / , run ,ed
sql버퍼라는 이름의 메모리에 저장이 된다. 가장 마지막에 실행된 sql 명령문이
SQL 문
select
from
where
디비를 검색하는 이유는 데이터를 활용하기 위해서이다.
DML
DDL
트랜잭션
DCL
실습에 있어서 권장하는 절차
가. 코드작성 후 대기. 실행하지말고
나. 코드해석
다. 결과를 예측
라. 코드 실행
마. 결과 비교/분석
셀렉트의 기능 3가지
선택 / 프로젝션 / 조인
컬럼의 모든 데이터
특정 컬럼의 데이터를 확인
여러개 테이블의 데이터를 검색할 때 활용한다.
◆ SQL PLUS ? 명령어들
ed / colmun 열이름 format a20 문자 20개로
99999 숫자데이터 5개로
ed에서 명령을 마칠때는 / 나 run 을 사용한다.
column 열이름 clear 컬럼 지울때
컬럼길이 편집이 잘못되면 ###### 처럼 나온다.
conn 계정/비밀번호 데이터에 접속한다.
코드를 작성할때 가장 우선적으로 고려되어야 할 사항은 성능이다.
컴파일 – 컴퓨터가 코드를 이해할 수 있도록 하는 작업
◆ 파싱 : 디비에서 컴파일하는 작업을 파싱 이라고 한다. parse
파싱의 3단계 1.검증 문제발생 시 에러를 출력한다
2.실행계획수립 / 테이블로부터 데이터를 가져오는 모든 방법을 검토한다.
3.실행
차시간 복습에서는 파싱 이야기가 안나온 것 보면 엄청 중요한 것은 아닌 것으로 추정.
과정
명령어 타이핑 / D .D > parse
데이터 딕셔너리. 뇌와 비슷한 역할을 한다. 메타데이터를 모두 저장.
데이터들은 물리데이터와 메타데이터가 있는데, 메타데이터는 물리데이터를 설명해주는 데이터이다.
파싱되어 있는 내용들은 매번 새로 하는 것이 아니라 기존의 파싱 정보를 활용한다.
SQL명령어들을 규칙성 있게 사용하면 파싱을 통해서 성능향상을 얻을수 있다. 대소문자를 중구난방으로 쓰지 말자.
명령문은 대문자 테이블의 내용은 소문자로 쓰는 것이 대부분이다.
열머리글들은 기본적으로 대문자로 출력이 된다.
셀렉트 명령은 트랜잭션에 영향을 주지않는다.
산술연산은 컬럼+ 상수 / 컬럼+ 컬럼 이 가능하다.
◆ 데이터의 종류
산술연산
숫자 0
문자 X
날짜 일부만 가능 ( 세모 ) 날짜 에서 + -만 가능
null에 대한 산술연산 결과는 항상 null이다
nvl( ) 함수를 사용해서 null을 대체하게 된다.
◆ 알리아스 – 열별칭 기능
3가지 방식으로 적용한다.
as / 공백 / “ ” 큰 따옴표
단일문장
대문자로만
복수문장 , 쓰여진 문장그대로(대소문자 구분)
◆ 리터럴문자열
문자와 날짜에서 ‘’ 작은 따옴표를 사용한다.
숫자는 생략한다.
쌍따옴표의 경우에는 알리아스에서 이미 쓰고 있기때문에 작은 따옴표다
디스팅트 distinct 명령어로 중복을 제거한다. 그룹화
셀렉트 명령문 바로옆에 와야하고, 명령문 전체에서 단 1번만 가능하다.
멀티플 중복제거.
디스팅트 명령어는 그룹화를 발생시키고, 그룹화가 성능에 나쁜 영향을 주기 때문에 자제하는 것이 좋다.
~~~~~~
◆ 처리 순서
select distinct * column alias 3
from 1 프롬절
where 2 조건절
order by 4
셀렉트 리스트 절 - 내가 보고자하는 컬럼 이름을 넣는다. 이곳에 명시된 것이 출력이 된다
프롬 절 – 테이블의 이름이 온다
조건절
규칙
반드시 조건식이 명시되어야 한다. 그 구조는 컬럼 연산자 값 이다.
2. 값을 사용 시 문자/날짜 값의 경우에는 ‘ ’ 작은 따옴표를 붙여야 한다.
3. 값을 명시할 때는 반드시 테이블에 저장된 형식을 그대로 사용해야 한다.
비교조건
◆ 단일비교 연산자
=
>
>=
<
<=
<> , != , ^= 같지 않다. 3개 모두 같은 뜻. 1 2번 중에서는 2번이 성능적으로 더 좋다.
다른비교조건
between A and B 사잇값, 범위값을 찾을때 사용한다. 바뀌면 작동하지 않는다
하한값(이상) 상한값(이하)
in(set) - 확장 복수연산자 여러개의 똑같은 값을 찾을때 사용한다.
like 문자패턴 일치 일부만 알고 있을 때
% 문장 전체를 의미 _ 언더바 문자 하나하나를 의미한다.
해당 뜻은 like문 에서만 해당이 되는 것으로, 다른상황에서는 적용되지 않 기때문에 주의
is null 널값을 찾을때 사용한다.
◆ 논리조건
and 조건 추가 새로운 조건식이 반드시 추가되어야 한다
or 조건 추가 새로운 조건식이 반드시 추가되어야 한다
not
is not null 만 제외하고, 타 조건식의 앞에서 쓰여서 내용을 부정한다.
not between a and b
미만 초과
우선순위규칙
괄호는 가장 우선적인 단위이다. and와 or가 쓰일때는 and가 우선적으로 처리된다.
1권 110페이지의 예제들
select last_name,job_id,salary
from employees
where job_id='SA_REP' 1
or job_id='AD_PRES' 2
and salary >15000 ; 3 2와 3이 묶인 이후에 1이 계산된다.
1 2를 먼저 처리하려면 ( ) 같은 처리가 되어야한다.
~~~~~~
◆ 오더바이 절 행정렬. 셀렉트 리스트절에 의해 출력된 내용을 조작한다. 가장 나중에 작 동하게 된다.
asc 오름차순(기본값) desc 내림차순 디센딩 디스크라이브 도 같은 문자로 사용
점점 커진다 점점 작아진다
생략가능
정렬은 아스키코드 값의 순서를 따른다. 0번은 null이다
오더바이 절은 셀렉트 문의 가장 끝에 둬야하기 때문에 뒤쪽에는 아무것도 오지 못한다.
오더바이 절에서는 알리아스를 사용 가능하다.
처리순서 이슈
~~~
select last_name,job_id, salary*12 annsal
from employees
order by 2 ;
셀렉트 리스트 절의 출력 순서를 의미한다.
버그니까 쓰지 말것. 쓰다가 걸리면 개인숙제 현업에서는 유용하게 쓰일 것 같다.
~~~~~
조인 -> 여러개의 테이블에서 데이터를 검색할 때 사용하는 기능이다.
조인이 발생하면 시스템 내부적으로 조인대상 테이블의 행들을 하나의 행으로 조합하게 된다.
하나의 행으로 조합할 때 반드시 무결성(정확한 행)이 보장되도록 조합해야 한다.
( d id = d id) -> 조인조건
반드시 n-1개의 조인조건을 where절에 명시해야 한다
n은 조인 테이블의 개수
조인조건이 생략되거나 잘못 되었을 때는 카티션프로덕트 현상이 발생한다.
(가능한 모든 행의 조합을 시도하는 것)
관련 테이블을 모두 프롬절에 명시해야 한다.
카티시안 프로덕트를 피해야 한다. 카티시안 곱
◆ 조인 유형
수업시간에는 오라클 전용만 쓴다. 1999표준 조인은 현업에서 잘 안쓴다.시험에서만 참고
등가조인 같은 데이터가 존재하면 e q
비등가조인 데이터가 전혀 다를 때 non e q
포괄 조인 어느 한쪽 테이블의 데이터가 더 많을 때. outer 아우터
자체 조인 self 1개의 테이블을 대상으로 조인을 수행한다.
등가 비등가 포괄이 발생
가장 많이 쓰이는 것은 등가조인이다.
조인도 성능을 떨어뜨리는 주요 원흉이기 때문에 적절하게 사용해야 한다.
select last_name, department_name,employees.department_id
from employees e, departments d
where employees.department_id=departments.department_id ;
프롬 절에 사용하는 알리아스는 공백으로 부여한다. 이 문자에서 실행하는 동안은 이렇게 쓰겠다. employees, departments 테이블 들은 존재하지 않는 테이블이 된다.
select e.last_name, d.department_name,e.department_id
from employees e, departments d
where e.department_id=d.department_id ;
테이블 이름 접두어 방식 2가지 from 풀네임
from 알리아스 명
주의사항 혼용할 수 없다. 둘 중하나 고르면 끝까지 사용해야 한다.
emp dept loc
e id d id d id l id l id city
부키 주키 부키 주키
관계 관계
d id = d id l id = l id 조인 조건
e id city 질문이 들어오면, 부서 테이블까지 조인을 시켜서 해결하게 된다.
90번 부서에 근무하는 사원의 이름과 그 사원이 근무하는 부서번호, 부서이름과 그 부서가 위치한 지역번호를 출력하시오.
select e.last_name, e.department_id,d.department_name,d.location_id
from employees e, departments d
where e.department_id = d.department_id
and e.department_id=90 ;
부서조건을 or하게 되면 카디션프로덕트가 터진다. 일반조건은 and로 연결해라
◆ 아우터 ? 조인 포괄조인 아우터연산자 (+)
값이 존재하지않으면 null값을 삽입해서 결과를 낸다. 부족한 쪽에 삽입한다.
select e.last_name, d.department_name, d.department_id
from employees e, departments d
where e.department_id= d.department_id(+) ;
select e.last_name, d.department_name, d.department_id
from employees e, departments d
where e.department_id(+)= d.department_id ;
x +
null이 추가된다.
◆ 비등가 조인
구간 같은거 때문에 딱 떨어지지 않는 값들. 예) 연봉 등급
등가연산자가 아닌 연산자를 쓰는 조인이다.
19번 예제 회사에 근무하는 사원 중 급여등급이 4인 사원의 이름과 급여와 사원별 급여등급을 내림차순으로 정렬하여 출력하시오.
select e.last_name, e.salary, j.grade
from employees e, salgrade j
where e.salry between j.losal and j.hisal
and j.grade=4
order by e.salary desc ;
ERROR at line 3:
ORA-00904: "E"."SALRY": invalid identifier
select e.last_name, e.salary, j.grade
from employees e, salgrade j
where e.salary between j.losal and j.hisal
and j.grade=4
order by e.salary desc ;
해결
20번 예제 커미션을 받는 모든 사람들의 이름,부서 명, 지역id 및 도시 명을 출력하시오
이름,부서명, 지역id, 도시명 출력 모든사람들
테이블
조건 커미션 not null
조인 3개
select e.last_name, d.department_name, d.location_id, l.city
from employees e, departments d, locations l
where e.commission_pct is not null
and e.department_id = d.department_id and d.location_id = l.location_id ;
선생님 코드는 조인 조건을 먼저 연결하였다. 성능상으로 조인조건을 먼저 하는것이 더 좋다.
~~~~~~~~~~~~~~~~~~
오라클 sql 문법
◆ select 문
select distinct * column alias
from
where
group by
having
order by
◆◆ DML 데이터 조작어
◆ insert 문
insert into 테이블 또는 테이블( 컬럼, 컬럼 ... )
values(
);
◆ update문
update 테이블이름
set 값
[ where 수식 ]
◆ delete문
delete from 테이블
[where 수식 ]
336쪽 8장
◆ 커밋과 롤백
commit ;
rollback ; 357쪽
◆ ◆ 데이터베이스 객체
테이블 테이블 생성 9장
◆ create table 테이블 이름
(컬럼 데이터타입 ,
);
◆ 서브쿼리를 통한 테이블 생성
create table 테이블이름
as
서브쿼리;
◆ 테이블 변경
alter table 테이블이름
add (컬럼이름 데이터타입,
....
);
새 열들은 마지막에 입력된다.
alter table 테이블이름
modify (컬럼이름 데이터타입,
....
);
alter table 테이블이름
drop (컬럼이름.
......
);
396쪽
◆◆ 제약조건 10장
not null / Unique / PK /Foreign key / Check
table level -> 컬럼을 먼저 선언하고, 별도로 제약조건 선언
설치할 컬럼의 이름이 마지막에 명시
PK UK FK CK 4가지만 가능
column level -> 컬럼과 제약조건을 같이 명시, 컬럼이 앞에 명시
PK UK FK CK NN 까지 가능하다.
NN만 컬럼레벨에서 선언이 가능하다. 혼동하는 경우가 많다. 꼭 기억하라
외래키와 체크
constraint title_copy_status_ck check (status in('AVAILABLE', 'DESTROYED', 'RENTED', 'RESERVED') ),
constraint title_copy_title_id_fk foreign key(title_id) references title(title_id)
◆ 복합 PK
.... primary key(컬럼, 컬럼, 컬럼 .... ) 처럼 작성한다.
NOT NULL 제약 조건을 이미 존재하는 테이블에 추가
NOT NULL 제약 조건은 ADD 대신 MODIFY 명령문을 사용하므로 사용에 주의해야 합니다.
이는 'NULL을 허용하는 상태'에서 'NULL을 허용하지 않는 상태'로 변경하겠다는 의미로 이해하기 바랍니다.
◆◆ 뷰 생성 11장
문법
create view 뷰이름
as 서브쿼리;
◆ 뷰 수정 덮어쓰는 개념
create or replace view 뷰이름
as 서브쿼리;
◆ 뷰 삭제
drop view 뷰이름;
단순 뷰 와 복합 뷰
가공된 정보들
뷰는 물리데이터가 없다. ~~~~~ 가짜 테이블. 논리 데이터만 존재한다.
뷰 수정
문법
create view 뷰이름
as 서브쿼리;
◆ 뷰 수정 덮어쓰는 개념
create or replace view 뷰이름
as 서브쿼리;
◆ 뷰 삭제
drop view 뷰이름;
단순 뷰 와 복합 뷰
가공된 정보들
뷰는 물리데이터가 없다. ~~~~~ 가짜 테이블. 논리 데이터만 존재한다.
◆ 시퀀스 12장
고유번호를 자동으로 생성한다.
시퀀스 이름 용례 테이블이름_컬럼이름_seq
시퀀스 삽입
시퀀스 수정
alter sequence 시퀀스이름
increment by ??
maxvalue ????
.... ;
시퀀스 삭제
drop sequence 시퀀스이름;
◆ 인덱스 자주 사용되지는 않는다
create index 인덱스이름
on 테이블(컬럼이름, 컬럼이름, ....);
인덱스 삭제
drop index 인덱스이름;
◆ 동의어 시노니엄 스킵.
◆ ◆ top-n 분석 뷰 생성파트와 연계되어 있다.
rownum 함수로 순위를 메기고 그 숫자들을 비교할 때.
가장 많이 팔린 제품 10가지는? / 가장 적게 팔린 제품 5가지는?
인라인 뷰 + top-n분석이 자주 쓰인다.
◆ 시퀀스 12장
고유번호를 자동으로 생성한다.
시퀀스 이름 용례 테이블이름_컬럼이름_seq
시퀀스 삽입
시퀀스 수정
alter sequence 시퀀스이름
increment by ??
maxvalue ????
.... ;
시퀀스 삭제
drop sequence 시퀀스이름;
◆ 인덱스 자주 사용되지는 않는다
create index 인덱스이름
on 테이블(컬럼이름, 컬럼이름, ....);
인덱스 삭제
drop index 인덱스이름;
◆ 동의어 시노니엄 스킵.
◆ ◆ top-n 분석 뷰 생성파트와 연계되어 있다.
rownum 함수로 순위를 메기고 그 숫자들을 비교할 때.
가장 많이 팔린 제품 10가지는? / 가장 적게 팔린 제품 5가지는?
인라인 뷰 + top-n분석이 자주 쓰인다.
grant 부여 to revoke 회수 from
롤 : 권한을 모아놓은 집합
댓글 영역