SQL --數據查詢功能 數據更改功能


數據查詢

 

1. 查詢語句的基本結構

 

select子句 和 from子句 是不可缺少的 其他子句都是可選的

 

2. 單表查詢

1. 選擇表中若干列

(1) 查詢指定的列

 

(2) 查詢全部列

 

(3) 查詢經過計算的列

 

(4) 常量列

' '代表常量

(5) 添加列名 為列起別名 -- 列別名 AS

 

AS可以省略

 

2. 選擇表中若干元組

(1) 消除取值相同的行 distinct

 

 

(2) 查詢滿足條件的元組

常用where子句實現,where從查詢條件如下:

 

1)比較大小

 

2)確定范圍

 

 

3)確定集合

 

 

 

4)字符串匹配

 

 

 

 

 

注意: sname 列 定義的是 非Unicode定長,即char(10) ,因此可以分配10個字節的空間,不足的部分用空格補齊。即對'王敏'實際存儲的是'王敏'后邊加6個空格---稱為尾隨空格。

在進行like 字符串匹配的時候,系統並不會自動去掉尾隨空格,空格是一個字符,也滿足_通配符,因此會出現二個字的情況

解決方法:可以使用函數 RTRIM

RTRIM(列名)

其功能是去掉指定列中尾隨的空格,返回沒有尾隨空格的數據。例如,將例子中的語句改為:

sleelct Sname from Student where RTRIM(Sname) like '王__'

 

5)判斷空值 是否為空

 

 

6)多重條件的查詢 AND OR

 

 

 

 

上面那個

 

這里要用括號的原因是AND 的優先級高於 OR

 

3. 排序 ORDER BY ---ASC DESC

 

 

 

4. 使用計算函數匯總數據

 

 

例如:查詢年齡最大的學生姓名,如下的寫法是錯誤的

SELECT Sname FROM Student WHERE Sage =MAX(Sage)

正確的寫法為后面的 子查詢:SELECT Sname FROM Student where Sage=(select MAX(Sage) from Student)

 

5. 對查詢結果進行分組統計 GROUP BY

1) 使用group by 語句

 

 

 

 

2) 使用where子句

where子句的優先級比group by 高

 

 

多列分組

 

3) 使用having 語句

主要用於對分組后的結果進行篩選,作用於組而不是單個記錄 having一般與group by 一起使用

 

 

 

 

 

 

 

意思是having 條件多了費資源 where好點 不能無腦having

 

 

 

第二種寫法比第一種寫法執行效率高,因為where子句在group by 子句之前執行,因此參與的分組的數據較少。

 

6 多表連接查詢

1. 內連接

 

 

 

就是把表之間連接起來

 

 

但是為啥會有二個重復的列, Sno

如何去掉重復的sno

 

 

 

再舉個例子:

 

這里用表 別名

 

注意:當表取了別名后,在其他用到表名的地方都要用到別名,而不能再使用原表名

例如上面的S.Sno

 

涉及多張表的:

 

 

 

有分組 group by 的多表查詢

 

 

 

有分組 group by,有where選擇條件 的多表查詢

 

 

2. 自連接

從意思上來看就是自己表連接自己,但在邏輯上看作二張表

注意實現方式:必須為表取別名

 

 

 

 

 

這里沒有去掉數據結構這個數據

要去掉可以模仿例48 ---- and C1.Cname !='數據結構'

 

3. 外連接

 

注意:左外連接的含義是 限制表2中的數據必須滿足條件,而不管表1中的數據是否滿足連接條件,均輸出表1中的內容

右外連接的含義是 限制表1中的數據必須滿足條件,而不管表2中的數據是否滿足連接條件,均輸出表2中的內容

 

 

 

圖中圈起來的二個學生,明明沒選課,他們不滿足連接條件,但是是左連接student表可以不用滿足條件,全列出來

這樣就可以看出來誰選課了,誰沒選課

 

 

 

7 使用TOP限制結果集

在查詢時候,有時候只希望列出結果集中的前幾行結果,而不是全部結果,比如競賽的成績前三名

 

select top

如果有 distinct的話 ,則在distinct之后,查詢列表的前面select distinct top 3 數據

一般要排序后才知道數據順序

 

如果有並列的話

 

 

 

 

8 子查詢

還記得上面講到where后面不能跟計算函數SUM COUNT 等的問題嗎?可以使用()子查詢來實現

 

  1. 使用子查詢進行基於集合的測試

 

 

舉個例子

 

 

 

 

 

 

 

也可以通過上回學的自連接查詢

 

一般都可以使用多表查詢代替,但是查詢需要分步的時候不許替代

 

 

 

 

 

  1. 使用子查詢進行比較測試

 

 

 

 

  1. 使用子查詢進行存在性測試

 

 

 

 

 

 

 

上面的查詢語句可以換成

 

由此也可以看到,同一個查詢可以用不同的方式來實現。總體來說,多表連接查詢的效率比子查詢的效率要高(因為查詢優化器可以對多表連接查詢進行更多的優化)。

 

下面在舉一個例子總結下:

 

 

 

 

 

 

 

 

 

數據更改

增刪改

INSERT DELETE UPDATE

 

插入數據

 

 

 

更新數據

 

無條件更新

 

有條件更新

 

 

刪除數據

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM