Sql语句多表联合查询
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sql语句多表联合查询
查询所要用到的表
1.course表
USE[学生管理]
GO
/****** Object: Table [dbo].[course] Script Date: 04/28/2015 11:37:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE[dbo].[course](
[课号][nvarchar](20)NOT NULL,
[课名][char](20)NOT NULL,
[类型][char](10)NOT NULL,
[学分][int]NOT NULL,
PRIMARY KEY CLUSTERED
(
[课号]ASC
)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,
IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON[PRIMARY]
)ON[PRIMARY]
GO
SET ANSI_PADDING OFF
GO
2.score表
USE[学生管理]
GO
/****** Object: Table [dbo].[score] Script Date: 04/28/2015
11:38:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE[dbo].[score](
[学号][nvarchar](20)NOT NULL,
[课号][nvarchar](20)NOT NULL,
[考试成绩][decimal](9, 2)NULL,
[平时成绩][decimal](9, 2)NULL,
PRIMARY KEY CLUSTERED
(
[学号]ASC,
[课号]ASC
)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,
IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON[PRIMARY]
)ON[PRIMARY]
GO
3.学生表
USE[学生管理]
GO
/****** Object: Table [dbo].[student] Script Date: 04/28/2015 11:39:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE[dbo].[student](
[学号][nvarchar](20)NOT NULL,
[姓名][char](20)NOT NULL,
[性别][char](2)NOT NULL,
[出生日期][datetime]NULL,
[来源地][char](50)NULL,
[联系方式][char](12)NULL,
[联系方式][char](12)NULL,
[所属院系][char](20)NULL,
PRIMARY KEY CLUSTERED
(
[学号]ASC
)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,
IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON[PRIMARY]
)ON[PRIMARY]
GO
SET ANSI_PADDING OFF
GO
逻辑要求,查询高博文同学的学号,姓名,所选课程以及选修课程的平时成绩和考试成绩
分析,由于要查询的字段分别在student表里,course表里,score表里,因此要用到多表联合查询
第一种方式通过where子句进行连接查询
use学生管理
go
select student.学号,student.姓名,course.课名,course.类型,course.学分,score.平时成绩,score.考试成绩
from dbo.course,dbo.score,dbo.student
where dbo.student.学号=score.学号and course.课号=score.课号and dbo.student.姓名='高博文'
执行结果
第二种通过INNER JOIN 连接查询
use学生管理
go
select student.学号,student.姓名,course.课名,course.类型,course.学分,score.平时成绩,score.考试成绩
from dbo.score
inner join
dbo.course
on dbo.course.课号=score.课号
inner join
dbo.student
on student.学号=score.学号
where dbo.student.姓名='高博文'
表1 inner 表2 on 条件
Inner 表3 on 条件
可以看到这两种查询结果是一样的。