答案為B
其實從語法就可以排除的:where字句中不能出現聚合函數所以AD排除;出現group by字句,則select字句中查詢的列要麼分組要麼聚合,C選項中姓名列既沒分組也沒在聚合函數中。
下面說說思路:
想要查詢只選修1門課的學生,可以先查出每個學生選了多少門課(按學生分組group by),然後挑選出選課數為1的(對分組後得到的結果進行篩選,having)
如果還有問題請追問。
② 資料庫中SQL數據題目
1:select *職工號 from 工作關系 where "公司號=C2" AND "公司號=C5"
2:UPDATE 工作關系
SET工資 = 工資 * 1.05
WHERE公司號IN
(SELECT公司號
FROM 公司關系
WHERE公司名 =『聯華公司』
還有一題啊》??給我加分哦。
3、SELECT 作者名,書名,出版社
FROM 圖書,作者
WHERE 圖書 . 作者編號 = 作者 . 作者編號
AND 年齡 < = (SELECT AVG (年齡)
FROM 作者)
同學,這些是資料庫裡面的最基本知識。你只要用心去學習就肯定會的。SQL語句裡面也就SELECT,INSERT,DELETE,UPDATE等基本語句的
③ 資料庫概論SQL題
此題應該是建表和插入數據的經典題目
1. 先建立表(Sno代表學號,sname代表姓名,ssex代表性別,sage代表年齡,sdept代表所在系,cno代表課號,cname代表課程名稱,cpno代表先修課號,ccredit代表學分,grade代表成績)
createtablestudent
(snochar(5),
snamevarchar(10)notnull,
ssexchar(2),
sagesmallintconstraintDF_student_sagedefault(20),
sdeptvarchar(20),
constraintPK_student_snoprimarykey(sno),
constraintCK_student_sagecheck(sage>0));
createtablecourse
(cnochar(2),
cnamevarchar(20)notnullconstraintUQ_course_cnameunique,
cpnochar(2),
ccreditsmallintconstraintDF_course_ccreditdefault(2),
constraintPK_course_cnoprimarykey(cno),
constraintCK_course_ccreditcheck(ccredit>0),
constraintFK_course_cpnoforeignkey(cpno)referencescourse(cno));
createtablesc
(snochar(5),
cnochar(2),
gradeint,
constraintPK_sc_sno_cnoprimarykey(sno,cno),
constraintFK_sc_snoforeignkey(sno)referencesstudent(sno),
constraintFK_sc_cnoforeignkey(cno)referencescourse(cno),
constraintCK_sc_cnocheck(grade>0));
2. 將記錄插入到表中
insertintostudent(sno,sname,ssex,sage,sdept)values('95001','李勇','男',20,'CS');
insertintostudent(sno,sname,ssex,sage,sdept)values('95002','劉晨','女',19,'IS');
insertintostudent(sno,sname,ssex,sage,sdept)values('95003','王敏','女',18,'MA');
只要會建表語句和插入語句即可
CREATETABLE<表名>
(<列名><數據類型>[notnull][[constraint約束名]default(預設值)][[constraint約束名]unique]
[,其他列的定義]…
[,[constraint約束名]primarykey(列名[,列名]…)]
[,[constraint約束名]foreignkey(列名[,列名]…)references表名(列名[,列名]…)]
[,[constraint約束名]check(條件)]);
INSERT[INTO]<表名>[(<列名>[,<列名>…])]VALUES(<表達式>[,<表達式>…]);
④ 經典的SQL面試題目,百度有答案,誰有更簡潔的
select a.id,a.proid as pro1,b.proid as pro2 from (select * from tablename where proid =1) a,(select * from tablename where proid =2) b where a.id=b.id
⑤ 急求 請速度點 關於sql資料庫的題目
createtablestu
(
Snovarchar(30)primarykey,
Snamevarchar(30),
Ssexchar(10),
Sageint,
Sdeptvarchar(30),
addressvarchar(30),
borndatevarchar(30)
)
insertintostuvalues('110','王二','男',22,'計算機系','廣州市天河區','1992-01-01')
insertintostuvalues('111','李四','男',22,'計算機系','廣州市橋東區','1992-01-01')
insertintostuvalues('112','李小林','女',22,'計算機系','廣州市橋東區','1992-01-01')
insertintostuvalues('113','溫月','男',22,'計算機系','廣州市天河區','1992-01-01')
insertintostuvalues('114','李德華','男',22,'計算機系','廣州市天河區','')
createtableCourse
(
Cnovarchar(10)primarykey,
Cnamevarchar(20)UNIQUE,
Tnamevarchar(20)
)
insertintoCoursevalues('C01','SQL2008資料庫','王文海')
insertintoCoursevalues('C02','JAVA編程','柳大華')
insertintoCoursevalues('C03','安卓開發','胡玉玉')
createtablexk
(
Snovarchar(30),
Cnovarchar(10),
GradeFloat
)
insertintoxkvalues('110','C01',88)
insertintoxkvalues('111','C02',55)
insertintoxkvalues('112','C03',78)
insertintoxkvalues('113','C01',89)
insertintoxkvalues('114','C02',65)
insertintoxkvalues('110','C02',85)
insertintoxkvalues('111','C03',77)
insertintoxkvalues('112','C02',59)
insertintoxkvalues('113','C03',99)
insertintoxkvalues('114','C01',84)
--(1)
SELECT*FROMSTUWHERESnameLIKE'李%'
--(2)
SELECTCOUNT(SNO)FROMxkWHEREGrade<60
--(3)
SELECT*FROMstuWHEREborndate=''
--(4)
SELECTS.SNAME,S.Sdept,X.GradeFROMSTUS,xkXWHERES.Sno=X.SnoAND80<=X.GradeandX.Grade<=100
--(5)自己信息按照下面自己改下就可
insertintostuvalues('115','肖玉玉','女',22,'計算機系','廣州市天河區','1992-01-01')
--(6)
SELECT*FROMstuWHEREaddressNOTLIKE'%橋東區%'ANDSsex='男'
--(7)
SELECTAVG(Grade)FROMxkWHERECno='C01'
--(8)
SELECTCNAME,GradeFROMCourse,xkWHERECourse.Cno=xk.CnoANDxk.Sno=(SELECTSnofromstuWHERESNAME='溫月')
--(9)
updateCoursesetTname='李文海'whereTname='王文海'
--(10)
SELECT*INTO女生表FROMstuWHERESsex='女'
--(11)
CREATENONCLUSTEREDINDEXIX_name
ONSTU(SNAME)
WITHFILLFACTOR=75
GO
--(12)
createviewV_xs
as
SELECTS.SNO,S.SNAME,S.Sdept,X.Cno,X.GradeFROMstuS,xkXWHERES.SNO=X.SNOANDS.Ssex='女'ands.Snamelike'王%';
--(13)
BEGIN
WAITFORDELAY'00:05';
select*fromV_xs;
END;
--(14)
createtriggercfq_kc
onstu
fordelete
as
begin
DELETEXKwhereSno=(selectSNOfromdeleted)
end
--(15)
createprocereproc_cj
@cnamevarchar(20)
as
BEGIN
declare@sqlvarchar(1000)
selectTOP2s.SNO,S.SNAME,S.Sdept,@cname,X.GradefromstuS,XKXwhereS.Sno=X.SnoANDX.Cno=(SELECTCnoFROMCourseWHERECname=@cname)ORDERBYX.Grade
END
executeproc_cj'JAVA編程'
已測,這些題都很簡單的,另外我用的資料庫是SQL2008,如果樓主用的是其他資料庫的話就可能要改一些了,自己多多努力一下並不是很難,實現的過程是非常有趣的。
⑥ 關於資料庫SQL的一些題目
⑦ SQL的題目,最基礎的~等~~
1. 從職工關系中檢索所有工資值。
答:select 工資 from 職工表
2. 檢索倉庫關系中的所有記錄
答:select * from 倉庫表
3. 檢索工資多於1230元的職工號
答:select 職工號 from 職工表 where 工資>1230
4.檢索哪些倉庫有工資多於1210元的職工。
答:select distinct 倉庫號 from 職工表 where 工資>1210
5. 給出在倉庫「wh1」或「wh2」工作,並且工資少於1250元的職工號。
答:select 職工號 from 職工表 where 工資<1250 ;
and (倉庫號="wh1" or 倉庫號="wh2")
注意:邏輯運算符的優先順序從高到低依次為not、and、or。運算符的優先順序:括弧 算術運算 關系運算 邏輯運算.
說明:前面的幾個例子在from之後只指定了一張表,也就是說這些檢索只基於一張表。如果有where子句,系統首先根據指定的條件依次檢驗關系中的每條記錄,然後選出滿足條件的記錄(相當於關系的選擇操作),並顯示select子句中指定屬性的值(相當於關系的投影操作)。
6. 找出工資多於1230元的職工號和他們所在的城市。
答:select 職工表.職工號, 倉庫表.城市 from 職工表,倉庫表 ;
where 職工表.倉庫號=倉庫表.倉庫號 and 工資>1230
7. 找出工作在面積大於400的倉庫的職工號以及這些職工工作所在的城市。
答:select 職工表.職工號, 倉庫表.城市, 倉庫表.面積 ;
from 職工表,倉庫表 where 職工表.倉庫號=倉庫表.倉庫號 ;
and 倉庫表.面積>400
說明:以上兩題為簡單的聯接查詢.
8. 哪些城市至少有一個倉庫的職工工資為1250元
答:
方法一:
Select 倉庫表.城市 from 職工表,倉庫表 where 職工表.倉庫號=倉庫表.倉庫號 and 職工表.工資=1250
方法二:
select 倉庫號 from 職工表 where 工資=1250 into dbf abc.dbf
select 倉庫表.城市 from 倉庫表,abc where 倉庫表.倉庫號=abc.倉庫號
方法三:
select 城市 from 倉庫表 where 倉庫號 in (select 倉庫號 from 職工表 where 工資=1250)
說明: 這屬於嵌套查詢. 這類查詢所要求的結果出自一個關系,但相關的條件卻涉及多個關系.
可以看到,方法三的命令中含有兩個select-from-where查詢塊,即內層查詢塊和外層查詢塊,內層查詢塊檢索到的倉庫值是wh1和wh2,這樣就可以寫出等價命令:
select 城市 from 倉庫表 where 倉庫號 in ("wh1","wh2")
或者
select 城市 from 倉庫表 where 倉庫號="wh1" or 倉庫號="wh2"
9. 查詢所有職工的工資都多於1210元的倉庫的信息。
答:
方法一:
select 倉庫號,min(工資) as 工資 from 職工表 group by 倉庫號 into dbf 倉庫min工資.dbf
select 倉庫表.* from 倉庫表,倉庫min工資 where 倉庫表.倉庫號=倉庫min工資.倉庫號 and 倉庫min工資.工資>1210
方法二:
select * from 倉庫表 where 倉庫表.倉庫號 not in (select 倉庫號 from 職工表 where 工資<=1210 ) and 倉庫表.倉庫號 in (select 倉庫號 from 職工表)
(錯誤方法)
select * from 倉庫表 where 倉庫表.倉庫號 not in (select 倉庫號 from 職工表 where 工資<=1210 )
注意:上述檢索結果錯誤,會將沒有職工的倉庫檢索出來.如果要求排除那些還沒有職工的倉庫,檢索要求可以敘述為:檢索所有職工的工資都大於1210元的倉庫的信息,並且該倉庫至少要有一名職工.
(錯誤方法)
select * from 倉庫表 where 倉庫表.倉庫號 in (select 倉庫號 from 職工表 where 工資>1210 )
注意:上述查詢結果錯誤。它會查出倉庫號為wh1的信息,但wh1的職工工資並不都大於1210。
10. 找出和職工e4掙同樣工資的所有職工。
答: Select 職工號 from 職工表 where 工資 in (select 工資 from 職工表 where 職工號="e4")
說明:7、9、10題都是基於多個關系的查詢,這類查詢所要求的結果出自一個關系,但相關的條件卻涉及多個關系.我們稱之為嵌套查詢。嵌套查詢優選含有兩個select-from-where查詢塊的查詢結構。
11. 檢索出工資在1220元到1240元范圍內的職工信息。
答:select * from 職工表 where 工資 between 1220 and 1240
說明: "工資 between 1220 and 1240"等價於"工資>=1220 and 工資<=1240"
如果要求查詢工資不在1220元到1240元范圍內的職工信息
說明: select * from 職工表 where 工資 not between 1220 and 1240
12. 從供應商關系中檢索出全部公司的信息,不要工廠或其他供應商的信息。
Select * from 供應商表 where "公司" $ 供應商名
13. 找出不在北京的全部供應商信息。
Select * from 供應商表 where 地址!="北京"
或者
Select * from 供應商表 where not(地址="北京")
14. 按職工的工資值升序檢索出全部職工信息。
答:select * from 職工表 order by 工資
如果需要將結果按降序排列,只要加上desc
select * from 職工表 order by 工資 desc
說明:使用SQL SELECT可以將查詢結果排序,排序的短語是order by ,具體格式如下:
order by order_item [ASC|DESC] [,order_item [ASC|DESC]……]
15. 先按倉庫號排序,再按工資排序並輸出全部職工信息。
答:Select * from 職工表 order by 倉庫號,工資
16. 找出供應商所在地的數目。
答:select count(distinct 地址) from 供應商表
注意:除非對表中的記錄數進行計數,一般count函數應該使用distinct
比如: select count(*) from 供應商表
查詢結果是供應商表中的記錄數.
說明:可用於計算檢索的函數有:count——計數 sum——求和
avg——計算平均值 max——求最大值 min——求最小值
17. 求支付的工資總數
答:select sum(工資) from 職工表
18. 求北京和上海的倉庫職工的工資總和
答: select sum(工資) from 職工表,倉庫表 where 職工表.倉庫號=倉庫表.倉庫號 and (城市="北京" or 城市="上海")
方法二:
select sum(工資) from 職工表 where 倉庫號 in (select 倉庫號 from 倉庫表 where 城市="北京" or 城市="上海")
19. 求所有職工的工資都多於1210元的倉庫的平均面積
答:Select avg(面積) from 倉庫表 where 倉庫號 not in(select 倉庫號 from 職工表 where 工資<=1210) and 倉庫號 in(select 倉庫號 from 職工表)
20. 求在wh2倉庫工作的職工的最高工資值
答:select max(工資) from 職工表 where 倉庫號="wh2"
21. 求每個倉庫的職工的平均工資
答:select 倉庫號,avg(工資) from 職工表 group by 倉庫號
說明:可以利用group by 子句進行分組計算查詢.group by短語的格式如下:group by groupcolumn[,groupcolumn……][having filtercondition]
可以按一列或多列分組,還可以用having 進一步限定分組的條件.
注意:where /group by等子句都不能放在from子句之前.
22. 求至少有兩個職工的每個倉庫的平均工資。
答: select 倉庫號,count(*),avg(工資) from 職工表 group by 倉庫號 having count(*)>=2
說明:having子句總是跟在group by 子句之後,不可以單獨使用.having子句用於限定分組.
23. 找出尚未確定供應商的訂購單
答:select * from 訂購單表 where 供應商號 is null
24. 列出已經確定了供應商的訂購單信息
答:select * from 訂購單表 where 供應商號 is not null
⑧ 跪求幾個SQL題目 十萬火急!!!!
1:1)檢索出版社編號為「CS」得圖書編號 書名和定價
select 圖書編號,書名,定價
from 圖書
whrer 出版社編號='CS'
2)查詢圖書分類為「教材」的書名 定價和出版社名稱
select 書名,定價,出版社名稱
from 圖書,出版社
where 圖書.出版社編號=出版社.出版社編號 and 圖書分類='教材'
3)按照出版社編號統計每個出版社出版的圖書有多少種和平均價格
select count(圖書分類) '圖書種類',avg(定價) '平均價格'
from 圖書
group by 出版社編號
4)檢索由高等教育出版社出版 圖書分類為「教材」且定價超過30元的圖書編號和書名
select 圖書編號,書名
from 圖書,出版社
where 圖書分類='教材' and 定價>30 and 出版社名稱=』高等教育』
and 圖書.出版社編號=出版社.出版社編號
2:1)檢索所有定價超過20元的書名
select 書名
from 圖書
where 定價>20
2)統計每個出版社圖書的平均定價
select avg(定價) '平均定價'
from 圖書
group by 出版社編號
3)將科學出版社的所有圖書定價下調5%
update 圖書
set 定價=定價*0.05
from 圖書,出版社
where 圖書.出版社編號=出版社.出版社編號
and 出版社名稱='科學出版社'
4)列出所有圖書的書名 第一作者姓名 出版社名稱
select 書名,姓名,出版社名稱
from 圖書,作者,出版社,著書
where 圖書.圖書編號=著書.圖書編號 and 圖書.出版社編號=出版社.出版社編號
and 作者.作者編號=著書.作者編號 and 作者排序=1
3:1)統計男生人數
select count(*) '男生人數'
from 學生表
where 性別='男'
2)檢索教師「LRU」所授課程的課程號和課程名
select 課程號,課程名
from 學習
where 教師='LRU'
(至於第三題的(3)和(4)小題,由於沒有第三個關系模式,我也不知道是什麼,但格式一定和第一題第(3)小題格式一樣,而第(4)小題,則用嵌套查詢要好一些)呵呵,至於正確與否,還要你親自試驗一下喲,哈哈……