SQL Server数据库(作业讲解和复习)

--第一题 查询Student表中的所有记录的Sname、Ssex和Class列。
select Sname,Ssex,Class from student

--第二题 查询教师所有的单位即不重复的Depart列。
select distinct Depart from Teacher

--第三题 查询Student表的所有记录。
select * from student

--第四题 查询Score表中成绩在60到80之间的所有记录。
select * from Score where Degree between 60 and 80

--第五题 查询Score表中成绩为85,86或88的记录。
select * from Score where Degree in (‘85‘,‘86‘,‘88‘)

--第六题 查询Student表中“95031”班或性别为“女”的同学记录。
select * from student where Class=‘95031‘ or Ssex=‘女‘

--第七题 以Class降序查询Student表的所有记录。
select * from student order by Class desc

--第八题 以Cno升序、Degree降序查询Score表的所有记录。
select * from Score order by Cno asc,Degree desc

--第九题 查询“95031”班的学生人数。
select count(*) from student where Class=‘95031‘ --*可以换成主键值

--第十题 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
select SNO,CNO from Score where Degree=(select MAX(Degree) from Score)

--第十一题 查询每门课的平均成绩。
select Cno,AVG(Degree) as 平均分 from Score group by Cno

select Cname from Course where Cno in (select Cno a from Score group by Cno)
union
select Cno,AVG(Degree) from Score group by Cno

--第十二题 查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
select AVG(Degree ) from Score where Cno like ‘3%‘ group by Cno having COUNT(Cno)>4

--第十三题 查询分数大于70,小于90的Sno列。
select sno from Score where Degree between 70 and 90

--第十四题 查询所有学生的Sname、Cno和Degree列。
select Sname,Cno,Degree from student join Score on student.Sno=Score.Sno

--第十五题 查询所有学生的Sno、Cname和Degree列。
select Sno,Cname,degree from Score join Course on Course.Cno=Score.Cno

--第十六题 查询所有学生的Sname、Cname和Degree列。
select student.Sname,Cname,degree from student join Score on student.Sno=Score.Sno join Course on Course.Cno=Score.Cno

--第十七题 查询“95033”班学生的平均分。
select AVG(Degree) from Score where Sno in (select Sno from student where Class=‘95033‘)

select AVG(Degree) from Score,student where student.Sno=Score.Sno and Class=‘95033‘

--第十八题 假设使用如下命令建立了一个grade表:
create table grade(low int,upp int,rank char(1))
insert into grade values(90,100,‘A‘)
insert into grade values(80,89,‘B‘)
insert into grade values(70,79,‘C‘)
insert into grade values(60,69,‘D‘)
insert into grade values(0,59,‘E‘)
--现查询所有同学的Sno、Cno和rank列。

select Sno,Cno,Degree,[RANK] from grade join Score on Score.Degree between low and upp

select Sno,Cno,Degree,[RANK] from Score,grade where Degree between low and upp

--第十九题 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
select * from student,Score where Score.Cno=‘3-105‘ and student.Sno=Score.Sno and Score.Degree>(select Degree from Score where Cno=‘3-105‘ and Sno=‘109‘)

--第二十题 查询score中选学多门课程的同学中分数为非最高分成绩的记录。
select * from Score a where Degree <(select MAX(degree) from Score b where a.Cno=b.Cno) and Sno in(select Sno from Score group by Sno having count(*)>1)

--第二十一题 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
select * from student,Score where student.Sno=Score.Sno and Score.Degree>(select Degree from Score where Cno=‘3-105‘ and Sno=‘109‘)

--第二十二题 查询和学号为107的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
select Sno,Sname,Sbirthday from student where year(student.Sbirthday)=(select year(Sbirthday) from student where Sno=‘107‘)

--第二十三题 查询“张旭“教师任课的学生成绩。
--select Degree from Score,Teacher,Course where Teacher.Tname=‘张旭‘ and Teacher.Tno=Course.Tno and Course.Cno=Score.Cno

select Sno,Cno,Degree from Score where Cno in (select Cno from Course where Tno in (select Tno from Teacher where Tname=‘张旭‘))

--第二十四题 查询选修某课程的同学人数多于5人的教师姓名。
select Tname from Teacher where Tno in (select Tno from Course where Cno in (select Cno from Score group by Cno having COUNT(*)>5) )

--第二十五题 查询95033班和95031班全体学生的记录。
select * from student where Class=‘95033‘ or Class=‘95031‘

--第二十六题 查询存在有85分以上成绩的课程Cno.
select distinct cno from Score where Degree>85

--第二十七题 查询出“计算机系“教师所教课程的成绩表。
select sno,Cno ,Degree from Score where Cno in (select Cno from Course where Tno in (select tno from Teacher where Depart=‘计算机系‘))

--第二十八题 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。使用相关子查询
select Tname,Prof from Teacher a where Prof not in(select Prof from Teacher b where a.Depart!=b.Depart)

