Oracle數據類型,DDL、DML、DCL、TCL語言,SQL操作符,SQL函數
SQL查詢與SQL函數
本章目標
了解Oracle數據類型
了解數據定義語言和數據操縱語言
了解事務控制語言和數據控制語言
掌握SQL操作符和SQL函數
SQL(structured query language)--結構化查詢語言
通過SQL可以實現與Oracle服務器的通信
SQL是數據庫語言,Oracle使用該語言存儲和檢索信息
表是主要的數據庫對象,用於存儲數據
用戶 --------------------發送SQL語句查詢------------------------->服務器
用戶 <-------------發送命令輸出結果到用戶端--------------------服務器
SQL支持下列類別的命令:
--數據定義語言(DDL)
create、alter、drop
--數據操縱語言(DML)
select 、insert、update、delete
--數據控制語言(DCL)
grant、revork
--事務控制語言(TCL)
commit、rollback
Oracle數據類型
創建表時,必須為各個列指定數據類型
Oracle數據庫的數據類型種類有:
字符類型
數值類型
日期時間類型
RAW/LONG RAW類型
LOB類型
Oracle數據類型--字符數據類型:
char 、varchar2 、 long
char
--當需要固定長度的字符串時,使用char數據類型。
--char數據類型存儲字母數字值。
--char數據類型的列長度可以是1到2000個字節。
varchar2
--varchar2數據類型支持可變長度字符串
--varchar2數據類型存儲字母數字值
--varchar2數據類型的大小在1至4000個字節範圍內
long
--long數據類型存儲可變長度字符數據
--long數據類型最多能存儲2GB
Oracle數據類型--數值類型
number
--可以存儲整數、浮點數和實數
--最高精度為38位;
數值數據類型的聲明語法:
number(p,s)--p表示精度即總共多少位,s表示小數點所占的位數
Oracle數據類型--日期時間類型
日期時間數據類型存儲日期和時間值,包括年、月、日,小時、分鐘、秒
主要的日期時間類型有:
date--存儲日期和時間部分,精確到整個的秒
timestamp--存儲日期、時間和時區信息,秒值精確到小數點後6位。
Oracle數據類型--RAW/LONG RAW類型
RAW數據類型用於存儲二進制數據
RAW數據類型最多能存儲2000字節
LONG RAW數據類型用於存儲可變長度的二進制數據
LONG RAW 數據類型最多能存儲2GB
Oracle數據類型--LOB類型
LOB類型稱為‘大對象’數據類型,可以存儲多達4GB的非結構化信息,例如聲音和視頻文件等
LOB數據類型允許對數據進行高效、隨機、分段的訪問
clob 即character lob(字符Lob),它能夠存儲大量字符數據
blob 即binary log(二進制lob),可以存儲較大的二進制對象,如圖形、視頻剪輯和聲音文件
bfile 即binary file(二進制文件),它用於將二進制數據存儲在數據庫外部的操作系統文件中。
Oracle數據類型--偽列
Oracle中偽列就像一個表列,但是它並沒有存儲在表中
偽列可以從表中查詢,但不能插入、更新和刪除它們的值
常用的偽列有rowid和rownum
rowid是表中行的存儲地址,該地址可以唯一地標識數據庫中的一行,可以使用rowid偽列快速地定位表中的一行。
rownum是查詢返回的結果集中行的序號,可以使用它來限制查詢返回的行數
數據定義語言:
數據定義語言(data defintion language)用於改變數據庫結構,包括創建、更改和刪除數據庫對象。
用於操縱表結構的數據定義語言命令有:
--create table
--alter table
--truncate table
--drop table
數據操縱語言:
數據操縱語言(Data manipulation language)用於檢索、插入和修改數據
數據操縱語言是最常見的SQL命令
數據操縱語言命令包括:
--select
--insert
--update
--delete
利用現有的表創建表的副本
create table 新表名 as select 列名 from 舊表名
例:
create table stu1 as select * from stu where stuNo=stuNo1;
選擇無重復的行,在select中使用distinct
例:
select distinct * from 表名;
使用列別名
--為列表達式提供不同的名稱
--該別名指定了列標題
......
插入日期類型的值
--日期數據類型的默認格式為‘DD-MON--RR’
--使用日期的默認格式
--使用TO_DATE函數轉換
insert into order_master values (‘0001‘,‘12-5月-13‘,‘c’,‘25-5月-13‘);
insert into my_table(date_col) values(TO_DATE)(‘2013-10-18‘,‘yyyy-mm-dd‘);
插入來自其他表中的記錄的語法:
insert into 表名 (字段列表) select 字段名 from 其他表名
例:
insert into masterInfo select * from masterInfo1
insert into masterInfo(stuNo,stuName) select stuNo1,stuName1 from masterInfo1
事務控制語言
事務是最小的工作單位,作為一個整體進行工作;
保證事務的整體成功或失敗,稱之為事務控制
用於事務控制的語句有:
commit--提交並結束事務處理
rollback--撤銷事務中已經完成的工作
savepoint--標記事務中可以回滾的點
例:
update order_master set del_date=‘30-8月-05‘ where ordemo<=‘0002‘;
數據控制語言
數據控制語言為用戶提供權限控制命令
用於權限控制的命令有:
grant--授予權限
revoke--撤銷已授予的權限
例:
grant select on vendor_master to accounts with grant option;
revoke seclect,update on order_master from martin;
SQL操作符
Oracle支持的SQL操作符分類為:
算術操作符、比較操作符、邏輯操作符、集合操作符、連接操作符
算術操作符
算術操作符用於執行數值計算,可以在SQL語句中使用算術表達式,算術表達式由數值數據類型的列名、數值常量和連接它們的算術操作符組成
算術操作符包括 + - * /
例:
>select itemdesc,max_level - qty_hand avble_limit from itemfile where p_category=‘spares‘;
>select itemdestc,itemrate * (max_level - qty_hand) from itemfile where p_category=‘spares‘;
比較操作符
比較操作符用於比較兩個表達式的值
比較操作符包括 = 、!= 、 < 、 > 、 <= 、 >= 、 between...and 、 in 、 like 、 is null。
例:
>select itemdesc,re_level from itemfile where qty_hand<max_level/2;
>select orderno from order_master where del_date in(‘06-2月-05‘,‘05-2月-05’);
>select vencode,venname,tel_no from vendor_master where venname like ‘i s‘;
邏輯操作符
邏輯操作符用於組合多個比較運算的結果以生成一個或真或假的結果。
邏輯操作符包括 與(and)、或(or)、非(not)
例:
>select * from order_master where odate>‘10-5月-13‘ and del_date<‘26-5月-13‘;
集合操作符
集合操作符將兩個查詢的結果組合成一個結果
union 、 union all 、 intersect 、 minus
intersect操作符只返回兩個查詢的公共行。
minus操作符返回從第一個查詢結果中排除第二個查詢中出現的行。
>select orderno from order_master minus select orderno from order_detail;
連接操作符
連接操作符用於將多個字符串或數據值合並成一個字符串
>select (venname||‘的地址是‘||venadd1||‘ ‘||venadd2||‘ ‘||venadd3)address from vendor_master where vencode=‘v001‘;
--通過使用連接操作符可以將表中的多個列合並成邏輯上的一行列;
操作符的優先級
SQL操作符的優先級從高到低的順序是:
算術操作符
連接操作符
比較操作符
not邏輯操作符
and邏輯操作符
or邏輯操作符
SQL函數
Oracle提供一系列用於執行特定操作的函數
SQL函數帶有一個或多個參數並返回一個值
SQL函數的分類:
單行函數 、 分組函數 、 分析函數
單行函數分類:
單行函數對於從表中查詢的每一行只返回一個值
可以出現在select子句中和where子句中
單行函數可劃分為:
日期函數
數字函數
字符函數
轉換函數
其他函數
日期函數
日期函數對日期值進行運算,並生成日期數據類型或數值類型的結果
日期函數包括:
add_months
months_between
last_day
round
next_day
trunc
extract
字符函數
字符函數接受字符輸入並返回字符或數值
函數 輸入 輸出
initcap(char) select initcap(‘hello‘) from dual; Hello
lower(char) select lower(‘FUN‘) from dual; fun
upper(char) select upper(‘sun‘) from dual; SUN
ltrim(char,set) select ltrim(‘xyzadams‘,‘xyz‘) from dual; adams
rtrim(char,set) select rtrim(‘xyzadams‘,‘ams‘) from dual; xyzad
translate(char,from,to) select tran slate(‘jack‘,‘j‘,‘b‘) from dual; back
replace(char,search string,[rep string]) select replace(‘jack and jue‘,‘j‘,‘bl‘) from dual; black and blue
instr(char,m,n) select instr(‘worldwide‘,‘d‘) from dual; 5
substr(char,m,n) select substr(‘abcdefg‘,3,2) from dual; cd
concat(expr1,expr2) select concat(‘Hello‘,‘world‘) from dual; Hello world
轉換函數
轉換函數將從一種數據類型轉換為另一種數據類型
常用的轉換函數有:
to_char
to_date
to_number
例:
select to_date(‘2013-12-16‘,‘yyyy-mm-dd‘) from dual;
select to_number(‘100‘) from dual;
其他函數
用來轉換空值的函數:
nvl nvl2 nullif
例:
select itemdesc,nvl(re_level,0) from itemfile;
select itemdesc,nvl2(re_level,re_level,max_level) from itemfile;
select itemdesc,nullif(re_level,max_level) from itemfile;
分組函數
分組函數基於一組行來返回結果
為每一組行返回一個值
avg min max sum count
例:
select count(*) from itemfile;
select avg(*) from itemfile where p_category=‘accessories‘;
select count(itemrate) from itemfile;
select max(max_level) from itemfile;
select count(distinct qty_hand) from itemfile;
select sum(itemrate * max_leve) from itemfile;
group by子句
group by子句 用於將信息劃分為更小的組
每一組行返回針對該組的單個結果
例:
select p_category,max(itemrate) from itemfile group by p_category;
having 子句
having子句用於指定group by子句檢索行的條件
select p_category,max(itemrate) from itemfile group by p_category having p_category not in(‘accessories‘);
分析函數
分析函數根據一組行來計算聚合值
用於計算完成聚集的累計排名、移動平均數等
分析函數為每組記錄返回多個行
row_number rank dense_rank
下面三個分析函數用於計算一個行在一組有序行中的排位,序號從1開始
--row_number -- 返回連續的排位,不論值是否相等
--rank --具有相等值的行排位相同,序數隨後跳躍
--dense_rank 具有相等值的行排位相同,序號是連續的
select d.dname,e.ename,e.sal,dense_rank() over (partition by e.deptno order by e.sal desc ) as denrank from emp e,dept d where e.deptno=d.deptno;
總結:
SQL是通用的數據庫語言
SQL命令可分為數據定義語言、數據操縱語言、事務控制語言、數據控制語言
Oracle 支持的數據類型包括字符、數值、日期時間、raw和lob等
SQL支持的操作符包括算數、比較、邏輯、集合、和連接操作符
SQL函數大致分為單行函數、聚合函數和分析函數
描述truncate table 命令與delete命令的異同。
Oracle數據類型,DDL、DML、DCL、TCL語言,SQL操作符,SQL函數