數(shù)據(jù)庫原理與應用(6)查詢語句、模糊查詢、聚合函數(shù)、分組查詢、結果排序、結果篩選
【查詢基礎和語句】
在查詢分析器中,查詢的顯示結果也可以保存,并且擴展名為.SQL。
查詢窗口的編輯器窗口是一個文本編輯器,可以在這里輸入SQL語句,執(zhí)行返回的結果集顯示在結果窗口中。
空值不同于空字符串或數(shù)值零,通常表示未填寫、未知(Unknow)、不可用或將在以后添加的數(shù)據(jù)。
select * from books LIMIT 10語句中的LIMIT 10表示連續(xù)的10條,也就是1-10條。
關于where語句的null,可以寫成以下三種形式:
SQL語句中,“AGE IN (10,20)”的語義是AGE=10 OR AGE =20。
SQL語句通常被稱為結構化查詢語言。
SQL的查詢語句中,重命名目標列的方式包括在重命名對象后用as表示出新的名稱、在重命名對象后空格加新的名稱、在重命名對象前用等號表示且等號前為新的名稱。下面舉一個例子。
SQL語言中,SELECT語句的執(zhí)行結果是表。
SQL語言中,條件“年齡betWEEN 20 AND 30”表示年齡在20至30之間,包括20歲和30歲。
數(shù)據(jù)操縱語句(DML)的基本操作是插入、修改、查找。
數(shù)據(jù)操縱語句(DML)的對應指令有insert、update、delete。
SQL的比較運算符有<= / <> / !=,其中!=和<>語義相同,均表示不等于。
關系模型的數(shù)據(jù)操縱即是建立在關系上的數(shù)據(jù)操縱,一般有 刪除、添加、查詢和修改四種操作。
數(shù)據(jù)庫對象包括表、索引、視圖、圖表、缺省值、規(guī)則、觸發(fā)器、用戶、函數(shù),不包括select語句。
【例】
(1)中途誤用分號,下面的代碼中間不可以用分號,分號只出現(xiàn)在語句結尾,表示結束。正確的改法是將中間的分號改為英文狀態(tài)下的逗號,在語句結尾處添加一個英文狀態(tài)的分號。
錯誤語句:
正確語句:
(2)from后未接表名。正確改法是from后跟上表的名字,再在結尾加分號。
錯誤語句:
正確語句:
(3)where語句中使用了聚集函數(shù)。正確改法是將聚集函數(shù)寫在having語句中,having語句跟在group by語句后。
錯誤語句:
正確語句:
順序為select……from……where……group by……h(huán)aving……order by……asc/desc。

【模糊查詢、條件查詢】
如果想要查詢結果中不顯示重復的數(shù)據(jù),可以使用DISTINCT關鍵字,distinct關鍵字的作用是僅篩選不重復的數(shù)據(jù)。
在stu表中查詢所有姓名中有“嘉”的學生,在WHERE子句中應使用LIKE '% 嘉 % '通配符進行查詢。
*關于SQL中的通配符:SQL語言的通配符必須和like連用。%表示零或多個數(shù)量不確定的字符,_僅表示一個字符,[charlist]表示字符串中的任意單一字符,[^charlist]或[!charlist]表示不在字符串中的任意單一字符。
【例1】已知關系student (sno,sname,age,gender,place), 查詢姓名中含有”小”字的同學姓名,年齡的SQL語句,正確的是Select sname 姓名, age 年齡 From student Where sname like '%小%';

【聚合函數(shù)、分組查詢、結果排序、結果篩選】
SELECT語句中的ORDER BY子句中,如果有多個排序標準,它們之間用逗號分隔,查詢結果與排序標準的先后順序無關。
ORDER BY子句僅對檢索數(shù)據(jù)的顯示有影響,并不改變表中行的內容順序。
SQL語句中,聚合函數(shù)COUNT(列名) 的功能是對一列中的非空值計算個數(shù)。
聚合函數(shù)中不忽略空值(NULL)的是count(*)。
在SQL語言的SELECT語句中,用于對查詢結果元組進行排序的是order by子句。
關于select count(*) 和 select count(column)的區(qū)別,count(*)對行的所有數(shù)目進行計算,包含NULL值的行;count(column)對特定的列的值具有的行數(shù)進行計算,不包含NULL值的行。
count (column) 對特定的列的值具有的行數(shù)進行計算,不包含NULL值。 count (1) 這個用法和 count (*) 的結果是一樣的。
WHERE子句中可以使用的查詢條件有許多,其中用于確定范圍的操作符有between and和not between and。
在要排序的列表后使用order by語句,通過asc指明為升序,desc指明為降序,忽略則默認為升序,order by語句在where語句之后。
除count(*)函數(shù)外,其他聚合函數(shù)均忽略空值。
聚合函數(shù)出現(xiàn)在select之后,不可以出現(xiàn)在where子句中。
在沒有使用group by子句分組的情況下,聚合函數(shù)作用于整張表中滿足where條件的所有記錄,在查詢結果中一個聚合函數(shù)只返回單一的值。
SELECT語句中的條件可以用WHERE或HAVING引出,但HAVING必須在GROUP BY之后使用。
now()函數(shù)返回當前的日期和時間。
【例】購買時間字段是btime,商品編號字段是gno,統(tǒng)計2020年之前被購買次數(shù)超過2次的商品,顯示商品編號和購買次數(shù),對應的SQL語句是:
SELECT 語句的完整語法較復雜,F(xiàn)ROM,表示來自于哪些表;WHERE,表示篩選的條件;ORDER BY ,表示根據(jù)哪些列排序;HAVING,表示分組后篩選的條件。
group by可以和聚集函數(shù)連用,但不可以用來過濾數(shù)據(jù)。
聚合函數(shù)介紹(所有聚合函數(shù)均可以添加distinct關鍵字以實現(xiàn)去除重復值的效果)
(1)count(*)返回行數(shù)。
(2)count(<列名>) 返回指定列中非NULL值個數(shù)。
(3)sum(<列名>) 返回指定列中非NULL值的和。
(4)avg(<列名>) 返回指定列中非NULL值的平均值。
(5)max(<列名>) 返回指定列中非NULL值的最大值。
(6)min(<列名>) 返回指定列中非NULL值的最小值。