SQL基础使用入门(二): DML语句和DCL语句
SQL語句第二個類別——DML 語句
DML是數據操作語言的縮寫,主要用來對數據表中數據記錄實例對象進行操作,包括插入、刪除、查找以及修改四大操作,這也是開發人員使用中最為頻繁的操作。
1.插入記錄
基本語法:INSERT INTO tablename (field1,field2,…,fieldn) VALUES (value1,value2,…,valuen);
其中,(field1,field2,…,fieldn) 表示數據表屬性字段,(value1,value2,…,valuen) 表示插入記錄所對應屬性字段的屬性值,若前面沒有說明數據表屬性字段,則后面記錄屬性默認與表中字段順序一致
例1(使用方法1向Student表中插入一行新記錄)
例2(使用方法2向Student表中插入一行新記錄)
另外也可以一次性插入多條記錄,即在VALUES后添加多條記錄值
例(一次性插入多條記錄)
此外,如果插入記錄中屬性為表屬性字段的子集,則未賦值的屬性將自動設置為空值(允許空值的情況下)
例(系統自動對未賦值屬性設置空值)
2.更新記錄
基本語法:UPDATE tablename SET field1=value1,field2=value2,…,fieldn=valuen [WHERE CONDITION];
其中,’fieldn=valuen’ 表示更新記錄屬性值操作,’WHERE CONDITION’ 表示對所需更新的記錄的條件篩選
例(更新Student表中學號為’201615122‘的學生的系為’MA‘)
也可以同時對多個表進行更新,這主要用于根據一個表屬性字段去修改另一個表屬性字段,在此不做演示,歡迎讀者自行嘗試。
基本語法:
UPDATE t1,t2,…,tn SET t1.field1=value1,t2.field2=value2,…,tn.fieldn=valuen [WHERE CONDITION];
3.刪除記錄
基本語法:DELETE FROM tablename [WHERE CONDITION];
例(刪除Student表中學號為’201615123‘的學生記錄)
和多表更新一樣,也可以直接刪除多個表,基本語法:DELETE t1,t2,…,tn FROM t1,t2,…,tn [WHERE CONDITION];?在此亦不作相應演示,請讀者自行完成。
4.查詢記錄
實際上在本部分前面已經為大家演示了基本的查詢語句:SELECT * FROM tablename [WHERE CONDITION];
語句中的’*’代表查詢全部屬性字段,故查詢結果顯示了表中全部記錄。而在實際生活應用中,往往需要進行多種條件的查詢,以下將分別進行介紹。
1)查詢不重復記錄
有時查詢需要去除一些重復的記錄,這時可以在查詢時添加關鍵字 DISTINCT 來實現此功能
例1.1(查詢Student表中系種類)
例1.2(查詢Student表中系種類)
2)條件查詢
查詢語句中可選項[WHERE CONDITION]表示條件查詢,條件的種類可以有多種,可以包括比較遠算符(>,<,>=,<=,=,!=)、邏輯運算符(and,or,not)或空值判斷(is null,is not null)等
例1(查詢Student表中年齡小于19歲的學生記錄)
例2(查詢Student表中’MA‘系且年齡大于19雖的學生記錄)
3)排序顯示查詢
在查詢后可以通過關鍵字ORDER BY 和 DESC|ASC 來實現排序顯示,其中DESC代表降序,ASC代表升序,默認為升序。
基本語法:
SELECT * FROM tablename
[WHERE CONDITINO]
[ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],…,fieldn [DESC|ASC]];
例(查詢Student表中全部學生記錄并按照年齡從小到大排序顯示)
4)限制顯示查詢
MYSQL在SQL92中新擴展了一個語法關鍵字 LIMIT,它可以在查詢之后只顯示指定個數的信息
語法格式:SELECT …[LIMIT offset_start,row_count],其中offset_start表示顯示的起始偏移量,默認為0,row_count表示顯示記錄的個數
例(查詢Student表中全部學生記錄并從第2個學生記錄開始顯示2條信息)
5)聚合
聚合,簡單來說就是SQL內置提供的一些常用記錄數據匯總統計方法,在查詢時可以根據需求直接調用。
基本語法:
SELECT [field1,field2,...,fieldn] fun_name
FROM tabename
[WHERE CONDITION]
[GROUP BY field1,field2,...,fieldn]
[WITH ROLLUP]
[HAVING CONDITION];
其中,fun_name代表相應的聚合函數,如count(*)個數統計、max最大值、min最小值、avg平均值以及sum求和等;GROUP BY 表示按照表中屬性字段進行分類;WITH ROLLUP 表示是否對分類聚合后在進行匯總;HAVING 表示分類聚合后再進行條件篩選。建議對查詢先WHERE篩選再HAVING篩選,這樣可以減少聚合開銷,使得查詢效率更高。
例1(統計Student表中各個系的人數)
例2(統計Student表中除開‘IS’系以外每個系的人數并匯總人數)
例3(統計Student表中系人數大于1的系的學生人數)
6)表連接
為將兩個及以上的表的信息同時顯示,SQL中提供了表連接操作。表連接可以分為內連接和外連接,其中內連接僅會顯示出匹配對應上的記錄信息,而外連接則還會同時顯示未完全匹配上的記錄信息。連接操作都是通過多表中的某一共同關聯因素來連接的,如學生表中Sno和選修表中Sno則為對應匹配關聯因素,二者可以借此連接起來。因內連接較為常用,故此僅演示內連接操作。
Course(課程)表:
SC(選修)表:
例(查詢學生選修成績信息)
7)子查詢
在查詢中,有時候可能會需要在一次查詢的基礎上再次查詢,這時候前一次查詢(或下層查詢)稱為子查詢或內層查詢,而后一次查詢(或上層查詢)稱為父查詢或外層查詢,用于子查詢的關鍵字有IN,NOT IN,EXISTS,NOT EXISTS。其中(NOT) IN 相當于集合中的存在或包含于的關系,用來檢索父查詢中記錄是否存在于子查詢返回的記錄中,而帶有(NOT) EXISTS 的子查詢不返回任何數據,它只會產生邏輯真(true)或假(false)
例1(查詢與‘Lisa’在同一個系學習的學生信息,即第一步查詢‘Lisa’所在的系,第二步查詢該系的所有學生信息)
例2.1(查詢所有選修了1號課程的學生姓名)
例2.2(使用EXISTS查詢與‘Lisa’在同一個系學習的學生信息)
8)記錄聯合
由于在查詢時返回的結果是一些記錄的集合,所以可以對多個查詢語句結果進行集合操作,SQL中主要的操作有并(UNION)、交(INTERSECT)和差(EXCEPT)。這里需要注意的是,各查詢的參與對象類型必須是相同的,查詢結果列數也必須是相同的。但是,在MySQL中只保留了并操作,后兩種功能的實現都用其他操作替換了。SQL中提供了UNION和UNION ALL兩種操作,兩者的區別在于UNION中包含了DISTINCT操作,即去除了重復的記錄結果,而UNION ALL則會顯示全部記錄
例(查詢’MA’系的學生及年齡不大于19歲的學生,即’MA’系學生集合與年齡不大于19歲學生集合的并集)
SQL語句第三個類別——DCL 語句
DCL是數據控制語言的縮寫,主要是DBA管理系統對象的使用權限時用的,主要包括權限的授予和回收。由于一般開發人員很少使用該語句,這里僅淺顯地進行介紹
1.權限授予
基本語法:
GRANT privilege[, privilege]…
ON object_type Object_name[,object_type Object_name]...
TO user[,user]...
[WITH GRANT OPTION];
其中privilege代表要授予的權限名,object_type Object_name表示權限作用的對象類型和名稱,user表示授予權限的用戶,WITH GRANT OPTION表示該授予權限的用戶是否能繼續向其他用戶進行此權限的授予
例1(把查詢Student表的權限授予給用戶U1)
例2(把查詢Student表和修改學號的權限授予給用戶U2,同時U2可以繼續授權給其他用戶)
2.權限收回
基本語法:
REVOKE privilege[, privilege]…
ON object_type Object_name[,object_type Object_name]...
FROM user[,user]...[CASCADE|RESTRICT];
其語法含義與GRANT語法大體一致,后面的CASCADE|RESTRICT代表一個回收級聯約束條件,CASCADE表示回收該用戶權限時也將該用戶授權下的其他用戶權限進行回收,而RESTRICT表示若該用戶下有授權其他用戶權限,則拒絕回收該用戶的權限
例(回收用戶U2的修改學號的權限)
?
小結
本次SQL基礎使用入門(二)主要介紹了SQL語句的后兩個分類——DML和DCL,其中著重講解并演示了數據操作語言的基本使用語法,對DCL中權限授權與回收兩大操作做了淺顯簡單的介紹。
轉載于:https://www.cnblogs.com/Unikfox/p/9160684.html
總結
以上是生活随笔為你收集整理的SQL基础使用入门(二): DML语句和DCL语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取 POST请求的数据
- 下一篇: 小程序获取form_id 与 小程序获取