sql sever 2008表连接方式总结

来源:互联网 发布:adobe for mac 编辑:程序博客网 时间:2024/05/01 18:43
use master
go
if exists(select * from sysdatabases where name = '学生管理系统')
drop database 学生管理系统
create database 学生管理系统
on primary
(
name = '学生管理系统_data',
filename = 'E:\temp\学生管理系统_data.mdf',
size = 10MB,
filegrowth = 1MB
)
log on
(
name = '学生管理系统_log',
filename = 'E:\temp\学生管理系统_log.ldf',
size = 10MB,
filegrowth = 1MB
)
go


use 学生管理系统
go
if exists(select * from sysobjects where name = '学生表')
drop table 学生表
create table 学生表
(
Id int identity(100, 1) primary key,
Name varchar(10) not null ,
Age int not null check(Age < 30 and Age > 10),
Gender varchar(4) not null,
Class int not null
)
go


use 学生管理系统
go
if exists(select * from sysobjects where name = '班级表')
drop table 班级表
create table 班级表
(
Id int identity(1, 1) primary key,
Name varchar(10) not null,
People int not null,
Grade int not null
)
go


use 学生管理系统
go
insert into 学生表(Name, Age, Gender, Class) values('张三', 21, '男', 1)
insert into 学生表(Name, Age, Gender, Class) values('李四', 27, '男', 2)
insert into 学生表(Name, Age, Gender, Class) values('王五', 24, '男', 5)
insert into 学生表(Name, Age, Gender, Class) values('周六', 26, '男', 2)
insert into 学生表(Name, Age, Gender, Class) values('更七', 28, '男', 3)
insert into 学生表(Name, Age, Gender, Class) values('刘八', 24, '男', 1)
insert into 学生表(Name, Age, Gender, Class) values('郝九', 22, '男', 2)
insert into 学生表(Name, Age, Gender, Class) values('胡十', 25, '男', 2)
insert into 学生表(Name, Age, Gender, Class) values('安十一', 26, '男', 3)
insert into 学生表(Name, Age, Gender, Class) values('徐十二', 24, '男', 1)
insert into 学生表(Name, Age, Gender, Class) values('付十三', 23, '男', 5)
insert into 学生表(Name, Age, Gender, Class) values('郭十四', 24, '男', 1)
insert into 学生表(Name, Age, Gender, Class) values('李十五', 29, '男', 2)
insert into 学生表(Name, Age, Gender, Class) values('秦十六', 21, '男', 2)
insert into 学生表(Name, Age, Gender, Class) values('张十七', 28, '男', 1)
insert into 学生表(Name, Age, Gender, Class) values('周十八', 21, '男', 3)
go


use 学生管理系统
go
insert into 班级表(Name, People, Grade) values('计算机', 50, 51)
insert into 班级表(Name, People, Grade) values(' 信息安全', 56, 52)
insert into 班级表(Name, People, Grade) values('软件工程', 58, 54)
insert into 班级表(Name, People, Grade) values('网络工程', 54, 57)
go


use 学生管理系统
go
select * from 学生表
select * from 班级表


select A.Id, A.Name, B.Name as '班级名称' from 学生表 A, 班级表 B where A.Class = B.Id  /*基本链接*/


select A.Class, A.Name, B.Name as '班级名称' from 学生表 A inner join 班级表 B on A.Class = B.Id where B.Id > 0 /*内连接*/
/*内连接与外连接的区别:内连接只返回两个表符合条件的内容,外连接会以一个表为基准,无论另一个表中的内容是否符合条件,都会返回*/


select A.Class, A.Name, B.Name as '班级名称' from 学生表 A left outer join 班级表 B on A.Class = B.Id where A.Id > 0/*左外连接*/ 
/*其中,on 和 where 后面都可以跟条件,但是不一个效果,on 后面的条件是查询中的条件,where 后面的条件是查询开始的条件*/


select A.Class, A.Name, B.Name as '班级名称' from 学生表 A right outer join 班级表 B on A.Class = B.Id where B.Id > 0 /*右外连接*/
/*右外连接与左外连接一个功能,只要区分好主表与从表之间的关系就好*/


select A.Class, A.Name, B.Name as '班级名称' from 学生表 A full outer join 班级表 B on A.Class = B.Id /*全连接*/
/*全连接就是不分主表从表,把两个表的信息全部显示出来*/


select A.Class, A.Name, B.name as '班级名称' from 学生表 A cross join 班级表 B  /*交叉连接*/
/*交叉连接是返回两个表的笛卡尔乘积*/


select B.Name, B.People, A.Name from 班级表 A, 班级表 B where A.People = B.People and A.Id <> B.Id /*自连接*/


select A.Id, A.Name, A.Age from 学生表 A 
union
select '', '平均', AVG(学生表.Age) from 学生表  /*联合查询*/
/*联合查询是将多个查询结果凑成一块,要注意每个查询结果应保存数据类型一样*/


select Id, Name, Age from 学生表 where Age < (select avg(Age) from 学生表) /*子查询*/
/*子查询也可以进行嵌套*/


select * from 学生表 for xml auto /*将查询结果自动转换为xml格式,出了后面的auto,还有很多关键字可以选择使用。*/


/*交查询*/
/*差查询*/
go




use 学生管理系统
go
drop table 学生表
drop table 班级表
go



0 0
原创粉丝点击