第一节
- 基本链接*
基本链接遵循的基本原则:
1.Select 子句列表中,每个目标列前都要加上基表名称。
2.From子句应包括所有使用的基表。
3.Where子句应定义一个同等连接。
第二节
- 内连接*
Select select list ’后边跟的就是表中的列名
From table1 Inner Join table2[ON join conditions] ’inner join 表示两个表连接
[where search_conditions] ’Where查询
[Order By order_expression] ’排序
实践:
select A.班级名,A.班级人数,B.姓名,B.联系方式
from 班级信息 A inner join 辅导员信息 B
ON A.辅导员 =B.辅导员编号
where B.性别=‘男’
第三节
-
左外连接*
select A.班级名,A.班级人数,B.姓名,B.联系方式
from 班级信息 A left outer join 辅导员信息 B ’left outer join为左外链接
ON A.辅导员 =B.辅导员编号 and A.班级人数>90
where B.性别=‘男’
ON和where 后边跟的条件有很大的区别。 -
右外连接*
注意主表和从表之间的互换
select A.班级名,A.班级人数,B.姓名,B.联系方式
from 班级信息 A right outer join 辅导员信息 B ’主表与从表之间的互换
ON A.辅导员 =B.辅导员编号
第五 节
-
全连接*
实践:select a.班级名,a.班级人数,b.姓名,b.联系方式
from 辅导员信息 b full outer join 班级信息 a ’全链接关键字
on a.辅导员 =b.辅导员编号 -
交叉连接*
不带Where 子句,返回两个连接的两个表所有数据行的笛卡儿积. -
自连接*
实践这个有点懵:select A.班级名,A.班级人数,B.班级名
from 班级信息 A,班级信息 B
where A.班级人数=B.班级人数 and A.班级编号 <>B.班级编号 AND A.班级名 =‘经管4班’
第六节
-
联合查询*
连接的两个表中的记录时目标列必须相同,数据类型尽量保持相同。不相同的话运行时可能会出现数据类型转换失败等提示。
实践:
select A.成绩编号,A.分数,B.姓名
from 成绩信息 A,学生信息 B
where A.学生编号=B.学号 AND A.课程编号 =‘1004’ AND A.考试编号 =‘04’
union
select ‘’,sum(分数),‘合计’
from 成绩信息 A,学生信息 B
where A.学生编号=B.学号 AND A.课程编号 =‘1004’ AND A.考试编号 =‘04’
union
select ‘’,avg(分数),‘平均’
from 成绩信息 A,学生信息 B
where A.学生编号=B.学号 AND A.课程编号 =‘1004’ AND A.考试编号 =‘04’
order by 分数 -
使用子查询*
实践:
select A.成绩编号,A.分数,B.姓名
from 成绩信息 A,学生信息 B
where A.学生编号=B.学号 AND A.课程编号 =‘1004’ AND A.考试编号 =‘04’
and A.分数<( ’<换成IN
select AVG(分数) from 成绩信息 A, 学生信息 B
where A.学生编号=B.学号 AND A.课程编号 =‘1004’ and A.考试编号=‘04’
) -
嵌套子查询*
select A.成绩编号,A.分数,B.姓名
from 成绩信息 A,学生信息 B
where A.学生编号=B.学号 AND A.课程编号 =‘1004’ AND A.考试编号 =‘04’
and B.学号 IN(
select 学号 from 班级信息 A, 学生信息 B
where A.班级编号=B.所属班级 and A.辅导员 =(
select 辅导员编号 from 辅导员信息 where 姓名=‘4’
)
) -
XML查询*
create table student
(
S_ID int,
S_data xml
)
insert into student values(
1,
‘<学生信息><姓名>刘倩</姓名><性别>女(/性别)<班级>计算机科学与技术1班</班级>
<职位>班长</职位></学生信息>’
)
select * from student -
For xml 子句*
通过FOR XML子句并指定模式可以将从数据库系统的表中检索出来的数据i自动表示成XML格式。
FOR XML子句的显示模式: RAW模式、AUTO模式、explicit 模式、和path 模式。
实践:
select a.班级名,a.班级人数,b.姓名,b.联系方式
from 班级信息 a,辅导员信息 b
where a.辅导员=b.辅导员编号
for xml auto ’标识大的字体是模式 -
EXISTS关键字查询*
新建查询实践:
declare @username varchar(20)
declare @pwd varchar(20)
set @username=‘101’
set @pwd =‘田航’
if exists(select * from 学生信息 where 学号=@username and 姓名=@pwd)
print ‘登陆成功’
else
print’登陆失败’ -
交查询INTERECT*
实践:
select a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b
where a.学生编号=b.学号 and a.课程编号 =1004 and a.考试编号=‘04’
intersect
select a.成绩编号,a.分数,A.姓名 from
(
select top 10 a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b
where a.学生编号=b.学号 and a.考试编号=‘04’ order by a.分数 desc
) A -
差查询 EXCEPT*
实践:
select a.成绩编号,a.分数,b.姓名
from 成绩信息 a,学生信息 b
where a.学生编号=b.学号 and a.课程编号 =1004 and a.考试编号=‘04’ -
Except ’查询关键字*
select a.成绩编号,a.分数,A.姓名 from
(
select top 10 a.成绩编号,a.分数,b.姓名
from 成绩信息 a,学生信息 b
where a.学生编号=b.学号 and a.考试编号=‘01’ order by a.分数 desc
) A