(Oracle学习笔记) sql语言
文章目錄
- 一、sql特點
- 二、sql語言分類
- 三、表空間
- 查詢表空間
- 創建表空間
- 修改表空間名稱
- 增加表空間大小
- 減小表空間大小
- 刪除表空間
- 四、用戶管理
- 查詢用戶
- 新建用戶
- 修改用戶口令
- 修改默認表空間
- 解鎖用戶
- 刪除用戶
- 五、權限管理
- 授權操作
- 權限再操作
- 撤銷權限
- 撤銷對象權限
- 六、用戶和權限查詢
- 1、查詢所有用戶
- 2、查詢用戶名,用戶id,創建時間
- 3、查詢當前用戶詳細信息
- 4、查詢當前用戶被授予的角色
- 5、查詢全部用戶被賦予的角色
- 6、查詢系統所有角色
- 7、查詢當前用戶所具有的權限
- 七、角色
- 創建角色
- 查詢用戶所具有的角色
- 修改角色密碼
- 激活角色
- 刪除角色
- 八、profile管理密碼
- 1、設定密碼錯誤次數及鎖定時間
- 2、設定密碼過期時間
- 九、數據類型
- 1、數值類型number(precision,scale)
- 2、字符類型char,varchar2
- 3、日期類型
- 4、rowid
- 十、創建表
- 十一、維護表
- 更改表名
- 刪除列
- 新增列
- 修改列屬性
- 修改表狀態
- 表刪除
- 查詢表是否在回收站中
- 恢復已刪除表
- 完全刪除
- 十二、非空約束
- 十三、主鍵約束
- 建表時創建主鍵
- 刪除主鍵
- 添加主鍵
- 主鍵自增長:序列
- 使用序列實現主鍵自增長
- 刪除序列
- 十四、唯一約束
- 創建
- 刪除
- 添加組合唯一約束
- 十五、外鍵約束
- 創建
- 十六、檢索數據
- 1、簡單查詢
- 查詢日期
- 帶有表達式的select子句
- 為列指定別名
- 結果去重
- 處理null,nvl函數
- 連接字符串
- Concat函數拼接
- 十七、篩選查詢
- 1、比較查詢
- 2、like關鍵字使用
- 定義轉義字符,escape
- in關鍵字
- Between....and關鍵字
- Is null關鍵字,判斷某個字段是否為null
- 邏輯篩選
- 十八、分組查詢
- Group by改變分組排序
- Having子句限制分組結果,與group by連用
- 十九、排序查詢
- 單列排序
- 在order by 中使用列號進行指定排序
- 使用非選擇列進行排序
- 多列排序
- 二十、多表查詢
- 1、內連接
- 2、外連接
- 二十一、系統函數
- 二十二、子查詢
- 單行子查詢
- 多行子查詢(in,any,all)
- 分頁查詢
- 二十三、插入數據
- 顯式指定全部列
- 顯式指定部分列
- 不指定列名稱
- 二十四、更新數據
一、sql特點
1、功能一體化
幾乎涵蓋了對數據庫的所有操作,語言風格統一
2、高度的非過程化的語言
用戶只需要說明“做什么”,而不需要說明“怎樣做”。大大減輕了用戶的負擔,同時降低了對用戶的技術需求
3、面向集合的操作方式
不僅僅查詢結果可以是多條記錄的集合,插入、刪除、修改操作的對象也可以是多條記錄的集合,大大提高了我們對數據的操作效率。
4、多種使用方式
可以直接以命令的方式與數據庫進行交互,也可以嵌套到其他高級語言中使用。
5、簡介、易學
Sql語言命令數量有限,語法簡單,接近自然語言
二、sql語言分類
數據查詢語言;DQL,select
數據操作語言:DML,insert、update、delete
事務控制語言:TCL,commit、savepoint、rollback
數據控制語言:DCL,grant、revoke
數據定義語言:DDL,create、alter、drop
三、表空間
查詢表空間
創建表空間
修改表空間名稱
增加表空間大小
減小表空間大小
刪除表空間
四、用戶管理
查詢用戶
新建用戶
修改用戶口令
修改默認表空間
解鎖用戶
刪除用戶
五、權限管理
授權操作
權限再操作
撤銷權限
系統權限在撤銷父類權限后,對子類權限無影響。
對象賦權
撤銷對象權限
對象權限在撤銷父類權限后,子類相應的權限也被撤銷。
六、用戶和權限查詢
1、查詢所有用戶
2、查詢用戶名,用戶id,創建時間
3、查詢當前用戶詳細信息
4、查詢當前用戶被授予的角色
5、查詢全部用戶被賦予的角色
6、查詢系統所有角色
7、查詢當前用戶所具有的權限
七、角色
系統預定義角色
CONNECT
CREATE SESSION 創建會話
RESOURCE
CREATE SEQUENCE 建立序列
CREATE TRIGGER 建立觸發器
CREATE CLUSTER 建立聚簇
CREATE PROCEDURE 建立過程
CREATE TYPE 建立類型
CREATE OPERATOR 創建操作者
CREATE TABLE 建表
CREATE INDEXTYPE 創建索引類型
EXP_FULL_DATABASE:數據庫的導出
IMP_FULL_DATABASE:數據庫導入
創建角色
查詢用戶所具有的角色
修改角色密碼
激活角色
刪除角色
八、profile管理密碼
1、設定密碼錯誤次數及鎖定時間
創建profile文件
指定用戶使用所創建的文件
2、設定密碼過期時間
修改profile
刪除profile
九、數據類型
1、數值類型number(precision,scale)
precision表示數字中的有效位(從左邊開始第一個不為0的數算起,小數點和負號不會計入有效位數)
scale表示精確到多少位,默認值為0,大于0時表示經確定小數點多少位
2、字符類型char,varchar2
Char類型與char類型或者字符串常量進行比較時,在比較時,使用補齊空格的方式進行比較。
Varchar2類型與varchar2類型,char類型或字符串常量進行比較時,不補充空格,直接比較。
3、日期類型
Date
保存日期和時間,常用的日期處理都可以使用該類型。
Timestamp
不僅可以保存日期和時間,還能保持小數秒
Sysdate:返回系統當前時間
Sysdate+1:當前時間加1天
Sysdate-1/24:當前時間減1小時
日期格式直接相減算天數差,單位為天,時分秒換算成小數
將日期轉化為字符串
將字符串轉化為日期to_date(char,Format)
返回日期格式的某一部分內容Extract(date from datevalue)
Add_months(date,months) 在date日期上增加月份
4、rowid
用于定位數據庫中一條記錄,包含數據物理存儲地址,偽列,通過rowid來查詢數據,能最快定位到數據。
十、創建表
創建表副本
十一、維護表
更改表名
刪除列
新增列
修改列屬性
修改表狀態
表刪除
查詢表是否在回收站中
恢復已刪除表
完全刪除
十二、非空約束
建表時創建非空約束
通過修改表字段,添加非空約束
十三、主鍵約束
建表時創建主鍵
刪除主鍵
添加主鍵
主鍵自增長:序列
創建序列
Increment:增長步幅
Start with :從多少開始
Nomaxvalue/maxvakue:有無最大值
Currval:表示序列當前的值
Nextval:獲取序列下一個值,新序列首次使用時,必須先調用nextval進行序列初始化才能調用currval
使用序列實現主鍵自增長
刪除序列
十四、唯一約束
創建
刪除
添加組合唯一約束
十五、外鍵約束
創建
十六、檢索數據
1、簡單查詢
查詢日期
默認以簡體中文格式展示
以英語格式顯示日期
自定義日期展示格式
帶有表達式的select子句
為列指定別名
結果去重
處理null,nvl函數
連接字符串
||拼接
Concat函數拼接
十七、篩選查詢
1、比較查詢
常用比較符:=、A!=B或A<>B、>、<、>=、<=
查詢工資>1500的員工編號,員工姓名,員工工資:
特殊比價
A{operator} ANY (B),表示A與B中任何一個元素進行operator運算符比較,只要有一個比較值為真,就返回數據行
A{operator} ALL (B),表示A與B中任何一個元素進行operator運算符比較,所有比較值為真,才返回數據行
查詢工資為1600和800的員工編號,員工姓名,員工工資:
查詢工資不等于1600和800的員工編號,員工姓名,員工工資:
2、like關鍵字使用
%:代表一個或多個字符
_:代表一個字符
通配符連用,查詢姓名以S開頭,并且第三個字符為O的員工信息
查詢在81年被雇傭的員工
定義轉義字符,escape
查詢I?_???:
_表示普通‘_’
in關鍵字
判斷某一字段值是否在一組值中出現
查詢是銷售員和文員的員工編號,員工姓名,員工工作:
查詢不是銷售員和文員的員工編號,員工姓名,和員工工作:
Between…and關鍵字
判斷某列值是否在指定區間內
查詢工資在2000和3000之間的員工編號,員工姓名,員工工資
Is null關鍵字,判斷某個字段是否為null
查詢無獎金的員工姓名,工資,獎金:
查詢有獎金的員工姓名,工資,獎金:
邏輯篩選
在where子句中使用邏輯運算符and,or和not進行邏輯判斷
查詢工資大于等于2000并且小于等于3000的員工姓名,編號,工資:
查詢工資小于2000或大于3000的員工編號,員工姓名,員工工資:
十八、分組查詢
Select字句后面只可以有兩類表達式:統計函數和進行分組的列名
Group by常用的聚合函數
Avg 返回一個數字列的平均值
Count 返回查詢列的結果記錄數
Max 返回數字列的最大值
Min返回數字列的最小值
Sum 返回數字列的總和
查詢每個部門每個崗位的平均工資和最高工資
Group by改變分組排序
查詢每個部門部門號,工資總額,并根據工資總額降序排列
Having子句限制分組結果,與group by連用
查詢每個部門平均工資大于2000的部門號以及部門平均工資
十九、排序查詢
單列排序
在order by 中使用列號進行指定排序
使用非選擇列進行排序
多列排序
首先第一列進行排序,當第一列存在相同數據時,再以第二列進行排序
二十、多表查詢
1、內連接
關鍵字INNER JOIN 來實現,其中 INNER可以省略,使用關鍵字內連接時,必須使用ON關鍵字設定連接規則
使用內連接進行多表查詢時,返回的結果中只包含與查詢結果和連接條件相匹配的行。內連接消除了與另一個表中不匹配的行。
一旦給表設定別名后,接下來只能使用表別名
2、外連接
擴展了內連接的結果集,除了返回所有匹配的行之外,還會返回一部分或全部不匹配的行
左外連接
Left join.....On
左表中所有數據都會被查詢出,與右表中未能連接的字段使用null值
二十一、系統函數
Ascii函數
Concat(s1,s2)拼接字符串
Initcap(s):將字符串每個單詞首字母大寫
Instr(s1,s2,[i],[j]) :返回s2在s1中,從i位置開始第j次出現的位置
Length(s):返回字符串s的長度
Lower(s),Upper(s)
Substr(s,i,[j]):從s字符串中第i個位置開始,截取長度為j的字符串,如果省略j,怎截到字符串末尾
Ceil()函數:返回大于或等于數字n的最小整數
Power(n1,n2):n1的n2次方
Sysdate返回系統當前時間
聚合函數
Avg,count,sum
二十二、子查詢
注意事項:
1、子查詢必須用括號括起來
2、子查詢不能包含order by子句
3、子查詢允許嵌套多層,但是不能超過255層
單行子查詢
可以使用單行比較運算符(=、>、>=、<、<=、<>)
查詢emp表中,既不是最高工資,也不是最低工資的員工信息
多行子查詢(in,any,all)
查詢不在銷售部門(sales)de 員工信息
在emp表中,查詢工資大于10號部門的任意一個員工工資的其他部門的員工信息。(any)
在emp表中,查詢工資大于部門編號為30的所有員工工資的員工信息。(all)
Where sal > all()
關聯子查詢
在emp表中,檢索工資大于同職位的平均工資的員工信息
分頁查詢
Rownum是一個偽列,或根據sql語言自動添加一列排好的序列號。
分頁查詢
Rownum總是為滿足條件的記錄自動生成從1開始的序號
查詢emp表中第4-9跳記錄
二十三、插入數據
1、當為數據列增加數據時,可以直接提供數值或者用單引號引住
2、當為字符或日期增加數據時,必須用單引號引住
3、當增加數據時,數據必須滿足約束條件
4、當增加數據時,數據必須與列的個數和順序保持一致
顯式指定全部列
顯式指定部分列
不指定列名稱
二十四、更新數據
將員工姓名為SMITH的工資調整為部門號為30的部門平均工資
總結
以上是生活随笔為你收集整理的(Oracle学习笔记) sql语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Oracle学习笔记) sql*plu
- 下一篇: (JAVA学习笔记) 类的继承,supe