通過結構化查詢語言(Structured Query Language,SQL),可以告訴Oracle對那些資訊進行選擇(select)、插入(insert)、更改(update)、刪除(delete)。事實上,這4 個動詞是向Oracle釋出指令的主要單詞。還可以使用附加命令merge(合併)字一條命令中執行insert和update命令操作。一個建立表的示例:
create table newspaper (
feature varchar2(15) not null,
section char(1) ,
page number
);
程式碼是建立一個名為newspaper的表。它有3個列,分別是FEATURE(變長字元列)、SECTION(定長字元列)和PAGE(數值列),FEATURE列的值最長可以有15個字元,並且每一行都必須有一個FEATURE值,就是不能為空。SECTION列的值總是隻有一個字元的長度。
根據結果集建立表:
Oracle中可以把查詢的結果根據結果集中的表結構和資料組成一張新表,語法: create table as select 語句
SQL> create table p_emp2 as select t.empon, t.ename from p_emp t
使用上面命令建立的新表中,不存在任何約束,並且把查詢的資料一起插入到新表中;如果只是複製表結構,只需使查詢的條件不成立(如 where 1= 2)即可,就不會查詢出任何資料,從而複製一個表結構。
語法: SQL> create table p_emp2 as select * from p_emp where 1=2
從建立的表中選擇資料可以用:
select feature,section,page from newspaper ;
從Oracle表中選擇資訊時將用到SQL中的4個基本關鍵字:select、from、where和order by。任何Oracle查詢都將用到select和from。select關鍵字告訴Oracle使用者希望得到的列,from關鍵字告訴Oracle那些列所在的表的名字。where關鍵字告訴Oracle想要放在所選資訊上的限定符。要告訴Oracle希望返回的資訊按指定的順序排列,可以使用Order by,預設是正序排列,想要倒序排列後面加上 desc (descending)。
資料插入:
語法:insert into 表名 (列1,列2,......), values (值1,值2,......);
1、列名可以省略。當省略列名時,預設是表中的所有列,列名順序是表中定義的列的先後順序。
2、值的數量和順序要和列名的數量和順序一致,值的型別要與列名的型別一致。
Oracle中,一個insert 命令可以把一個結果集一次性插入到一張表中,使用的語句是:insert into 表 select 子句
在這種語法下,要求結果集中每一列的資料型別必須與表的對應列的資料型別一致,結果集中的列數量與表中的列數量一致
更新資料:
Oracle在表中更新資料的語法是:update 操作
update 表 set 列1 = 值,列2 = 值,......where 條件
刪除資料:
Oracle 在表中刪除資料的語法:delete操作
delete [from] 表 where條件
truncate:
在資料庫操作命令中,truncate命令(是一個DDL命令)可以把表中的資料一次性全部刪除,語法:truncate table 表名
truncate 和 delete 都能把表中的資料全部刪除,它們的區別是:
1、truncate命令是DDL命令,刪除的資料不能恢復(回滾);delete是DML命令,刪除的資料可以恢復(回滾),通過日誌檔案恢復。
2、如果一個表中的資料記錄很多,truncate要比delete的速度快
因為truncate命令比較危險,一般很少使用。
操作符:
Oracle開發中,依然存在算術運算子、關係運算和邏輯運算。
算術運算:
Oracle中的算術運算子沒有Java中的豐富,只有+、-、*、/ 四個,其中除號(/)得到的結果是浮點數。求餘運算只能藉助函式:mod(x,y)返回x除以y的餘數。
關係運算和邏輯運算
Oracle中的where子句經常見到關係運算和邏輯運算,常見的關係運算:
運算子 | 說明 | 運算子 | 說明 |
= | 等於 | > | 大於 |
< | 小於 | >= | 大於等於 |
<= | 小於等於 | !=或<> | 不等於 |
邏輯運算子有三個:and 、 or 、 not
字串連線操作符(||)
Oracle中字串可以用單引號,也可以用雙引號,在別名中存在空格時,必須用雙引號,在表名、列名時用雙引號。
消除重複行:
Oracle查詢結果中可能有很多相同的情況,那麼可以使用distinct 消除重複行,語法:select distinct 列 from 表
null操作
如果某條記錄中缺少資料值,那就是null值(空值),空值不等於0或空格,空值是指未賦值、未知或未可用的值。任何資料型別的列都可包括null,除非該列被定義為非空或主鍵。字查詢條件中null值,使用IS NULL 作條件 ,非null值 使用NOT IS NULL 作條件。
IN操作
在where子句中可以使用IN操作符來查詢其列值在指定列表裡的行。比如,查詢工作職責是ANALYST,RESIDENT,CLERK的員工,條件可以有兩者方式:
1、where job='CLERK' or job='ANALYST' or job='president'
2、where job in ('CLERK','ANALYST','PRESIDENT')
對應in的還有not in,用法與 in相反。
BETWEEN AND
在where子句中,可以使用between 操作符來查詢列值包含在指定區間的行。between所操作的範圍也包含邊界,是個閉合區間。對應的有not between and,含義與between相反。
集合運算:
集合運算就是將兩個或多個結果集組合成為一個結果集,集合運算包括:
intersect(交集),返回兩個查詢公有的記錄
union all (並集),返回各個查詢記錄的所有,包括重複記錄
union (並集),返回各個查詢的所有記錄,不包括重複記錄
minus(補集),返回第一個查詢檢索出的記錄減去第二個查詢檢索出的記錄後剩餘的記錄
求補集示例: select depton from dept minus select depton from emp ;
邏輯和值
1、單值邏輯:
=(等於)、>(大於)、>=(大於等於)、<(小於)、<=(小於等於)、!=(不等於)、<>(不等於)
2、LIKE
LIKE執行模式匹配。下劃線(_)表示一個字元。百分號(%)表示任意數目的字元,包括零個字元。
LIKE 'm%' 以字母m開頭
3、 IS NULL 和 IS NOT NULL
NULL關鍵字用於測試一列中的某行是否存在資料,如果整列都沒有內容,就說該列是null。單詞IS必須與NULL以及 NOT NULL 一起使用。
4、值列表測試
in(1,2,3)
not in (1,2,3)
between 6 and 10
not between 6 and 10
另外 and命令用於合併兩個邏輯表示式,必須都成立時才起作用;or命令只要符合任一條件即可。
需要記住點:
1、Oracle SQL語句中有資料操作語言(DML)、資料控制語言(DCL)、資料定義語言(DDL)、事物控制語言(TCL),
2、DML語句包括增刪改查語句,DCL語句包括grant 、revoke命令等;DDL語句包括資料庫物件建立、刪除、修改語句;事物控制命令包括commit,rollback命令等。
3、資料庫中建表常用的資料型別有:數值型別number(p,s)、可變字串型別varchar2(length)、日期型別date。
4、Oracle中default 是一個值,Oracle中不存在default 約束。