sql server操作2:查询数据库语句大全【转】
注:以下操作均建立在上篇文章sql Server操作1的数据基础之上
一、实验目的
熟悉SQL语句的基本使用方法,学习如何编写SQL语句来实现查询
二、实验内容和要求
使用SQL查询分析器查询数据,练习查询语句的使用,掌握SELECT 语句的完整结构,包括简单查询、嵌套查询、连接查询等基本实现方法。
三、实验主要仪器设备和材料
1.计算机及操作系统:PC机,Windows 2000/xp/win7;
2.数据库管理系统:SQL sever 2005/2008;
四、实验方法、步骤及结果测试
实验题目:
1、对实验一建立的数据库表进行查询
简单查询:
题目1、查询学生的系别,用小写字母表示。
SQL语句
select distinct LOWER(Sdept) from S;
题目2、查询叫“刘%”的学生学号、系别
SQL语句
select Sno Sdept from S where Sname like '刘\%' escape'\';
题目3、查询教师姓名第二个字是“一”的教师姓名,所教课程名。
SQL语句
select Tname,Cname from C where Tname like '_一_';
题目4、查询没有成绩的学生学号,学号降序排列。
SQL语句
select S.Sno from S where not exists(
select * from Sc where S.Sno=Sc.Sno
)
order by S.Sno desc;
题目5、查询选修课程的学生人数
SQL语句
select count(distinct Sno) As '学生人数' from Sc
--select count(*)
--from S
--where exists( select * from Sc where Sc.Sno = S.Sno )
题目6、各科选修课成绩及格的选修人数。
SQL语句
select count(distinct Sno)As'及格人数' from Sc where Grade>=60
group by Cno;
题目7、各学院男生人数,超过2人的输出学院名和人数,并按男生人数降序排列
SQL语句
select Ssp,count(*) from S where S.Ssex='男'
group by Ssp
having count(*)>2
order by count(*) desc;
题目8、查询IS系男女学生人数各是多少SQL语句
select S.Ssex As'性别',count(*) As'IS系人数' from S where S.Sdept='IS'
group by Ssex;

题目9、找出年龄>23岁,平均成绩不及格的学生学号和平均分
SQL语句
select sno,avg(grade) from SC
where sno in(
select sno from S where getdate()-sbirth>23
)
group by sno
having avg(grade)<60
或者:
--获得当前系统时间
--跨越表查询要用having,不能用在where
Select S.Sno As'学生学号',Avg(Sc.Grade) As'平均成绩'from S,Sc
where S.Sno=Sc.Sno and getdate()-Sbirth >23
group by S.Sno
having AVG(Sc.Grade)<60;

题目10、显示所有学生信息,如果该生选修过课程,显示其选修课号和考试成绩
SQL语句
select S.*,Sc.Cno,Sc.Grade from S left join Sc on(SC.Sno=S.Sno);

题目11、查询每门课都是80分以上的学生的学号与姓名。
SQL语句
--如果没有加"S.Sno=Sc.Sno and"会出现有未选修了课程的学生学号
--如果没有distinct则会出现重复
Select distinct S.Sno As'学生学号',S.Sname As'姓名'from S,Sc
where S.Sno=Sc.Sno and S.Sno not in
(select Sno from Sc where Grade<=80);
或者:
select sno,sname from S where sno in
(select sno from sc group by sno
having min(grade)>80)

题目12、查询学分比“计算机应用”多的课程号和课程名、学分
SQL语句
Select Cname As'课程名',cCredit As'学分' from C
where cCredit>(Select cCredit from C where Cname='计算机应用')
group by Cname,cCredit;

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

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

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

题目17、被全部IS系的学生都选修的课程号和课程名
SQL语句
select Cno As'课程号',Cname As'课程名' from C
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))

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

题目19、没有选修“李一”老师开设的课程的学生学号、姓名、系别
SQL语句
select S.Sno As'学生学号',S.Sname As'学生姓名',S.Ssp As'系别' from S
where not exists(
select * from SC,C where SC.cno=C.cno and SC.sno=S.sno
and tname='李一')
题目20、查询各选修学生最高分最低分之差大于30分的学生学号
SQL语句
select Sc.Sno As'学生学号' from Sc
group by Sno
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、使用连接查询时使用表别名可以简化连接查询语句。当指定表别名时别名应该跟在表名的后面。
sql server操作2:查询数据库语句大全【转】的更多相关文章
- Sql Server系列:查询分页语句
1 利用临时表分页 分页存储过程: CREATE PROCEDURE [USP_Product_GetPaged] ), ), @PageIndex INT, @PageSize INT AS BEG ...
- 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小
其实本来只想找一个方法能查询一下 数据库 的大小,没想到这个方法还能查询数据库中 各个数据表 的大小,嗯,挺好玩的,记录一下. MSDN资料:https://msdn.microsoft.com/zh ...
- 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行
错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...
- Oracle 数据库语句大全
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)
一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...
- Sql Server来龙去脉系列之四 数据库和文件
在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...
- 【转】SQL Server T-SQL高级查询
SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; //查询student ...
- Sql Server 存储过程中查询数据无法使用 Union(All)
原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...
- MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解
判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...
随机推荐
- SQL别名解析(转载)
通过使用 SQL,可以为列名称和表名称指定别名(Alias). 其实,select列的时候取别名有三种方法,这三种方法并不是所有数据库都适用. 方法一.直接在字段名称后面加上别名,中间以空格隔开. 方 ...
- C#、VB.NET 使用System.Media.SoundPlayer播放音乐
原文:C#.VB.NET 使用System.Media.SoundPlayer播放音乐 同步播放: System.Media.SoundPlayer player = new System.Media ...
- VC++学习之一
对于编程语言,我一直认为它只是一种工具,就像锤子,斧头一样,每种语言都用自己比较适用的地方,用的时候拿来就可以了.这种思想让我对语言没有做过很仔细的学习,虽然频繁使用过C,C++,java,C#,De ...
- AndroidTestCase测试用法
1. Java代码TestCase.java 继承AndroidTestCase类 package com.test.casei; import android.test.AndroidTest ...
- 【D3.V3.js系列教程】--(十五)SVG基本图形绘制
[D3.V3.js系列教程]--(十五)SVG基本图形绘制 1.path <!DOCTYPE html> <html> <head> <meta charse ...
- C#/winform 旅游管理信息系统
工具:Visual Studio 2015,sql server2014 1.系统概述 该旅游管理信息系统可以为游客和公司业务管理员提供服务.游客可以对旅游路线,旅游班次,旅游团,保险,导游,交通工具 ...
- [置顶] 深入浅出Spring(三) AOP详解
上次的博文深入浅出Spring(二) IoC详解中,我为大家简单介绍了一下Spring框架核心内容中的IoC,接下来我们继续讲解另一个核心AOP(Aspect Oriented Programming ...
- H264标准句法表中C的含义理解
下面一段是H264官方中文版中给出的解释: “类别(在表中以C 表示)规定条带数据可以至多划分为三种条带数据类别.条带数据类别A 包含了类别2的所有语法元素.条带数据类别B 包含了类别3 的所有语法元 ...
- Lucene的多线程访问原则和同步,锁机制
本文介绍lucene多线程环境下的使用原则和commit.lock与write.lock实现的锁机制. 设计之初就是服务于多线程环境,大多数情况下索引会被不至一个线程访问.索引时一个关键资源.在对这样 ...
- BFC块级排版上下文
1.BFC 全称是块级排版上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,但是如果一个块级元素 设置了float:left,overflow:hidden或position ...