1. DBMS 구조
1) MySQL, MariaSQL 등등의 구조
--> 테이블, 테이블 ..... 형식
2) Oracle 구조
--> 스키마 : 테이블, 뷰 등이 저장되는 저장소 or 여러 테이블이나 뷰의 묶음
2. 용어
1) DDL( 정의어)
--> 스키마, 테이블 정의하거나 조작할 때 사용
create : 생성
alter : 변경
drop : 삭제
truncate : drop 후 create
2) DML(조작어)
--> 데이터를 조작할 때 사용
insert : 저장
select : 목록
update : 수정
delete : 삭제
3) DCL(제어어)
--> 데이터의 보안, 무결성, 등을 제어할 때 사용
commit : 트랜잭션의 작업 결과반영(영구저장)
rollback : 트랜잭션의 작업 취소 or 이전으로 복구
grant : 사용자에게 권한 부여
revoke : 사용자의 권한 취소
3. 데이터 타입
1) 문자형
** 앞에 N 붙은 타입은 전세계 언어 포함 처리할 때 사용 **
| char
- 길이 값이 정해져 있는 문자열을 처리
- 최대 2000byte까지 사용가능
- 한글 한글자씩 3byte 소요
- ex) 성별, 생년월일, 날짜 등
- Nchar
| varchar2
- 길이 값이 정해져 있지 않은(가변길이) 문자열을 처리
- 사용자가 입력한 만큼 저장됨
- 최대 4000byte까지 사용가능
- ex) 아이디, 비밀번호 등
- Nvarchar2
| long
- 가변길이 문자열 처리
- 최대 2GB까지
- 한 테이블에 한컬럼에서만 사용가능
- select문의 select 절, update문의 set 절, insert문의 values절에서 사용 가능
- clob 타입으로 대체 가능
| clob
- 가변 길이 문자열 처리
- 최대 4GB까지
- 한 테이블에 여러 칼럼에 사용 가능
2) 숫자형 number(p,s)
** p : 정밀도를 나타내는 정수 값
ㄴ> 최상위 유효 자릿 수 : 1
ㄴ> 최하위 유효 자릿 수 : 38
** s : 스케일 값, 소숫점 이하의 유효 숫자 자리수
ㄴ> scale 양수일 때 : 소수점 오른쪽에 있는 자릿 수(최하위 유효 자릿 수 포함)
ㄴ> scale 음수일 때 : 소수점 왼쪽에 있는 자릿 수(최하위 유효 자릿 수 포함 X)
| number
- 기본 38자리 제공
- 소수 첫째자리에서 반올림됨
- ex) 765432.1234 --> 765432.1234
| number(3)
- 최대 3자리로 이루어진 숫자
- ex) number(7) : 765432.6234 --> 765433
- ex) number(5) : 765432.6834 --> error
| number(*,s)
- 소수점 s+1번째 자리에서 반올림하여 s번째까지 표현
- ex) number(*,3) : 765432.1234 --> 765432.123
| number(p,s) (p>s인 경우)
- 전체자리수 p에서 소수점이하 s자리까지 표현
- 정수부분은 p-s자리까지 허용, 소수점은 s+1번째자리에서 반올림
- ex) number(9,1) : 765432.6834 --> 765432.7
- ex) number(7,-2) : 765432.6834 --> 765400
| number(p,s) (p<s인 경우)
- p는 소수점 이하의 유효 숫자 수
- s는 소수점 이하의 전체자리수
- (s-p) 만큼의 0이 유효숫자 앞에 존재해야함
- 소수점은 s+1번째자리에서 반올림
- ex) number(*,3) : 765432.1234 --> 765432.123
- ex) number(4,5) : 1.234 --> error (5-4)만큼 0가 존재안함(0 없음)
- ex) number(2,5) : 0.005678 --> error (5-2)만큼 0이 존재안함(0 두개)
- ex) number(2,5) : 0.0005678 --> 0.00057
3) 날짜형 --> String 타입으로 할 것!
| DATE
ㄴ> sysdate : 시스템 내부에서 제공하는 날짜 정보를 반환하는 함수(반환되는 정보가 date 타입임)
| TIMESTAMP
web 연결
권한 3개 해제 : root 권한이므로!
대소문자 가리진 않지만 db에서 알아서 대문자 처리함!
CREATE TABLE MEMBER (
ID VARCHAR2(20),
PASS VARCHAR2(20),
NAME VARCHAR2(10),
GENDER VARCHAR2(6),
AGE NUMBER,
BIRTHDAY VARCHAR2(10),
PHONE VARCHAR2(13),
SIGNDATE DATE
);
default ' ' ---> 문자열 ' ' 이 들어감(사용하지 말것)
프로그램 종료할 때 --> 변경사항 커밋(영구 저장), 롤백(저장x),
트랜잭션 : 두개 다 동시에 할 순 없음(대기중이므로)
web에서 update 등등 할 때는 바로 commit이 되기 때문에 상관없음
CREATE TABLE NOTICE(
// uid (오라클에서는 uid 사용 불가) 모든 테이블에 rownum 기본으로 있음
id NUMBER,
title NVARCHAR2(200), // 제목
content CLOB, // 내용
writer NVARCHAR2(20), // 작성자
signdate TIMESTAMP, // 작성일
hit NUMBER, // 조회수
files NVARCHAR2(500) // 첨부파일
);
select 9+2 , 9+'2' , '9'+2 , '9'+'2' from dual;
ㄴ> 숫자로 인식함
페이징 처리(select 문에서)
mysql > limit 0,10 (index이므로 0부터 시작)
oracle > between 1 and 10 (index 아니므로 1부터 시작)
오라클은 비어있음( " " ) 개념이 없음 --> null !!!
페이징
select rownum num,notice.* from notice;
// 칼럼 num 하나
// * 인식 못함 --> 테이블명.* 로 해야함
날짜
systimestamp
ㄴ-> db상에서만 뒤에 숫자 적히는거임(web에서는 날짜, 시간만 보임)
ㄴ-> 맨뒤에 +09:00 의 의미 : 세계 시간보다 +9시간 된 시간
substring 이용안하고도 to_char 을 이용해 날짜 format 가능(db 비교구문에서 사용)
HH24를 이용하면 오후 1시 --> 13시 로 뜸
mi --> 분
주석 처리 : --(하이폰 두개)
숫자 함수
sign :
round : 반올림
group bt
group by 뒤엔 having절 이용(where절이 아님)
순위함수 --> 세가지 구문 중 되고 안되고 하는 상황이 생길 수도 있으므로 세가지 다 기억할 것(as num과 같음)
select ROWNUM num,notice.* from notice order by hit;
// 눈에 안보이는 rownum을 num으로 이름을 지정하여 보이게 하자
select * from (select ROWNUM num, notice.* from notice) order by hit;
/
select ROW_NUMBER() OVER (order by hit) num, notice.* from notice;
select RANK() OVER (order by hit) num, notice.* from notice;
// 0부터 시작(asc 생략되어있음)
// 반대로 하고 싶다면 order by hit desc로 수정할 것
// 공동 4위 2개가 있다면 그 다음 순위는 6위임
select DENSE_RANK() OVER (order by hit) num, notice.* from notice;
// 공동4위가 있더라도 다음 순위는 5위부터
서브 쿼리
select * from (select ROW_NUMBER() OVER (order by hit) num, notice.* from notice) where num between 1 and 5;
// num : hit칼럼 기준으로 정렬한 다음
// 5개씩 불러와서 페이징 처리
실전에서는 num을 이용해서 정렬한 다음 페이징 처리하기
'DB > oracle' 카테고리의 다른 글
SQL Developer 경고 오류 (0) | 2023.06.09 |
---|---|
오라클 기본2 - 스키마 생성 (0) | 2023.06.08 |
오라클 설치 및 설정 (0) | 2023.06.08 |