注:以下操作均建立在上篇文章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. css案例学习之float浮动

    代码: <!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  2. Ubuntu 安装 Eclipse C/C++开发环境

    所需软件清单: 1.eclipse-linuxtools-indigo-SR1-incubation-linux-gtk.tar.gz 2.jre-7u2-linux-i586.tar.gz 先将上述 ...

  3. 【学习总结】autostart 与 init

    学习总结/etc/xdg/autostart/xxx.desktop,是开机从登录界面跳转到桌面启动的,可以拿到桌面环境变量,用户id是“普通用户”,如果自启动的程序文件所属者为root,则需要 执行 ...

  4. js算法

    最近面试可能会问这些 1,插入排序 function sort(elements){ var res =[elements[0]]; for (var i = 0; i < elements.l ...

  5. Win8开发疑问与解答

    疑问:怎样获取开发者许可证 打开VS2012时,怎么在没有取得开发者许可证之前,屏蔽/跳过弹出的窗体“获取Windows8开发者许可证 你需要具有开发者许可证才能开发适用于......” 打开Blen ...

  6. linux-FTP服务常用命令及测试

    一.vsftpd服务的安装,启动及关闭1.安装vsftpd[root@rusky bdump]# yum install vsftpd --必须配置yum源才能使用yum命令来安装vsftpd,或者挂 ...

  7. javascript模式——Mixin

    Mixin是一种扩展收集功能的方式,能提高代码的复用率. 在javascript中,原型可以继承于其它对象的原型,并且可以为任意数量的实例定义属性.可以利用这一点来促进函数的复用. 下面一段代码就是将 ...

  8. UITabBarItem

    – finishedSelectedImage 返回选中时的图表 – finishedUnselectedImage 返回为选中时的图表 – setFinishedSelectedImage:with ...

  9. SQL SERVER 数据类型详解(SQL Server 2008)

    数据类型类别 SQL Server 中的数据类型归纳为下列类别: 数字类型 1.精确数字 2.近似数字 3.日期和时间 字符串类型 4.非Unicode字符串 4.Unicode字符串 5.二进制字符 ...

  10. 生成HFile文件后倒入数据出现Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.filter.Filter

    数据导入的时候出现: at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclar ...