sql sever 2008表连接方式总结

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

时间: 2024-10-23 05:40:56

sql sever 2008表连接方式总结的相关文章

sql数据库的表连接方式图文详解

sql数据库表连接,主要分为:内连接.外连接(左连接.右连接 .全连接).交叉连接,今天统一整合一下,看看他们的区别. 首先建表填充值. 学生表:student(id,姓名,年龄,性别 ) 成绩表:score(id,学生id,成绩) 一.内连接(inner join……on) select student.* ,Score.* from student inner join Score on student.id=Score.sid 查询结果如下: 关系如下图: 总结:inner join取两表

SQL优化之表连接方式

1.嵌套循环(DESTED LOOPS) Note:嵌套循环被驱动表必须走索引,而且索引只能走INDEX UNIQUE SCAN或者INDEX RANGE SCAN SQL> select /*+gather_plan_statistics use_nl(e,d) leading(e)*/* from emp e,dept d where d.deptno=e.deptno; 已选择14行. 执行计划 -----------------------------------------------

如何更改SQL Server 2008 登陆验证方式

配置SQL Server的身份验证方式 在 默认情况下,SQL Server 2005 Express是采用集成的Windows安全验证且禁用了sa登录名.为了工作组环境下不使用不方便的 Windows集成安全验证,我们要启用SQL Server 2005 Express的混合安全验证,也就是说由SQL Server来验证用户而不 是由Windows来验证用户. 1.使用SQL Server Management Studio Express. 当 我们启动SQL Server Manageme

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join 分类: Oracle 基础管理 Oracle SQL 开发2013-01-28 00:33 2536人阅读 评论(1) 收藏 举报 关系数据库技术的精髓就是通过关系表进行规范化的数据存储       并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理       这里Think愿意和大家一起来学习分享Oracle的三大表连接技术              在早期版本,

表连接方式

--表连接方式1.Hash join:优化器使用两个表中较小的表(或数据源)利用连接键(HASH KEY)在内存中建立散列表(HASH表),然后扫描较大的表并探测散列表,找出与散列表匹配的行.如果hash表太大则无法在内存中完全放入,这时候优化器就分成不同区,把不能放入内存的分区放入到磁盘临时段,此时有较大的临时段来提高i/o性能.默认值指定方式:USE_HASH(table_name1 table_name2) 2.Nested loops:工作方式是从一张表(驱动表outer table,结

在Sql Sever 2008 中,如果实现查询每门课程的前几名?

在Sql Sever 2008 中,如果需要查询每门课程的前3名,实现方法如下: 现有成绩表(Result),列(StudentNo学号,SubjectNo 科目编号,StudentResult学员成绩) 方法一: SELECT distinct  b.*  FROMresult  AS  r CROSS APPLY( SELECT TOP(3) *FROM Result WHERE r.SubjectNo= SubjectNo ORDER BY StudentResult DESC ) AS

关联操作方式(表连接方式)

NESTED LOOPS(嵌套循环连接) 在嵌套循环连接中,oracle从第一个行源中读取第一行,然后和第二个行源中的数据进行对比. 所有匹配的记录放在结果集中,然后Oracle将读取第一个行源中的下一行.按这种方式直至第一个数据源中的所在行都经过处理. 第一个记录源通常称为外部表,或者驱动表,相应的第二个行源称为内部表.使用嵌套循环连接是一种从连接结果中提取第一批记录的最快速的方法. 在驱动行源表(就是您正在查找的记录)较小.或者内部行源表已连接的列有惟一的索引或高度可选的非惟一索引时, 嵌套

SQL SEVER 2008中的演示样例数据库

SQL SEVER 2008数据库是什么我就不说了,我在这里分享一下怎样学习SQL SEVER 2008数据库,假设是对数据库或是SQL SEVER 数据库全然陌生或是不熟悉的人来说,建议看看一些视频教程.对数据库中包括的内容以及一些概念,常规操作有个感性的认识,对数据库有一定的感性认识之后.要深入学习SQL SEVER数据库.就应该使用在安装数据库的时候安装的--联机丛书--入手,深入学习SQL SEVER数据库,同一时候它就像msdn一样,也能够作为一个查询工具,在必要的时候,在上面查找sq

SQL SEVER 2008中的示例数据库

SQL SEVER 2008数据库是什么我就不说了,我在这里分享一下如何学习SQL SEVER 2008数据库,如果是对数据库或是SQL SEVER 数据库完全陌生或是不熟悉的人来说,建议看看一些视频教程,对数据库中包含的内容以及一些概念,常规操作有个感性的认识,对数据库有一定的感性认识之后,要深入学习SQL SEVER数据库,就应该使用在安装数据库的时候安装的--联机丛书--入手,深入学习SQL SEVER数据库,同时它就像msdn一样,也可以作为一个查询工具,在必要的时候,在上面查找sql语