ylb:多表的连接与练习(第三方关联表的应用)
| ylbtech-SQL Server:SQL Server-多表的连接与练习(第三方关联表的应用) |
SQL Server 多表的连接与练习(第三方关联表的应用)。
| 1,多表的连接与练习(第三方关联表的应用) 返回顶部 |
-- =============================================
-- ylb:
-- ylb目的:多表之间的连接,第三方关系的运用
-- 练习和使用
-- 13:13 2011/12/7
-- =============================================
USE master
GO -- Drop the database if it already exists
IF EXISTS (
SELECT name
FROM sys.databases
WHERE name = N'db'
)
DROP DATABASE db
GO CREATE DATABASE db
GO
go
use db
go
--1,课程表
create table course
(
c_no int identity(1,1) primary key, --编号
c_name varchar(20) not null, --课程名称
c_time int check(c_time>=0) --课时
)
go
--2,学生表
create table stu
(
s_no int identity(1,1) primary key, --编号
s_name varchar(10) not null, --姓名
age int check(age>=15 and age<=80) --年龄
)
go
--3,成绩表
create table sco
(
s_no int not null references stu(s_no), --学生编号
c_no int not null references course(c_no), --课程编号
sco int --成绩
)
go
--联合主键
alter table sco add constraint pk_s_c primary key(s_no,c_no)
go
insert into course values('计算机软件基础',16)
insert into course values('C语言程序设计',64)
insert into course values('网站设计综合技术',56)
insert into course values('SQL Server',32)
insert into course values('ASP',64)
insert into course values('JAVA',100)
insert into course values('高级SQL Server',16)
insert into course values('ASP DoNet',100)
select * from course
go
insert into stu values('张三',29)
insert into stu values('李司',39)
insert into stu values('王二',22)
insert into stu values('麻子',21)
insert into stu values('赵钱',25)
insert into stu values('孙李',24)
insert into stu values('周吴',20)
insert into stu values('郑王',20)
insert into stu values('合乎',29)
insert into stu values('人五',21)
insert into stu values('人六',17)
go
select * from course
select * from stu
go
insert into sco values(1,1,70)
insert into sco values(1,2,74)
insert into sco values(1,3,60)
insert into sco values(1,4,69)
go
insert into sco values(2,1,60)
insert into sco values(2,2,71)
insert into sco values(2,3,56)
insert into sco values(2,4,78)
go
insert into sco values(3,1,50)
insert into sco values(3,2,57)
insert into sco values(3,3,74)
insert into sco values(3,4,72)
go
insert into sco values(4,1,55)
insert into sco values(4,2,45)
insert into sco values(4,3,65)
insert into sco values(4,4,72)
go
insert into sco values(5,6,75)
insert into sco values(6,6,85)
insert into sco values(7,6,82)
go
select * from course
select * from stu
select * from sco
go
--一、单表的查询
go
--1、查询年龄最大的三个同学的信息;
--2、在成绩表中,查询课程编号为1号的所有记录 --3、在成绩表中,查询课程编号为1号的纪录,并按成绩降序排序 --4、在成绩表中,查询1号学生的总分,平均分,最高分和最低分, --5、在成绩表中,查询单科成绩最高的学号,课程编号和成绩 --6、在成绩表中,查询每个学生参加考试的总分及参加考试的数量 --7、在成绩表中,查询每个学生的总分,平均分,最高分,最低分,并在总分降序排序 --8、在成绩表中,查询总分最高的学生的学号,总分 --9、在成绩表中,查询学号为2号的学生的学号,总分,平均分 --10、在成绩表中,查询每一门课程的考试人数,总分,最高分,并按总分升序排序 --二、多表连接查询 --1、查询所有举行考试的课程名称;
select * from course
select * from sco
go
select * from course c inner join sco s
on c.c_no=s.c_no
go
--结果
select distinct c_name from course c inner join sco s
on c.c_no=s.c_no
go
--2、查询所有举行考试的课程名称以及对应的学号和分数;
select c_name,s_no,sco from course c inner join sco s
on c.c_no=s.c_no
go
--3、查询所有参加考试的学生姓名以及其对应的课程编号和分数;
select s_name,c_no,sco from stu st inner join sco s
on st.s_no=s.s_no
go
--4、查询每个参加考试的学生的姓名,考试科目数量,总分,平均分;
select s_name,COUNT(*) '考试科目数量',SUM(sco) '总分',AVG(sco) '平均分'
from stu inner join sco
on stu.s_no=sco.s_no
group by s_name
go
--5、查询总分最高的同学的姓名,和总分
select top 1 s_name,SUM(sco) from stu inner join sco
on stu.s_no=sco.s_no
group by s_name
order by SUM(sco) desc go
--6、查询总分前三名的同学的姓名
select top 3 s_name from stu inner join sco
on stu.s_no=sco.s_no
group by s_name
order by SUM(sco) desc
go
--7、查询参加考试的同学的姓名,科目名称及分数;
select s_name,c_name,sco from stu inner join sco
on stu.s_no=sco.s_no
inner join course
on sco.c_no=course.c_no
go
--8、查询 张三同学 的姓名,年龄,课程编号,成绩,及对应的课程名称
select s_name,age,sco.c_no,sco from stu inner join sco
on stu.s_no=sco.s_no
inner join course
on sco.c_no=course.c_no
where s_name='张三'
go
--9、查询 张三同学的姓名参加考试的总分,平均分以及参加考试的数量
select SUM(sco) '总分',AVG(sco) '平均分',COUNT(*) '考试数量' from stu
inner join sco
on stu.s_no=sco.s_no
inner join course
on sco.c_no=course.c_no
where s_name='张三'
go
--10、查询所有学生的姓名,以及其对应的分数;
select s_name,sco from stu
inner join sco on stu.s_no=sco.s_no
go
--11、查询所有的课程名称,以及其对应的学号和成绩;
select c_name,s_no,sco from course
inner join sco on course.c_no=sco.c_no
go
--12、查所有的同学的姓名,其对应的成绩,以及所有课程名称;
select s_name,sco,c_name from stu
inner join sco on stu.s_no=sco.s_no
inner join course on sco.c_no=course.c_no
go
--13、假设,所有同学都参加所有课程的考试,那么总共需要多少份试卷;
select COUNT(*) from course cross join stu go
--左外连接
select * from stu
left join sco on stu.s_no=sco.s_no
![]() |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
ylb:多表的连接与练习(第三方关联表的应用)的更多相关文章
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)
在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实现.不过这里不说,做关联查询的步骤可以简单的总结为以下的几步: 1.分 ...
- Mysql学生管理系统:表的建立,外键一对多,多对多关系,中间关联表的建立
学生管理系统 管理员注册/登录/注销 注册班级(班级详细信息) 注册学生信息 查看班级信息/查看老师资料 教师注册/注销 查看教师资料 查看学生资料 根据名称/班级/ 查看学生详细信息--支持模 ...
- MySQL--表操作(约束条件foreign key关联表 多对1,多对多,1对1)
一.所有数据都存放于一张表中的弊端:1.表的组织结构复杂不清晰2.浪费空间3.扩展性极差 解决方案:分表a.分表 + foreign key: 有硬性限制(关联表中的关联字段内容必须来自于被关联表), ...
- 2017.11.22 mysql数据库实现关联表更新sql语句
比如有两张表,其中一张表某个字段的值要关联另一张表进行统计,就要用到mysql的update方法,并且left join另一张表进行联合查询. mysql关联表更新统计 sql语句如下: 代码如下 复 ...
- CROSS JOIN连接用于生成两张表的笛卡尔集
将两张表的情况全部列举出来 结果表: 列= 原表列数相加 行= 原表行数相乘 CROSS JOIN连接用于生成两张表的笛卡尔集. 在sql中cross join的使用: 1.返回的记录数为两个 ...
- ora-01445:无法从不带保留关键字的表的连接视图中选择ROWID或采样
系统要创建一个物化试图,用到很多张表,执行的时候报错: ora-01445:无法从不带保留关键字的表的连接视图中选择ROWID或采样 网上搜了下,有多种原因和解决方法,最终我选择先尝试一下修改 ...
- Oracle 表的连接方式(2)-----HASH JOIN的基本机制2
Hash算法原理 对于什么是Hash算法原理?这个问题有点难度,不是很好说清楚,来做一个比喻吧:我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分 ...
- Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join
关系数据库技术的精髓就是通过关系表进行规范化的数据存储,并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理. 表的三种关联方式: nested loop:从A表抽一条记录,遍历B表查找匹配 ...
随机推荐
- iOS 开发--NSMutableArray使用枚举方法
可变数组也可以使用枚举方法, 我们在这里提供了两种枚举方法, 一个是正序枚举, 一个是倒序枚举, 在正序枚举中, 元素的个数和顺序都是不可以修改的, 但是在倒序枚举中却可以修改, 这有些耐人寻味. 涉 ...
- LoadRunner8 安装步骤
一.介绍 LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试.企业使用L ...
- ps小技巧
一.加色与减色 电脑显示器和电视是加色法最常见的形式,而在油漆.颜料和彩色滤光片会用减色. 二.怎么把背景变成透明:其实就是抠图. 1.魔术棒+delete,缺点:应用于边界明显的图片,否则容差不好控 ...
- css3:target页内跳转
:target 用于选取当前活动的目标元素 <!DOCTYPE html> <html> <head lang="en"> <meta c ...
- PHPCMS V9添加模板自定义全局变量
在我们使用PHPCMS V9的制作网站模板的时候,使用全局模板变量能轻松调用,使用起来非常方便,而且可以统一修改,方便维护. 下面就来讲一下在PHPCMS V9中如何添加自定义全局变量. 修改网站sy ...
- 查看Linux系统网卡信息
nmcli是一款能够方便我们配置网络的工具,能够轻松的查看网卡信息或网络状态: 实例1:查看网卡信息 [root@localhost ~]# nmcli connection show 名称 UUID ...
- openfire插件开发入门1
.案例插件的功能 这个插件很简单,就是在openfire Server启动时,和关闭时,在控制台打印出消息. 3.插件开发的目录结构设计 先来看一下当前openfire在eclipse中的目录结构: ...
- Ubuntu对FireFox安装flash插件
有时候我们需要在Ubuntu下采用手动安装一些软件,比如Firefox的Flash插件.Adobe® Flash® Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提 ...
- django中post方法和get方法的不同
当我们提交表单仅仅需要获取数据时就可以用GET: 而当我们提交表单时需要更改服务器数据的状态,或者说发送e-mail,或者其他不仅仅是获取并显示数据的时候就使用POST. 在这个搜索书籍的例子里,我们 ...
- 手机上的频段GSM GPRS分别是什么
GSM是一种第二代无线通信的网络制式标准,GPRS是GSM应用的一种数据业务(如上网).频段:上行:890-915MHz(中国移动:890-909,中国联通:909-915)下行:935-960MHz ...
