[SQL] Oracle SQL Select 구문 사용하기
1. 행 선택하기.
1) select 문장 작성하기
2) 산술식 계산하기
3) NULL 값 다루기
4) 컬럼에 별칭(alias) 부여하기
5) SQL*Plus 에서 SQL 질의 편집하기
SQL 은 사용자가 데이터를 검색하기 위해 오라클에게 말하는 언어로 “기능언어”이며
발음상 “sequel” 이라 부른다. (C나 C++ 등은 “프로시저 언어” 라 불린다. )
1) select 문장 작성하기
select 문장은 요청된 데이터를 데이터베이스로 부터 가져 오는데 사용되는 SQL문장이다.
형식은 select ~~~ from 으로 이루어 진다.
SQL> select * from alang.member_zzang911;
NO NAME SE AGE BRITHDAY HP
———- —————- — ———- ———- —————
1 서진우 M 26 75-11-8 017-550-5987
2 장순주 W 25 76-11-20 011-9962-7243
3 박창현 M 28 011-9997-0516
여기서 member_zzang911 은 table 이고 alang 은 schema 이다.
schema 는 객체를 생성한 사용자를 기반으로 하여 데이터베이스 객체들을 논리적으로
묶는것을 말한다.
2) 산술식 계산하기
SQL은 사용자가 +,-,*,/ 등을 포함하여 모든 형식의 산술 계산을 할수 있도록 한다.
산술 함수와 연관된 오라클의 기능을 DUAL 이라 한다. DUAL은 SQL의 select ~ from
구조에서 사용되는 빈 테이블이다.
DUAL 은 하나의 컬럼과 NULL 값으로 구성되어 있는 특별한 테이블이다. 모든 SQL문장
은 데이터가 선택될 테이블을 나타내는 from 절을 갖고 있어야 한다는 규격을 준수하
기 위해 DUAL이 사용된다.
SQL> select no,name,age*3 from member_zzang911;
NO NAME AGE*3
———- —————- ———-
1 서진우 78
2 장순주 75
3 박창현 84
SQL> select 69+45 from dual;
69+45
———-
114
3) NULL 값 처리하기
빈필드를 검색하는 대신, 사용자가 어떤 디폴트 메시지를 보고자 할 경우, 오라클은
그러한 기능을 nvl()라는 특별한 함수를 통해 제공한다.
nvl()함수 형식 : NVL(column_name,’value_if_null’)
SQL> select no,name,nvl(brithday,’null’) from member_zzang911;
NO NAME NVL(BRITHD
———- —————- ———-
1 서진우 75-11-8
2 장순주 76-11-20
3 박창현 null
4) 컬럼에 별칭 (alias) 부여 하기.
오라클이 리턴 되는 컬럼의 데이터 형식에 해당하는 컬럼의 길이에 맞게 그 표현을
잘라낸다. 그러므로 해서 컬럼 이름은 컬럼 데이터의 충분한 설명이 제공 되지는 않
는다.
컬럼의 별칭은 SQL 질의로 부터 출력에서 데이터가 의미있는 제목을 갖도록 하는데
유용하다.
alias 형식
## SELECT colum_name alias_name FROM table_name
## SELECT colum_name AS alias_name FROM table_name
SQL> select no,name,nvl(brithday,’null’) brithday from member_zzang911;
NO NAME BRITHDAY
———- —————- ———-
1 서진우 75-11-8
2 장순주 76-11-20
3 박창현 null
SQL> select no,name,nvl(brithday,’NULL’) as brithday from member_zzang911;
NO NAME BRITHDAY
———- —————- ———-
1 서진우 75-11-8
2 장순주 76-11-20
3 박창현 NULL
연결 (concatenation) 을 사용하여 컬럼 결합시키기
컬럼드의 추력을 합쳐서 어떤 새로운 컬럼 데이터를 만드는것을 concatenation 이라
한다. 이때 사용되는 연결 연산자는 || 이다.
SQL> select no,sex||’,’||age xag from member_zzang911;
NO XAG
———- ——————————————-
1 M,26
2 W,25
3 M,28
2. 선택된 출력 제한하기
select 문에 의해 리턴되는 데이터는 컬럼에 대한 숫자나 알파벳에 관해 어떤 특정한
순서를 갖지 않는다. 하지만 order by 절에 의해 숫자나 알파벳의 순으로 올림차순
(asc) 과 내림차순 (desc) 으로 정렬할수 있다.
SQL> select * from member_zzang911 order by name asc
NO NAME SE AGE BRITHDAY HP
———- —————- — ———- ———- —————
3 박창현 M 28 011-9997-0516
1 서진우 M 26 75-11-8 017-550-5987
2 장순주 W 25 76-11-20 011-9962-7243
order by 와 같이 테이블의 모든 행을 뽑아내기 보다, 특정 한개 행을 나타낼 경우
where 절을 사용할수 있는데 where 절은 비교 연산을 한다.
간단한 비교 연산 이외에 오라클은 특별한 함수들은 사용한 좀더 복잡한 비교 연산을
할수 있다. 대표적으로 nvl(),decode()등을 들수 있다.
decode() 함수는 PL/SQL을 포함한 대부분의 프로그래밍 언어에서 사용되는 제어구문
인 if~eles 와 동일한 원칙으로 사용된다.
SELECT DECODE(colum,val1,return1,val2,return2,…..,return_default)
SQL> select no,name,decode(sex,’M’,’man’,’W’,’woman’) sex
2> from member_zzang911;
NO NAME SEX
———- —————- —–
1 서진우 man
2 장순주 woman
3 박창현 man
다양한 단일행 함수들에 대한 설명
단일행 함수에는 데이터형식에 대한 제약이 있다. 즉 한가지 형식의 데이터에 대해
서만 작업이 가능하다. 즉 text 데이터 형식에만 가능한 함스를 텍스트 함수, 혹은
문자 함수라고 한다.
lpad(x,y,z) :x로 전달된 컬럼 안에 있는 데이터의 왼쪽이 y로서 전달된 폭으로 채워
지는 컬럼을 리턴한다. 추가적으로 z 는 추가된 폭에 채워지는 문자이다.
rpad(x,y,z) :오른쪽이 채워짐..
SQL> select no,name,lpad(decode(sex,’M’,’man’,’W’,’woman’),10,’-‘)
2 sex from member_zzang911;
NO NAME SEX
———- —————- ———————
1 서진우 ——-man
2 장순주 —–woman
3 박창현 ——-man
SQL> select no,name,rpad(decode(sex,’M’,’man’,’W’,’woman’),10,’-‘)
2 sex from member_zzang911;
NO NAME SEX
———- —————- ———————
1 서진우 man——-
2 장순주 woman—–
3 박창현 man——-
lower(x) : x로써 전달된 컬럼값을 모두 소문자로 리턴한다.
upper(x) : x로써 전달된 컬럼값을 모두 대문자로 리턴한다.
initcap(x) : x로써 전달된 컬럼값의 첫 글자를 대문자로 리턴한다.
length(x) : x로써 전달된 컬럼값 안에 있는 문자열의 갯수를 리턴한다.
substr(x,y,z) : 문자열 x컬럼값에서 y번째 문자열부터 z 수만큼의 문자열을 리턴한다.
z 가 없을시에는 y번째 문자부터 문자열 끝까지 리턴한다.
SQL> select no,substr(hp,5,5) from member_zzang911;
NO SUBSTR(HP,
———- ———-
1 550-5
2 9962-
3 9997-
SQL> select no,substr(hp,5) from member_zzang911;
NO SUBSTR(HP,5)
———- ———————-
1 550-5987
2 9962-7243
3 9997-0516
아래 함수들은 sign 이나 log 와 같은 과학 응용 프로그램에서 사용되는 특별한 수학적인
함수들로 숫자함수라고 한다.
abs(x) : 숫자에 대한 절대값을 얻는다. (-1)의 절대값은 1이며, 1의 절대값 역시 1이다.
ceil(x) : x 의 값을 항상 잘라서 올린다. (1.3)은 2가 된다. (-1.3)은 -1이 된다.
SQL> select ceil(1.3) from dual;
CEIL(1.3)
———-
2
floor(x) : x의 값을 항상 잘라서 내린다. (1.6)은 1, (-1.6)은 -2
mod (x,y) : x에 y를 계속 나누어서 더이상 나누어지지 않을때의 나머지 값이다.
mod(12,2)=0,mod(10,3)=1 이다.
round(x,y) : x를 y의 소수점 자리에서 사사오입한다. y가 음수일 경우에는 소수점
의 왼쪽으로 가서 사사오입한다. round(123.345,1)=123.3,
round(123.345,0)=123, round(123.345,2)=123.36,
round(123.345,-1)=120 이 된다.
sign(x) : x의 부호에 해당하는 정수값을 나타낸다. x가 양수이면 1, x가 음수이면
-1을 리턴.
sqrt(x) : x의 제곱근
trunc(x,y) : x값을 y의 소수점 정도로 잘라낸다. 만약 y가 음수라면, 소수점의 왼쪽
방향으로 y자릿수 만큼 잘라낸다.
vsize(x) : x 값에 대한 바이트 단위의 저장크기
이런 숫자함수의 마지막 종류는 리스트 함수 이다. 리스트 함수는 실제적으로 많은
데이터 형식 (텍스트, 수치, 그리고 날짜)들에 대해 사용된다.
greatest(x,y,..) : 텍스트로 된 문자열,숫자 그리고 날짜들의 리스트(x,y,..)중 가장
높은값을 리턴한다.
leatest(x,y,..) : 텍스트로 된 문자열,숫자 그리고 날짜들의 리스트(x,y,..)중 가장
낮은 값을 리턴한다.
이밖의 함수로 날자 함수가 있다. 일반적으로 오늘 날짜를 알기 위해sysdate 를
사용하여 select 구문을 작성할수 있다.
SQL> select sysdate from dual;
SYSDATE
———
02-JAN-01
sysdate 를 사용할수 있으므로,DATE컬럼에 대해 사용할수 있는 함수들은 아래와 같다.
add_months(x,y) : 날짜 x 에 달 y 를 더한 것에 해당하는 날짜를 리턴한다.
SQL> select add_months(sysdate,19) from dual;
ADD_MONTH
———
02-AUG-02
(즉 현재 날짜에 19개월을 더한 날짜가 된다.)
last_day(x) : 날짜 x 가 포함한 달의 마지막 날의 날짜를 리턴한다.
SQL> select last_day(sysdate) from dual;
LAST_DAY(
———
31-JAN-01
months_between(x,y) : y와 x 사이의 달의 개수를 y-x에 의해 계산된 것으로서 리턴한다.
소수점 자리 까지 리턴한다.
SQL> select months_between(’02-DEC-04′,sysdate) from dual;
MONTHS_BETWEEN(’02-DEC-04′,SYSDATE)
———————————–
47
SQL> select months_between(’02-DEC-01′,sysdate) from dual;
MONTHS_BETWEEN(’02-DEC-01′,SYSDATE)
———————————–
11
new_time(x,y,z) : y시간대에 있는 날짜 x에 대한 현재 날짜를 z 시간대로 리턴한다.
이밖의 변환함수등이 있는데 대표적으로 to_char(x), to_number(x)등이 있다.