-
Oracle(2022.02.08)-DML(SELECT,데이터타입)카테고리 없음 2022. 2. 8. 19:42728x90
데이터 검색명령(select 문)
-자료 조회를 위한명령
-관계형데이터베이스에서 가장 많이 사용하는 명령
(사용형식)
SELECT [[DISTINCT] 컬럼명 [AS 별칭][,] : 컬럼명 [AS 별칭]|*] FROM 테이블명 [WHERE 조건] [GROUP BY 컬럼명[,컬럼명,...]] [HAVING 조건] [ORDER BY 컬럼명|컬럼인덱스 [ASC|DESC][,컬럼명|컬럼인덱스,...];
-'DISTINCT': 중복값 배제 후 자료 출력
-'AS 별칭': 컬럼에 부여하는 또 다른 이름으로 별칭은 컬럼출력의 제목으로 사용되며
영문자, 한글,숫자,특수문자(' ', _등)등이 사용될 수 있음.
특수문자가 사용될 때 반드시 " "로 묶어주어야함
- '*': 컬럼 전부를 의미
-'WHERE 조건': 출력할 행을 선택하기위한 일반조건
-'HAVING 조건': 집계함수(SUM,AVG,COUNT,MAX,MIN)에 조건이 부여된 경우 사용
-'ORDER BY 컬럼명|컬럼인덱스': 정렬에 기준이되는 컬럼명 또는 SELECT절에 사용된 순번(1번부터 카운트 됨)
-'ASC|DESC' :오름차순(ASC:작은값->큰값 순, 생략 가능(default 값)),
내림차순(DESC:큰값->작은값 순)
사용예)회원테이블(MEMBER)의 모든 회원의 모든 컬럼을 조회하시오.
SELECT *
FROM MEMBER;사용예)거래처테이블(BUYER)에서 모든 거래처의 거래처코드,거래처명,주소를 출력하시오.
SELECT BUYER_ID AS 거래처코드, BUYER_NAME AS 거래처명, BUYER_ADD1||' '||BUYER_ADD2 AS 주소 FROM BUYER; #|| || : 합성연산자 ' '는 둘사이의 공백을 준다는 것
사용예)회원테이블에서 거주지가 '충남'인 회원의 회원번호,이름,직업,마일리지를 출력하되 마일리지가 많은 순으로 출력하시오.
SELECT MEM_ID AS 회원번호, MEM_NAME AS 이름, MEM_JOB AS 직업, MEM_MILEAGE AS 마일리지 FROM MEMBER WHERE SUBSTR(MEM_ADD1,1,2)='충남' ORDER BY 4 DESC; MEM_MILEAGE AS 마일리지-> ORDER BY 4 DESC; 가능 why? 4번째 줄이기 때문이다.
1. 데이터 타입
-오라클에서 사용하는 자료형태
-문자열, 숫자, 날짜, 2진수로 구분(문자 자료는 없음)
1) 문자열 자료
- ' '로 묶인 자료
- 가변길이 고정길이 타입으로 구분
- ' '안의 자료는 대소문자 구별
- CHAR,VARCHAR,VARCHAR2,LONG,CLOB,NVARCHAR,NVARCHAR2,NCLOB
CHAR빼고 다 가변길이,오라클에서는 저장장소가 입력값보다 작으면 오류, 절대 잘려서 저장되는 경우는 없다.
(1)CHAR
-고정길이 데이터 타입
-최대 2000BYTE 까지 처리 가능
-기억공간이 남으면 오른쪽에 공백이 삽입
-기억공간이 부족하면 오류
-주로 기본키 설정등에 사용
-한글은 한글자가 3BYTE로 저장
(사용형식)
컬렴명 CHAR(n [BYTE|CHAR])
-n:확보된 기억공간의 크기
-BYTE|CHAR: default는 BYTE이며 CHAR은 n이 글자수임
한글을 저장하는 경우 CHAR(2000CHAR)로 선언되어도 2000BYTE를 초과할 수 없어
666글자만 저장 가능사용예) CREATE TABLE TEMP01( COL1 CHAR(20), COL2 CHAR(20 BYTE), COL3 CHAR(20 CHAR)); INSERT INTO TEMP01 VALUES('중구 오류동 846','중구 오류동 846', '중구 오류동 846'); SELECT *FROM TEMP01; SELECT LENGTHB (COL1) AS 길이1, LENGTHB (COL2) AS 길이2, LENGTHB (COL3) AS 길이3 FROM TEMP01; /*CHAR부분: 남은 공간은 영어기준으로 20(글자계산한 수)+10(남은공간)=30 */
COL3는 20자의 글자수 입력가능하다. '중구 오류동 846' 한글:15+빈칸:2+숫자:3=20
20byte차지, 그런데 글자수로만 따지면 10이고 CHAR는 고정길이 데이터 타입으로 나머지 10자는 공백이다.
즉 20-10해서 20byte와 공백10 더해줘서 30이 나온다.
(2)VARCHAR2
-가변길이 문자 데이터를 저장
-확보된 기억공간에 데이터를 저장하고 남는 기억공간(오른쪽)은 시스템에게 반환
-최대 4000BYTE 까지 저장 가능
-VARCHAR와 VARCHAR2는 내부적으로 동일하게 처리(VARCHAR2 사용을 권고함)
->쓴 만큼만 사용하고 반납
(사용형식)
컬럼명 VARCHAR2(n [BYTE|CHAR])
-사용은 CHAR에 준함사용예)
CREATE TABLE TEMP02( COL1 VARCHAR2(2000), COL2 VARCHAR2(2000 BYTE), COL3 VARCHAR2(2000 CHAR)); INSERT INTO TEMP02 VALUES('APPALE BANNA PERSIMMON','APPALE BANNA PERSIMMON','APPALE BANNA PERSIMMON'); INSERT INTO TEMP02 VALUES('IL POSTINO','대전시 중구 오류동846','대전시 중구 오류동846'); SELECT *FROM TEMP02; SELECT LENGTHB(COL1), LENGTHB(COL2), LENGTHB(COL3) FROM TEMP02;
INSERT INTO TEMP02 INSERT INTO TEMP02 SELECT LENGTHB
(3)LONG
-가변길이 자료 저장
-최대 2GB까지 저장 가능
-한 테이블에 하나의 LONG타입만 사용 가능
-기능 개선 중단(Deprecated))=>clob로 대체
-select문의 select절, update문의 set절, insert문의 values절에서 사용 가능
-특정 함수는 사용할 수 없음(순번을 가지고 있는것들에는 사용X 너무길기 때문)
(사용형식)
컬럼명 LONG사용예)
CREATE TABLE TEMP03(
COL1 CHAR(2000),
COL2 VARCHAR2(2000),
COL3 LONG);
INSERT INTO TEMP03 VALUES('대전시 중구 오류동 846','대전시 중구 오류동 846','대전시 중구 오류동 846');
SELECT*FROM TEMP03;
SELECT LENGTHB(COL1),
LENGTHB(COL2)
-- LENGTHB(COL3)=>오류발생 Why? LONG타입 데이터수 파악 불가
FROM TEMP03;
LONG타입 데이터수 파악 불가 COL1과 COL2부분의 결과 COL1은 CHAR타입으로 고정길이이다.
(4) CLOB(Character Large OBjects)
-최대 4GB까지 저장가능
-한 테이블에 복수개의 CLOB타입의 컬럼 사용 가능
-큰 크기 때문에 일부기능은 DBMS_LOB Api(Application Programming Interface)지원을 받아야 사용가능
(사용형식)
컬럼명 CLOB
사용예)
CREATE TABLE TEMP04(
COL1 CLOB,
COL2 CLOB,
COL3 VARCHAR2(4000));
INSERT INTO TEMP04 VALUES(' IL POSTINO', '대전시 중구 오류동 846','APPLE BANNA PERSIMMON');
SELECT*FROM TEMP04;
SELECT SUBSTR(COL1,4,3), IL POSTINO
SUBSTR(COL2,4,3), 대전시 중구 오류동 846
SUBSTR(COL3,4,3) APPLE BANNA PERSIMMON
FROM TEMP04;
SELECT LENGTHB(COL1,4,3),
LENGTHB(COL2,4,3),
LENGTHB(COL3,4,3)
FROM TEMP04;
->사용 불가
만약에 사용하려면 DBMS.LOB.GETLENFTH
LENGHTH는 그냥 길이 ,B붙은건 바이트로 환산
SELECT DBMS_LOB.GETLENGTH(COL1),
DBMS_LOB.GETLENGTH(COL2),
DBMS_LOB.GETLENGTH(COL3)
FROM TEMP04;
SELECT SUBSTR(COL1,2,6), /*(COL1,순번,글자수)*/
DBMS_LOB.GETLENGTH(COL1), /*(COL2, 글자수,순번)*/
SUBSTR(COL2,4,3),
SUBSTR(COL3,4,3)
FROM TEMP04;
SELECT SUBSTR(COL1,4,3) ...결과
(5)NVARCHAR(National VARCHAR,NVARCHAR2, NCLOB)
-국제 표준 문자코드인 UTF-8이나 UTF-16방식으로 ENCODING 할때 사용
-나머지는 VARCHAR,VARCHAR2,CLOB 와 동일
728x90