--第二十九题 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”课程的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
select Cno,Sno,Degree from Score a where (select Degree from Score b where Cno=‘3-105‘ and b.Sno=a.Sno)>=(select Degree from Score c where Cno=‘3-245‘ and c.Sno=a.Sno) order by Degree desc

select * from Score where Cno=‘3-105‘ and Degree >any(select Degree from Score where Cno=‘3-245‘)

--第三十题 查询选修编号为“3-105”课程且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
select Cno,Sno,Degree from Score a where (select Degree from Score b where Cno=‘3-105‘ and b.Sno=a.Sno)>(select Degree from Score c where Cno=‘3-245‘ and c.Sno=a.Sno)

--第三十一题 查询所有教师和同学的name、sex和birthday.
select distinct Sname as name,Ssex as sex,Sbirthday as birthday from student
union
select distinct Tname as name,Tsex as sex,Tbirthady as birthday from Teacher

--第三十二题 查询所有“女”教师和“女”同学的name、sex和birthday.
select distinct Sname as name,Ssex as sex,Sbirthday as birthday from student where Ssex=‘女‘
union
select distinct Tname as name,Tsex as sex,Tbirthady as birthday from Teacher where Tsex=‘女‘

--第三十三题 查询成绩比该课程平均成绩低的同学的成绩表。
select Sno,Cno,Degree from Score a where a.Degree<(select AVG(Degree) from Score b where a.Cno=b.Cno)

--第三十四题 查询所有任课教师的Tname和Depart.
select Tname,Depart from Teacher where Tname in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno)

select Tname,Depart from Teacher where tno in (select tno from course where Cno in (select distinct Cno from Score))

--第三十五题 查询所有未讲课的教师的Tname和Depart.
select Tname,Depart from Teacher where Tname not in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno)
--第三十六题 查询至少有2名男生的班号。
select Class FROM student where Ssex=‘男‘ group by Class having COUNT(*)>1

--第三十七题 查询Student表中不姓“王”的同学记录。
select * from student where Sname not like (‘王%‘)

--第三十八题 查询Student表中每个学生的姓名和年龄。
select Sname,YEAR(GETDATE())-year(Sbirthday) from student

--第三十九题 查询Student表中最大和最小的Sbirthday日期值。
select MAX(Sbirthday) as 最大,MIN(Sbirthday) as 最小 from student

--第四十题 以班号和年龄从大到小的顺序查询Student表中的全部记录。
select * from student order by Class desc,Sbirthday asc

--第四十一题 查询“男”教师及其所上的课程。
select Tname,Cname from Teacher,Course where Tsex=‘男‘ and Teacher.Tno=Course.Tno

--第四十二题 查询最高分同学的Sno、Cno和Degree列。
select Sno,Cno,Degree from Score where degree=(select MAX(Degree)from Score)

select top 1* from Score order by Degree desc

--第四十三题 查询和“李军”同性别的所有同学的Sname.
select Sname from student where Ssex=(select Ssex from student where Sname=‘李军‘) and Sname not in (‘李军‘)

--第四十四题 查询和“李军”同性别并同班的同学Sname.
select Sname from student where Ssex=(select Ssex from student where Sname=‘李军‘) and Sname not in (‘李军‘) and Class=(select Class from student where Sname=‘李军‘)

--第四十五题 查询所有选修“计算机导论”课程的“男”同学的成绩表。
select Sno,Degree from Score where Sno in (select Sno from student where Ssex=‘男‘) and Cno in (select Cno from Course where Cname=‘计算机导论‘)

复习

1、数据库操作
create database 数据库名称
drop database 数据库名称
use 数据库名称
go 两条SQL语句之间的间隔

2、表操作
create table 表名(列名 类型 其他,列名 类型,其他)
primary key 主键
identity 自增长列
not null 非空
unique 唯一
references 外键 references 主表名(主表主键列)
外键一般是从表的列关联到主表的主键上
drop table 表名 删除表

3、数据操作

增加
insert into 表名 values (每一列的值)

insert into 表名 (列名) values (列的值)

修改

update 表名 set 列名=值,列名=值 where 筛选条件

删除

delete from 表名 where 筛选条件

查询
1、简单查询
select * from 表名

select 列名 from 表名

select 列名 as 别名 from 表名

2、
条件查询

select * from 表名 where 条件1

select * from 表名 where 条件1 or 条件2

select * from 表名 where 条件1 and 条件2

3、范围查询 between and

select * from 表名 where 列名 between 值 and 值2

4、离散查询

select * from 表名 where 列名 in (数据列表)

5、模糊查询 like
select * from 表名 where 列名 like ‘%_‘

6、排序查询 desc 降序

select * from 表名 order by 列名

7、分组查询

select * from 表名 group by 列名 having 条件

8、分页查询 top n 去前n个值
select top n 表名

9、去重查询

select distinct 列名 from 表米

10、聚合函数(统计函数)
select count(*) from 表名

