使用sql語句進行分組檢索時
① 資料庫SQ習題
最佳答案:
習題
一、選擇題
1.關於查詢語句中ORDER BY子句使用正確的是( D )。
A.如果未指定排序欄位,則默認按遞增排序
B.表的欄位都可用於排序
C.如果在SELECT子句中使用了DISTINCT關鍵字,則排序欄位必須出現在查詢結果中
D.聯合查詢不允許使用ORDER BY子句
第2~4題使用7.7節「示例分析」中數據表。
2.使用查詢語句:
SELECT STUDENT.學號,STUDENT.姓名,SUM(分數)
FROM STUDENT,GRADE
WHERE STUDENT.學號=GRADE.學號
GROUP BY STUDENT.學號,STUDENT.姓名
查詢結果是(A )。
A.按學號分類的每個學生所有課程成績的總分 B.按學號分類的每個學生各課程成績
C.全體學生的按各課程分類的成績總分 D.所有學生所有課程成績總分
3.使用查詢語句:
SELECT MAX(分數) AS 最高分
FROM STUDENT,curriculum,GRADE
WHERE STUDENT.學號=GRADE.學號
AND curriculum.課程編號=GRADE.課程編號
AND 課程名稱='資料庫技術及應用'
查詢的結果是( )。
A.87 B.91 C.82 D.90
很遺憾!不知道表中的記錄數據,無法判斷是哪個選項,但是題意是檢索出:選修課程'資料庫技術及應用'的學生中成績最高的。看一下表就知道了。
4.查詢選修了課程編號為「0002」的學生的學號和姓名,以下( A )語句是錯誤的。
A.
SELECT 學號,姓名FROM STUDENT
WHERE 學號=(SELECT 學號FROM GRADE WHERE 課程編號='0002')
B.
SELECT STUDENT.學號,STUDENT.姓名
FROM STUDENT,GRADE
WHERE STUDENT.學號=GRADE.學號AND 課程編號='0002'
C.
SELECT STUDENT.學號,STUDENT.姓名
FROM STUDENT JOIN GRADE ON STUDENT.學號=GRADE.學號
WHERE GRADE.課程編號='0002'
D.
SELECT 學號,姓名FROM STUDENT
WHERE 學號IN (SELECT 學號FROM GRADE WHERE 課程編號='0002')
5.下列關於查詢結果錯誤的是( D )。
A.查詢結果可以顯示在表格中
B.查詢結果可以按文本方式顯示
C.以文本和表格顯示的查詢結果在保存時,其文件格式不同
D.不管以哪種方式查看,查詢結果都會顯示在查詢結果窗口中
6.在T-sql語句中,與表達式「倉庫號NOT IN ('wh1','wh2')」功能相同的表達式是( D )。
A.倉庫號='wh1' AND 倉庫號='wh2' B.倉庫號!='wh1' OR 倉庫號# 'wh2'
C.倉庫號<>'wh1' OR 倉庫號!='wh2' D.倉庫號!='wh1' AND 倉庫號!='wh2'
7.在T-SQL 的SELECT語句中用於實現關系的選擇運算的短語是( C )。
A.FOR B.WHILE C.WHERE D.CONDITION
8.使用SQL語句進行分組檢索時,為了去掉不滿足條件的分組,應當( B )。
A.使用WHERE子句 B.在GROUP BY後面使用HAVING子句
C.先使用WHERE子句,再使用HAVING子句 D.先使用HAVING子句,再使用WHERE子句
二、填空題
1.在查詢語句中,應在__SELECT____子句中指定輸出欄位。
2.如果要使用SELECT語句返回指定條數的記錄,則應使用_TOP__關鍵字來限定輸出欄位。
3.當一個子SELECT的結果作為查詢的條件,即在一個SELECT命令的WHERE子句中出現另一個SELECT命令,這種查詢稱為__嵌套____查詢。
4.連接查詢可分為3種類型:_內連接___、__外連接__和交叉連接。
5.若要把查詢結果存放到一個新建的表中,可使用__into tabale 或into dbf____子句。
三、判斷題
1.在關系資料庫SQL Server中,用於檢索數據的語句是T-SQL的定義語言。 (× )
2.邏輯運算符(AND、NOT、OR)的運算順序是AND→OR→NOT。 ( × )
3.用於WHERE子句的查詢條件表達式可用的比較運算符為:=(等於)、!=或<>(不等於)、>(大於)、>=(大於等於)、<(小於)、<=(小於等於)。 ( √ )
4.SELECT語句的DISTINCT參數表示輸出無重復結果的記錄。 ( √ )
5.如果要使SELECT的查詢結果有序輸出,需要用GROUP BY子句配合。 ( × )
② sql語句 分組查詢 急用,在線等啊
你可以通過where條件來限制只查詢哪條記錄。
比如,我要查出nama=1的記錄,可以使用sql語句
select
*
from
table1
where
name='1'
如果我要查詢name=1或者name=2的記錄,可以使用sql語句
select
*
from
table1
where
name='1'
or
name='2'
或者
select
*
from
table1
where
name
in
('1','2')
③ SQL語句分組查詢
是SQL SERVER嗎?就是想要怎樣把查詢結果導出到文本文檔是吧?
EXEC master..xp_cmdshell 'BCP "select XLBH,CMBH,SUM(XSJE) from MDFSLSK group by XLBH,CMBH" queryout D:\XXX.TXT -c -T'
好像要在同一行才能正確執行,MDFSLSK表前可能要加上資料庫名.用戶名. 比如這樣:資料庫名.DBO.MDFSLSK
-T是使用信任連接 當然可以換成 -U"sa" -P"password",要詳細了解就查一下BCP
④ 使用SQL語句進行分組檢索時,為了去掉不滿足條件的分組,應當( )。
《資料庫系統概論》第五版p99有這樣一句話:where子句與having短語的區別在於作用對象不同
《資料庫系統概論》是2006年高等教育出版社出版的圖書,作者是王珊、薩師煊。王珊教授,是中國人民大學信息學院教授、博士生導師。中國計算機學會副理事長,中國計算機學會資料庫專委會主任,教育部第五屆科學技術委員會委員,中國科學技術協會第六屆全國委員會委員等。
資料庫系統是為適應數據處理的需要而發展起來的一種較為理想的數據處理系統,也是一個為實際可運行的存儲、維護和應用系統提供數據的軟體系統,是存儲介質 、處理對象和管理系統的集合體。數據管理員負責創建、監控和維護整個資料庫,使數據能被任何有權使用的人有效使用。資料庫管理員一般是由業務水平較高、資歷較深的人員擔任。
⑤ 使用sql語句進行分組查詢時為了去掉不滿足條件組應該
select a,sum(qty) from table where c='t' group by a having sum(qty)>10
去掉不滿足條件,用「having」
⑥ SQL中的Group By的查詢過程多列分組的查詢過程是怎樣的
Group By子句
Group By子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細信息的級別。
語法:
[ Group By [ ALL ] Group_By_expression[ ,...n ]
[ WITH { CUBE | ROLLUP } ] ]
參數說明:
ALL:包含所有組和結果集,甚至包含那些任何行都不滿足WHERE子句指定的搜索條件的組和結果集。如果指定了ALL,將對組中不滿足搜索條件的匯總列返回空值。不能用CUBE或ROLLUP運算符指定ALL。如果訪問遠程表的查詢中有WHERE子句,則不支持Group By ALL操作。
Group_By_expression:對其執行分組的表達式。Group_By_expression也稱為分組列。Group_By_expression可以是列或引用列的非聚合表達式。在選擇列表內定義的列的別名不能用於指定分組列。對於不包含CUBE或ROLLUP的Group By子句,Group_By_ expression的項數受查詢所涉及的Group By列的大小、聚合列和聚合值的限制。該限制從8060位元組的限制開始,對保存中間查詢結果所需的中間級工作表有8060位元組的限制。如果指定了CUBE或ROLLUP,則最多隻能有10個分組表達式。
CUBE:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。在結果集內返回每個可能的組和子組組合的Group By匯總行。Group By匯總行在結果中顯示為NULL,但可用來表示所有值。使用GroupING函數確定結果集內的空值是否是Group By匯總值。結果集內的匯總行數取決於Group By子句內包含的列數。Group By子句中的每個操作數(列)綁定在分組NULL下,並且分組適用於所有其他操作數(列)。由於CUBE返回每個可能的組和子組組合,因此,不論指定分組列所使用的是什麼順序,行數都相同。
ROLLUP:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。按層次結構順序,從組內的最低級別到最高級別匯總組。組的層次結構取決於指定分組列時所使用的順序。更改分組列的順序會影響在結果集內生成的行數。
使用Group By子句的注意事項。
(1)在SELECT子句的欄位列表中,除了聚集函數外,其他所出現的欄位一定要在Group By子句中有定義才行。例如「Group By A,B」,那麼「SELECT SUM(A),C」就有問題,因為C不在Group By中,但是SUM(A)是可以的。
(2)SELECT子句的欄位列表中不一定要有聚集函數,但至少要用到Group By子句列表中的一個項目。例如「Group By A,B,C」,則「SELECT A」是可以的。
(3)在SQL Server中text、ntext和image數據類型的欄位不能作為Group By子句的分組依據。
(4)Group By子句不能使用欄位別名。
1.按單列進行分組
Group By子句可以基於指定某一列的值將數據集合劃分為多個分組,同一組內所有記錄在分組屬性上具有相同值。
示例:
把「student」表按照「性別」這個單列進行分組。在查詢分析器中輸入的SQL語句如下:
use student
select 性別
from student
Group By 性別
但仍然要強調SELECT子句必須與Group By後的子句或者是分組函數列相一致。
例如,由於下列查詢中「姓名」列既不包含在Group By子句中,也不包含在分組函數中,所以是錯誤的。錯誤的SQL語句如下:
use student select 姓名,性別 from student Group By 性別
例如,在「grade」表中,按「學期」分組查詢。SQL語句如下:
use studnet select 學期 from grade Group By 學期
2.按多列進行分組
Group By子句可以基於指定多列的值將數據集合劃分為多個分組。
示例:
在「student」表中,按照「性別」和「年齡」列進行分組。在查詢分析中輸入的SQL語句如下:
use student
select 性別,年齡
from student
Group By 性別,年齡
在「student」表中,首先按照「性別」分組,然後再按照「年齡」分組。
再舉一個例子,例如,在「grade」表中,按照「學號」和「課程代號」列進行分組。SQL語句如下:
use student
select 學號,課程代號 from grade Group By 學號,課程代號
按多列進行分組時有NULL組的是如何處理的。當表按多列進行分組時有NULL組,這時NULL被作為一個特定值處理,就像其他任何值一樣。也就是說,如果在某個分組列中存在兩個NULL,則按它們有相同的值那樣處理,並將它們放在相同的組中。
示例:
在「grade」表中,按「學期」和「課程代號」列進行分組。在查詢分析器中輸入的SQL語句如下:
use student
select 學期,課程代號
from grade
Group By 學期,課程代號
3.與聚集函數一起使用
Group By子句是經常與聚集函數一起使用。如果SELECT子句中包含聚集函數,則計算每組的匯總值,當用戶指定Group By時,選擇列表中任一非聚集表達式內的所有列都應包含在Group By列表中,或者Group By表達式必須與選擇列表表達式完全匹配。
示例:
在「student」表中,分別求男女生的平均年齡。在查詢分析器中輸入的SQL語句如下:
use student
select 性別,avg(年齡) as 平均年齡
from student
Group By 性別
例如,在「student」表中,分別求有多少個男生和女生。SQL語句如下:
use student
select 性別,count(性別) as 人數 from student Group By 性別
說明:關於聚合函數的詳細講解可參閱9.2.1節。
4.與HAVING子句一起使用
HAVING子句對Group By子句選擇出來的結果進行再次篩選,最後輸出符合HAVING子句中條件的記錄。HAVING子句的語法與WHERE子句的語法相類似,惟一不同的是HAVING子句中可以包含聚合函數。
語法:
[HAVING <search_condition>]
參數說明:
<search_condition>:指定組或聚合應滿足的搜索條件。當HAVING與Group By ALL一起使用時,HAVING 子句替代ALL。
示例:
在「student」表中,按「性別」分組求平均年齡,並且查詢其平均年齡大於21的學生信息。在查詢分析器中輸入的SQL語句如下:
use student
select avg(年齡), 性別
from student
Group By 性別
having avg(年齡)>21
在「grade」表中,按「學期」分組求平均成績,並且查詢「平均成績」大於93的課程信息。在查詢分析器中輸入的SQL語句如下:
+1 已贊過
⑦ 資料庫 範式 選擇題
1對於現實世界中事物的特徵,在實體-聯系模型中使用 a
A)屬性描述 B)關鍵字描述 C)二維表格描述 D)實體描述
2把實體-聯系模型轉換為關系模型時,實體之間多對多聯系在關系模型中是通過 c
A)建立新的屬性來實現 B)建立新的關鍵字來實現
C)建立新的關系來實現 D)建立新的實體來實現
3專門的關系運算不包括下列中的 d
A)聯接運算 B)選擇運算
C)投影運算 D)交運算
4對關系S和關系R進行集合運算,結果中既包含S中元組也包含R中元組,這種集合運算稱為 a
A)並運算 B)交運算
C)差運算 D)積運算
5在資料庫設計中,將ER圖轉換成關系數據模型的過程屬於 b
A)需求分析階段 B)邏輯設計階段
C)概念設計階段 D)物理設計階段
6在概念設計階段,最常使用的數據模型是 d
A)對象模型 B)物理模型
C)邏輯模型 D)實體聯系模型
7關系R1和R2,經過關系運算得到結果是S,則S 是 b
A)一個關系 B)一個表單
C)一個資料庫 D)一個數組
8設有關系R(A,B,C,D)及其上的函數相關性集合F=,那麼關系R最高是 b
A)第一範式的 B)第二範式的
C)第三範式的 D)BCNF範式的
9設有部門和職員兩個實體,每個職員只能屬於一個部門,一個部門可以有多名職員。則部門與職員實體之間的聯系類型是 b
A)m:n B)1:m
C)m:1 D)1:1
10 使用SQL語句進行分組檢索時,為了去掉不滿足條件的分組,應當 b
A)使用WHERE子句
B)在GROUP BY後面使用HAVING 子句
C)先使用WHERE子句,再使用HAVING子句
D)先使用HAVING 子句,再使用WHERE子句
11關系表達式運算的結果是( c )。
A.數值型 B.字元型 C.邏輯型 D.日期型
12儲蓄所有多個儲戶,儲戶在多個儲蓄所存取款,儲蓄所與儲戶之間是( d )。
A.一對一的聯系 B.一對多的聯系
C.多對一的聯系 D.多對多的聯系
13在關系模型中,關系的每一個屬性值( d )。
A.不能全同 B.可以全同
C.必須全同 D.是不可分割的
14在資料庫三級模式間引入二級映象的主要作用是(a )
A.提高數據與程序的獨立性 B.提高數據與程序的安全性
C.保持數據與程序的一致性 D.提高數據與程序的可移植性
15視圖是一個「虛表」,視圖的構造基於(a )
A.基本表 B.視圖
C.基本表或視圖 D.數據字典
16SQL語言中,SELECT語句的執行結果是( a)
A.屬性 B.表 C.元組 D.資料庫
17 DB、DBMS和DBS三者之間的關系是(b )
A.DB包括DBMS和DBS B.DBS包括DB和DBMS
C.DBMS包括DB和DBS D.不能相互包括
18設有關系模式EMP(職工號,姓名,年齡,技能)。假設職工號唯一,每個職工有多項技能,則EMP表的主鍵是( a )
A.職工號 B.姓名,技能 C.技能 D.職工號,技能
19 在SQL語句中,與表達式"倉庫號 NOT IN("wh1","wh2")"功能相同的表達式是d
A)倉庫號="wh1" AND 倉庫號="wh2" B)倉庫號!="wh1" OR 倉庫號!= "wh2"
C)倉庫號="wh1" OR 倉庫號="wh2" D)倉庫號!="wh1" AND 倉庫號!="wh2"
20在SQL SELECT語句中用於實現關系的選擇運算的短語是c
A)FOR B)WHILE
C)WHERE D)CONDITION
⑧ 資料庫 選擇題
1對於現實世界中事物的特徵,在實體-聯系模型中使用 a
A)屬性描述 B)關鍵字描述 C)二維表格描述 D)實體描述
2把實體-聯系模型轉換為關系模型時,實體之間多對多聯系在關系模型中是通過 c
A)建立新的屬性來實現 B)建立新的關鍵字來實現
C)建立新的關系來實現 D)建立新的實體來實現
3專門的關系運算不包括下列中的 d
A)聯接運算 B)選擇運算
C)投影運算 D)交運算
4對關系S和關系R進行集合運算,結果中既包含S中元組也包含R中元組,這種集合運算稱為 a
A)並運算 B)交運算
C)差運算 D)積運算
5在資料庫設計中,將ER圖轉換成關系數據模型的過程屬於 b
A)需求分析階段 B)邏輯設計階段
C)概念設計階段 D)物理設計階段
6在概念設計階段,最常使用的數據模型是 d
A)對象模型 B)物理模型
C)邏輯模型 D)實體聯系模型
7關系R1和R2,經過關系運算得到結果是S,則S 是 b
A)一個關系 B)一個表單
C)一個資料庫 D)一個數組
8設有關系R(A,B,C,D)及其上的函數相關性集合F={B→A,BC→D},那麼關系R最高是 b
A)第一範式的 B)第二範式的
C)第三範式的 D)BCNF範式的
9設有部門和職員兩個實體,每個職員只能屬於一個部門,一個部門可以有多名職員。則部門與職員實體之間的聯系類型是 b
A)m:n B)1:m
C)m:1 D)1:1
10 使用SQL語句進行分組檢索時,為了去掉不滿足條件的分組,應當 b
A)使用WHERE子句
B)在GROUP BY後面使用HAVING 子句
C)先使用WHERE子句,再使用HAVING子句
D)先使用HAVING 子句,再使用WHERE子句
11關系表達式運算的結果是( c )。
A.數值型 B.字元型 C.邏輯型 D.日期型
12儲蓄所有多個儲戶,儲戶在多個儲蓄所存取款,儲蓄所與儲戶之間是( d )。
A.一對一的聯系 B.一對多的聯系
C.多對一的聯系 D.多對多的聯系
13在關系模型中,關系的每一個屬性值( d )。
A.不能全同 B.可以全同
C.必須全同 D.是不可分割的
14在資料庫三級模式間引入二級映象的主要作用是(a )
A.提高數據與程序的獨立性 B.提高數據與程序的安全性
C.保持數據與程序的一致性 D.提高數據與程序的可移植性
15視圖是一個「虛表」,視圖的構造基於(a )
A.基本表 B.視圖
C.基本表或視圖 D.數據字典
16SQL語言中,SELECT語句的執行結果是( a)
A.屬性 B.表 C.元組 D.資料庫
17 DB、DBMS和DBS三者之間的關系是(b )
A.DB包括DBMS和DBS B.DBS包括DB和DBMS
C.DBMS包括DB和DBS D.不能相互包括
18設有關系模式EMP(職工號,姓名,年齡,技能)。假設職工號唯一,每個職工有多項技能,則EMP表的主鍵是( a )
A.職工號 B.姓名,技能 C.技能 D.職工號,技能
19 在SQL語句中,與表達式"倉庫號 NOT IN("wh1","wh2")"功能相同的表達式是d
A)倉庫號="wh1" AND 倉庫號="wh2" B)倉庫號!="wh1" OR 倉庫號!= "wh2"
C)倉庫號="wh1" OR 倉庫號="wh2" D)倉庫號!="wh1" AND 倉庫號!="wh2"
20在SQL SELECT語句中用於實現關系的選擇運算的短語是c
A)FOR B)WHILE
C)WHERE D)CONDITION
⑨ 使用SQL語言的SELECT語句進行分組查詢時,如果希望去掉不滿足條件的分組,應當使用( )子句
select .... from ...
group by ....
where ...
having ...
對於能夠直接判斷的,用where就可以排除
對於使用聚和函數產生的值,需要在having中判斷例如
where 成績 > 90
having avg(成績) > 90
where 和 having 可以同時使用