注:以下操作均建立在上篇文章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:查询数据库语句大全【转】的更多相关文章

  1. Sql Server系列:查询分页语句

    1 利用临时表分页 分页存储过程: CREATE PROCEDURE [USP_Product_GetPaged] ), ), @PageIndex INT, @PageSize INT AS BEG ...

  2. 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小

    其实本来只想找一个方法能查询一下 数据库 的大小,没想到这个方法还能查询数据库中 各个数据表 的大小,嗯,挺好玩的,记录一下. MSDN资料:https://msdn.microsoft.com/zh ...

  3. 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行

    错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...

  4. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

  5. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)

    一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...

  6. Sql Server来龙去脉系列之四 数据库和文件

        在讨论数据库之前我们先要明白一个问题:什么是数据库?     数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...

  7. 【转】SQL Server T-SQL高级查询

    SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; //查询student ...

  8. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

  9. MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解

    判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...

随机推荐

  1. 点击页面其它地方隐藏该div的两种思路

    思路一 第一种思路分两步 第一步:对document的click事件绑定事件处理程序,使其隐藏该div 第二步:对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而 ...

  2. POJ-1088 Skiing(记忆化搜索)

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  3. myeclipse 2013 git

    1. 2.添加site http://download.eclipse.org/egit/updates-2.3 3.安装 完成后,查看windows->preference的team下面有gi ...

  4. android 滚动条

    ScrollView简单应用 activity中经常只是一个LinearLayout,但这样的话,如果activity内容超过一屏,无法滚动查看下面的内容. 这时只需在外面嵌套一个ScrollView ...

  5. OC基础14:使用文件

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.对于NSFileManager类,文件 ...

  6. 这辆车已覆盖免费wifi

    上周在前面,首页特意下载了几部电影.即使步行到完成下载任务之前,,也推高了十分钟.所述无线网络和赶车之间,其实,我选择了前者. 真的很可怕大胆,要知道.其他人可能是买不来的旅行. 幸运的是,.速度依然 ...

  7. XP用户:消除误解,大胆拥抱Linux

         4月23日.知名家评论家Silviu Stahie发表文章.题为"Windows Users and Their Misconceptions About Linux". ...

  8. huffman 编码

    huffman压缩是一种压缩算法,其中经典的部分就是根据字符出现的频率建立huffman树,然后根据huffman树的构建结果标示每个字符.huffman编码也称为前缀编码,就是每个字符的表示形式不是 ...

  9. Mobile Web开发 处理设备的横竖屏

    为了应对移动设备屏幕的碎片化,我们在开发Mobile Web应用时,一个最佳实践就是采用流式布局,保证最大可能地利用有限的屏幕空间.由于屏幕存在着方向性,用户在切换了屏幕的方向后,有些设计上或实现上的 ...

  10. CSS3中的弹性流体盒模型技术详解

    先回顾一下CSS1 和 CSS2中都已经定义了哪些布局方面的属性,这样也会增加我们理解弹性布局.   其实我们现在有很多一部分人,你们刚刚接触CSS层叠样式表,或者接触有一段时间了,但是却没有很好的去 ...