簡單的表操作
指令創建簡單表createtable student(name varchar() age number() );
插入新記錄insert into studentvalues(stone);
查看表結構desc student;
查詢記錄select * from student;
刪除表drop table student;
刪除表中的數據delete from studentwhere 條件;
說明SQLPlusWorksheet中用“”作為單行注釋標記varchar()標明可變長度的字符串上限為
number()標明age為不包含小數點的位的整數如果只定義成number則系統默認為位的整數
單引號引起來的字符是SQL語言中字符串常量的表示方式SQL語言中的關鍵字大小寫是不敏感的
數據庫開發人員喜歡使用大寫關鍵字應用程序開發人員多數使用小寫的以實現良好的可讀性
插入記錄後其實並沒有在數據庫中立即永久生效這時可以使用commit;提交數據的更新操作
簡單的Select語句
語法格式SELECT *|{<字段名>} FROM <表名>;字段間用逗號隔開在逗號後面添加空格可以增強可讀性
例如select * from emp;或select empno ename sal from emp;
顯示效果Sql*plus的默認顯示Date和character型數據左對齊Numeric型數據右對齊列標題默認顯示為大寫
iSql*plus的默認顯示列標題默認顯示為大寫列標題缺省居中對齊
使用算術表達式
概述在Select語句中對NUMBER型數據可以使用算術運算符(+*/)創建表達式
舉例select empno ename sal sal* from emp;查詢emp中員工的編號姓名工資和年薪
select empno ename sal sal*+ from emp;
select empno ename sql sal*(+) from emp;可以使用括號更改計算順序
連接運算符
概述即“||”可以把列與字符或其它表達式連接在一起得到一個新的字符串實現“合成”列的功能
舉例select ename || is a || job from emp;
select empno ename ||s annual salary is|| sal* from emp;
說明用一個單引號代表字符串常量的分隔標記用兩個單引號代表字符串常量中出現的一個單引號字符
在查詢的時候也不需要轉義符直接用兩個單引號代表字符串常量中出現的一個單引號即可
使用字段別名
概述重命名查詢結果中的字段以增強可讀性如果別名中使用特殊字符或強制輸出大小寫時需使用雙引號
格式SELECT <字段名>|<表達式> [[AS]<字段別名>] FROM<表名>;
舉例select empno ename "Ename" sal* "年 薪" from emp;
select empno as 員工編號 ename 員工姓名 sal* "年薪" from emp;
說明as可以不加別名可以用雙引號引起來如果別名中不包含特殊字符雙引號可以省略
如果別名中包含了空格如"年 薪"就必須加雙引號否則將被解析成兩個成份導致語法上出問題
如果Ename不加雙引號那麼執行後會顯示為ENAME只有給它加上雙引號之後才會遵重大小寫來顯示
空值
概述空值是無效的未指定的未知的或不可預知的值空值不等同於或空格
舉例select empno ename sal comm from emp;執行後某些記錄的comm屬性會顯示一片空白即空值
insert into student(age) values();插入數據時如果沒有指定name值那麼默認的name就是空值
補充算術表達式中如果出現空值則整個表達式結果為空
連接表達式中出現的空值被當作一個空的(長度為零的)字符串處理
如select ename sal comm ename || || comm sal+comm from emp;
在算術表達式中如果涉及到空值的話可以使用相應的函數對可能存在空值的字段進行缺省值的設置
經過判斷之後如果它是空值則返回如果不是空值則返回它真正的值然後再進行算術運算
去除重復行
概述缺省情況下查詢結果中顯示所有符合條件的記錄行包括重復行可以使用DISTINCT可以清除重復行
DISTINCT的作用范圍是後面所有字段的組合即後面的多個字段的組合不出現重復就可以了
舉例select deptno from emp;本意是查詢部門編號的種類顯示的卻是所有的編號包括重復編號
select distinct deptno from emp;清除查詢結果中重復的部門編號
select distinct deptno job from emp;只要deptno和job組合後的結果不重復那麼就都顯示輸出
說明通常把極為簡單的數據處理包括數據的查詢組合過濾或轉換類型等操作均交給數據庫進行處理
比如分組統計求和求平均值過濾空值過濾重復值數據開頭和結尾的空格過濾字符串轉日期型等等
而對於復雜些的業務邏輯或者與商業邏輯相關的內容建議在應用程序中處理這樣也就實現了松散的耦合
查詢結果排序
概述查詢結果缺省按照記錄的插入順序進行排列可以使用ORDER BY子句對查詢結果進行排序
排序方式包括升序(ASC缺省)和降序(DESC)兩種也可以使用字段別名排序或按多字段排序
舉例select empno ename sal from emp order by sal;按sal進行升序排列ASC可以省略不寫
select empno ename sal from emp order by sal desc;按sal進行降序排列
select empno ename sal* annsal from emp order by annsal;
select deptno empno ename sal from emp order by deptno sal;
說明多字段排序時先按照deptno排序如果在得到的排列結果中存在重復的deptno記錄的話
就將重復的deptno記錄再按照sal排序至於具體的排序方式則需要對兩個字段進行單獨指定
如deptnosal表示二者均按升序排列deptnosal desc表示deptno按升序排列sal按降序排列
如deptno descsal表示deptno按降序排列sal按升序排列依此類推
這種邏輯適合由數據庫在查詢階段進行處理在應用程序中通過代碼來實現的話就會困難一些
條件查詢
說明在查詢語句中或查詢條件中使用字符串或日期的時候字符串和日期值要用單引號括起來
字符串大小寫敏感日期值格式敏感缺省的日期格式是DDMONRR
注意凡涉及到字符串內容的比較大小寫都是敏感的
格式SELECT *|{[DISTINCT]<字段名>|<表達式>[<別名>]} FROM<表名> [WHERE <查詢條件>];
舉例select * from emp where ename=SMITH;這裡所要查詢的SMITH嚴格區分大小寫
select * from emp where hiredate=月;系統會自動將符合約定格式的字符串轉換成Date型
select sysdata from dual;以缺省的日期格式獲取當前的系統時間
說明表dual中只有一行一列它本身並不保存系統時間sysdate永遠代表當前的系統時間
通常在進行簡單的查詢或運算的時候dual表起一個媒介的作用使得形式上看起來像是查詢
dual的好處在於只有一行記錄它一般用在練習時測試某些指令一般不在真實的開發使用它
比如select + from dual;返回又如select + from emp;則會返回很多行的
它會對emp中每一行記錄都查詢但查的不是真正保存的內容而是逐行的計算一遍+
再把得到的作為一個唯一的結果也是唯一的一個字段返回來所以結果就是多行的
對於Oracle數據庫即使是想讓它做一個簡單的常量表達式的運算也要采用問答的形式
即便此時所有的數據都在用戶的手中那也要裝作是查詢給它一個指令令其返回結果
關系運算符
符號BETWEENAND界於兩值之間包括邊界並且必須把小的數值放在前面
IN(set)出現在集合中判斷是否存在某字段等於集合中的值的記錄
LIKE模糊查詢也叫通配查詢
IS NULL判斷空值
示例select * from emp where sal between and ;查詢工資界於和之間的員工的信息
select * from emp where ename in(SMITHKINGKing);返回姓名為set中的元素的值的記錄
select * from emp where comm is null;返回所有comm字段的值為空的記錄
select * from emp where comm is not null;返回非空的注意和空是不同的
注意凡涉及到字符串內容的比較大小寫都是敏感的即in()中的值需要與ename值完全匹配方可查詢出記錄
LIKE%代表零或多個字符_代表一個字符可以使用ESCAPE標識特殊符號
select * from emp where ename like S%;查詢以S開頭的姓名的記錄這裡S仍然是大小寫敏感的
select * from emp where ename like _A%;查詢第二個字母是A的姓名的記錄
select * from emp where ename like %_% escape ;返回姓名存在下劃線的記錄
這裡的escape標明“”起到轉義符的作用在真實的開發中這種轉義符用的並不多
Oracle中的轉義符可以隨便定義所以例句中的“”也可以換成其它的符號如“K”
說明用一個單引號代表字符串常量的分隔標記用兩個單引號代表字符串常量中出現的一個單引號字符
在模糊查詢的時候也不需要轉義符直接用兩個單引號代表字符串常量中出現的一個單引號即可
邏輯運算符
概述優先級由高至低NOT→AND→OR
舉例select * from emp where deptno= and sal>;返回部門編號為而且工資大於的記錄
select * from emp where deptno= or sal>;返回部門編號為的人或者工資大於的記錄
select * from emp where deptno not in();返回部門編號沒有出現在該集合中的人的信息
From:http://tw.wingwit.com/Article/program/Oracle/201311/19115.html