데일리로그C:
article thumbnail

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
profile

데일리로그C:

@망밍

포스팅이 도움됐다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...