答案为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)小题,则用嵌套查询要好一些)呵呵,至于正确与否,还要你亲自试验一下哟,哈哈……