设为首页 收藏本站
查看: 695|回复: 0

[经验分享] sql server操作2:查询数据库语句大全

[复制链接]

尚未签到

发表于 2015-6-29 18:12:38 | 显示全部楼层 |阅读模式
注:以下操作均建立在上篇文章sql Server操作1的数据基础之上
一、实验目的
熟悉SQL语句的基本使用方法,学习如何编写SQL语句来实现查询

二、实验内容和要求
使用SQL查询分析器查询数据,练习查询语句的使用,掌握SELECT 语句的完整结构,包括简单查询、嵌套查询、连接查询等基本实现方法。

三、实验主要仪器设备和材料
1.计算机及操作系统:PC机,Windows 2000/xp/win7;
2.数据库管理系统:SQL sever 2005/2008;

四、实验方法、步骤及结果测试
实验题目:
1、对实验一建立的数据库表进行查询
简单查询:



1 题目1、查询学生的系别,用小写字母表示。
2  SQL语句
3  select distinct LOWER(Sdept) from S;


1 题目2、查询叫“刘%”的学生学号、系别
2 SQL语句
3 select Sno Sdept from S where Sname like '刘\%' escape'\';


1 题目3、查询教师姓名第二个字是“一”的教师姓名,所教课程名。
2 SQL语句
3 select Tname,Cname from C where Tname like '_一_';


1 题目4、查询没有成绩的学生学号,学号降序排列。
2 SQL语句
3 select S.Sno from S where not exists(
4    select * from Sc where S.Sno=Sc.Sno
5 )
6 order by S.Sno desc;


1 题目5、查询选修课程的学生人数
2 SQL语句
3 select count(distinct Sno) As '学生人数' from Sc
4 --select count(*)
5 --from S
6 --where exists( select * from Sc where Sc.Sno = S.Sno )


1 题目6、各科选修课成绩及格的选修人数。
2 SQL语句
3 select count(distinct Sno)As'及格人数' from Sc where Grade>=60
4 group by Cno;


1 题目7、各学院男生人数,超过2人的输出学院名和人数,并按男生人数降序排列
2 SQL语句
3 select Ssp,count(*) from S where S.Ssex='男'
4 group by Ssp
5 having count(*)>2
6 order by count(*) desc;


1 题目8、查询IS系男女学生人数各是多少SQL语句
2 select S.Ssex As'性别',count(*) As'IS系人数' from S where S.Sdept='IS'
3 group by Ssex;


1 题目9、找出年龄>23岁,平均成绩不及格的学生学号和平均分
2 SQL语句
3 select sno,avg(grade) from SC
4 where sno in(
5 select sno from S where getdate()-sbirth>23
6 )
7 group by sno
8 having avg(grade)23
14     group by S.Sno
15   having AVG(Sc.Grade)(Select cCredit from C where Cname='计算机应用')
5 group by Cname,cCredit;


1 题目13、查询CS系中年龄比IS系所有人年龄都小的学生学号和姓名
2 SQL语句
3 use Student
4 Select Sno As'学生学号',Sname As'姓名' from S
5   where Sdept='CS' and Sbirth>(Select Max(sBirth) from S where Sdept='IS')
6 group by Sno,Sname;
7 或者:
8 use Student
9 Select Sno As'学生学号',Sname As'姓名' from S
10   where Sdept='CS' and Sbirth>all(Select sBirth from S where Sdept='IS')
11 group by Sno,Sname;


1 题目14、is系没有选修02号课程的学生学号和学生姓名
2 SQL语句
3 Select Sno As'学生学号',Sname As'学生姓名' from S
4   where S.Sdept='IS'and not exists (select * from Sc where  Sc.Sno=S.Sno and Sc.Cno=02)
5 group by Sno,Sname;


1 题目15、被全部学生都选修的课程号、课程名
2 SQL语句
3 select Cno As'课程号',Cname As'课程名' from C
4    where not exists(select * from S where not exists (select * from Sc where Sc.Sno=S.Sno and Sc.Cno=C.Cno))


