數據查詢
1. 查詢語句的基本結構
select子句 和 from子句 是不可缺少的 其他子句都是可選的
2. 單表查詢
1. 選擇表中若干列
2. 選擇表中若干元組
注意: sname 列 定義的是 非Unicode定長,即char(10) ,因此可以分配10個字節的空間,不足的部分用空格補齊。即對'王敏'實際存儲的是'王敏'后邊加6個空格---稱為尾隨空格。
在進行like 字符串匹配的時候,系統並不會自動去掉尾隨空格,空格是一個字符,也滿足_通配符,因此會出現二個字的情況
其功能是去掉指定列中尾隨的空格,返回沒有尾隨空格的數據。例如,將例子中的語句改為:
sleelct Sname from Student where RTRIM(Sname) like '王__'
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子句
3) 使用having 語句
主要用於對分組后的結果進行篩選,作用於組而不是單個記錄 having一般與group by 一起使用
意思是having 條件多了費資源 where好點 不能無腦having
第二種寫法比第一種寫法執行效率高,因為where子句在group by 子句之前執行,因此參與的分組的數據較少。
6 多表連接查詢
1. 內連接
注意:當表取了別名后,在其他用到表名的地方都要用到別名,而不能再使用原表名
2. 自連接
要去掉可以模仿例48 ---- and C1.Cname !='數據結構'
3. 外連接
注意:左外連接的含義是 限制表2中的數據必須滿足條件,而不管表1中的數據是否滿足連接條件,均輸出表1中的內容
右外連接的含義是 限制表1中的數據必須滿足條件,而不管表2中的數據是否滿足連接條件,均輸出表2中的內容
圖中圈起來的二個學生,明明沒選課,他們不滿足連接條件,但是是左連接student表可以不用滿足條件,全列出來
7 使用TOP限制結果集
在查詢時候,有時候只希望列出結果集中的前幾行結果,而不是全部結果,比如競賽的成績前三名
如果有 distinct的話 ,則在distinct之后,查詢列表的前面select distinct top 3 數據
8 子查詢
還記得上面講到where后面不能跟計算函數SUM COUNT 等的問題嗎?可以使用()子查詢來實現
由此也可以看到,同一個查詢可以用不同的方式來實現。總體來說,多表連接查詢的效率比子查詢的效率要高(因為查詢優化器可以對多表連接查詢進行更多的優化)。