select sun(列名) from 表名

AVG max min

二、高级查询

1、连接查询
列的扩展 join on

联合查询 行的扩展 union

2、子查询
(1)无关子查询
子查询和父查询没有一定的关系,子查询可以单独执行

(2)相关子查询
子查询执行的时候必须使用父查询的内容作为条件

时间: 2024-10-14 01:32:04

SQL Server数据库(作业讲解和复习)的相关文章

Sql Server 数据库作业备份

DECLARE @fileName nvarchar(100) SET @fileName='C:\DataBase_Back\Base' + REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(100), GETDATE(), 121), ' ', ''), ':', ''), '-', ''), '.', '') + '.bak' BACKUP DATABASE [BaseData] TO DISK = @fileName WITH NOINIT

SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业错误”,点击查看详细会提示“作业失败 有关详细信息,请查看目标服务器上的事件日志”. 2. 处理方案 发生这种情况的一般原因是目标服务器的SQL SERVER代理服务的权限过低.更改代理服务权限为LocalSystem账户即可. A. 开始–程序–SQL SERVER 配置管理器 B. 点击左侧“S

SQL Server数据库镜像关键性能计数器

SQL Server数据库镜像关键性能计数器 监视数据库镜像基本有以下5种方法: 1. 配置数据库镜像监视器.设置告警阈值. 2. 配置WMI EVENT ALERT,配置镜像状态修改后的动作或告警. 3. 使用系统监视器查看关键性能计数器. 4. 部署作业监控异常镜像状态,发送告警. 5. 使用sp_dbmmonitorresults获取镜像数据. 当然,使用扩展事件和SQL Server Profiler也能监控到数据库事件中的数据库镜像状态修改.这种工具主要用于跟踪,而非监控的常规手段.

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

第二篇 SQL Server代理作业步骤和子系统

本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作).每个作业步骤运行于一个单独的安全上下文,尽管每个作业有一个所有者来决定谁可以修改作业.本篇主要关注组成SQL Server代理的作业步骤和子系统.快速回顾作业理解SQL Server代理作业的最佳方式是把相关联的 需要完成给定任务 的组件放在一个容器中.作业最主要的组件有作业步骤.计划.警告和通知.

sql server数据库的部署

http://xiaorenwutest.blog.51cto.com               SQL Server数据库部署   概述:数据库在企业中现在是必不可少的存储工具,用来会员登录,网站,动态的网页内容调动,现在在企业中多用于关系型数据库那么接下来介绍下数据库的必要性: (1)可以结构化存储大量的数据信息:方便用户进行有效的检索和访问 (2)可以有效的保持数据信息的一致性.完整性.降低数据冗余(避免数据重复) (3)可以满足应用的共享和安全方面的要求   1.数据库基本概念 数据:

SQL Server数据库镜像基于可用性组故障转移

SQL Server数据库镜像基于可用性组故障转移 微软从SQL Server 2005开始引入数据库镜像,很快成为一个流行的故障转移解决方案.数据库镜像的一个大的问题是故障转移是基于数据库级别的,因此,如果某个数据库故障,镜像只会针对这个数据库切换,但是,其他数据库都仍然在主服务器上.缺点是越来越多的应用程序是基于多个数据库来构建,所以,如果某一个数据库故障转移而其他数据库仍然在主服务器上,那应用程序将无法工作.当这种情况发生的时候,我如何知晓?并执行该应用程序调用的所有数据库一起故障转移呢?

c#.net 是如何访问 SQL Server 数据库

1.导入命名空间 using System.Data.SqlClient; //连接SQLServer 数据库专用 2.创建连接 SqlConnection lo_conn = New SqlConnection("Server=服务器名字或IP;Database=数据库名字;uid=用户名;pwd=密码"); 3.打开连接,第2步并没有真正连接数据库 lo_conn.Open(); //真正与数据库连接 4.向数据库发送SQL命令要使用SqlCommand: SqlCommand l

你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程,并且根据加载过程中所遇到的一系列问题提供解决方案. 其实SQL Server作为微软的一款优秀RDBMS,它启动的过程中,本身所带的那些系统库发生问题的情况相对还是很少的,我们在平常使用中,出问题的大部分集中于我们自己建立的用户数据库. 而且,相对于侧重面而言,其实我们更关注的是我们自己建立的用户数

SQL Server 数据库定时自动备份

原文:SQL Server 数据库定时自动备份 SQL Server 数据库定时自动备份——每天定时备份,保留前8天的备份 利用SQL Server代理新建作业来定期备份 1)在数据库库的[SQL Server代理]->[作业],右键[新建作业] 2)在[常规]选项卡设置[名称](自定义) 3)在[步骤]选项卡中点击[新建],然后在弹出的窗口的[常规]选项卡中设置“步骤名称”(自定义):选择“类型”为“Transact-SQL 脚本(T-SQL)”(默认):选择“数据库”为你要备份的数据库:添加