1 题目16、选修了01号课又选修了02号课的学生的学号和姓名
2 实现代码及查询结果截图:
3 SQL语句
4 select S.Sno As'学生学号',S.Sname As'学生姓名' from S,Sc
5     where  Sc.Sno=S.Sno and Sc.Cno=01
6 intersect
7 select S.Sno As'学生学号',S.Sname As'学生姓名' from S,Sc
8   where  Sc.Sno=S.Sno and Sc.Cno=02;
9   或者:
10 select Sname,Sno from S
11 where Sno in(
12     select Sno from SC where cno='01' and Sno in(
13         select Sno from SC where Cno='02'))


1 题目17、被全部IS系的学生都选修的课程号和课程名
2 SQL语句
3  select Cno As'课程号',Cname As'课程名' from C
4       where not exists(select * from S where S.Sdept='IS'and not exists (select * from Sc where Sc.Sno=S.Sno and Sc.Cno=C.Cno))


1 题目18、查询选修高等数学与选修数据库的学生差集
2 SQL语句
3 select * from S
4    where  exists (select *from Sc where Sc.Sno=S.Sno and exists(select * from C where Sc.Cno=C.Cno and C.Cname='高等数学'))
5 except
6 select * from S
7    where  exists (select *from Sc where Sc.Sno=S.Sno and exists(select * from C where Sc.Cno=C.Cno and C.Cname='数据库'));
8 或者:
9 select Sno from SC,C where
10 C.Cname='高等数学' and C.Cno=SC.Cno and SC.Sno not in(
11 select Sno from SC,C where SC.Cno=C.Cno and C.Cname='数据库')
12   


1 题目19、没有选修“李一”老师开设的课程的学生学号、姓名、系别
2 SQL语句
3 select S.Sno As'学生学号',S.Sname As'学生姓名',S.Ssp As'系别' from S
4     where not exists(
5         select * from SC,C where SC.cno=C.cno and SC.sno=S.sno
6            and tname='李一')     


1 题目20、查询各选修学生最高分最低分之差大于30分的学生学号
2 SQL语句
3 select Sc.Sno As'学生学号' from Sc
4        group by Sno
5        having max(Grade)-min(Grade)>30;


五、心得总结
    1、题目4中查询没有成绩的学生学号,一开始爸它当成查询成绩为0或者说查询成绩为空的方式去查询,所以多了一条记录,但是实际上第九位学生是没有成绩的,即Sc表中无记录。
    2、题目5中,查询选修课程的学生人数,如果没有加上distinct就会导致学生人数结果为16,这是因为重复挑选的结果.
    3、题目9中,获得当前系统时间选用getdate(),并且跨越表查询要用having,不能用在where
    4、题目10中,判断过后显示其选修课号和考试成绩,这个一开始很纠结,感觉要重复读取学生信息才行,所以不知道这样合不合适。
    5、题目11中,如果没有加"S.Sno=Sc.Sno and"会出现有未选修了课程的学生学号
同时,如果没有distinct则会出现重复

六、进行连接查询时应注意哪些问题?
     1、使用连接查询时必须在from子句后指定两个或两个以上的表。
     2、使用连接查询时应在列名前加表名作为前缀但是如果不同表之间的列名不同可以不加表名作为前缀如果在不同表之间存在同名列在列名前必须加表名作为前缀否则会因为列的二义性而报错。
     3、使用连接查询时必须在where子句中指定有效的连接条件在不同表的列之间进行连接。如果不指定连接条件或者指定无效的连接条件那么会导致生成笛卡尔积。
     4、使用连接查询时使用表别名可以简化连接查询语句。当指定表别名时别名应该跟在表名的后面。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81695-1-1.html 上篇帖子: sql server 2008收缩数据库日志 下篇帖子: MS SQL Server 2008 master数据库损坏故障解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表