热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLSever联接查询

联接查询:是有一个笛卡尔乘积运算再加一个选取运算构成的查询。首先用笛卡尔乘积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,

联接查询:是有一个笛卡尔乘积运算再加一个选取运算构成的查询。
首先用笛卡尔乘积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。
联接的全部意义在于水平方向上合并两个数据集合,并产生一盒新的结果集合。
联接可分为以下几类:内部联接、外部联接、交叉联接


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


1. 内部联接

内部联接是使用比较运算符比较要联接列中的值得联接。内连接也叫联接,最早被称为普通联接或自然联接。
内联接是从结果中删除其他被联接表中没有匹配行的所有行,所以内联接可能会丢失信息。

select * from SC
join Student
on Student.Sno = SC.Sno

在这里插入图片描述


2. 外部联接

外部联接则扩充了内联接的功能,会吧内联接中删除表源中的一些保留下来,由于保留下来的行不同,可将外部联接分为 左向外部联接右向外部联接完整外部联接


2.1 左向外联接

语法

select fieidlist from table1
left join table2
on table1.comlumnn=table2.column

参数说明:


参数说明
fieldlist搜索条件
table1 [inner] join table2将table1表与table2表进行外部联接
table1.column=table2.columntable1表中与table2表中相同的列

eg. 把Studnet表和SC表左外连接,第二个表SC有不满足联接条件的行,则用NULL表示 。

select * from Student
left join SC
on Student.Sno=SC.Sno

在这里插入图片描述
解析:这里出现NULL说明SC表中没有Sno等于4和6的


2.2 右向外联接

右外向联接使用 right jion 进行联接,是左向外联接的反向联接。将返回右表的所有行。如果右表的某一行在左表中没有匹配行,则将为坐标返回空值。

语法:

select fieldlist from table1
right join table2
on table1.column=table2.column

eg. 把SC表和Course表右外联接,第一个表SC有不满足联接条件的行,则用NULL表示。

select * from SC
right join Course
on Course.Cno=SC.Cno

这里右外联接的是Course表,所以Course表的数据完整
在这里插入图片描述


2.3 完整外联接

完整外连接使用 full join 进行联接,将返回左表和右表中的所有行。当某一行在另一个表中没有匹配时,另一个表的选择列表将包含空值。如果表之间有匹配行,则将整个结果集行包含基表的数据值。

语法:

select fieldlistfrom table1
full join table2
on table1.column=table2.column

eg. 把SC表和Course表完整外部联接,显示两个表中所有的行。

select * from SC
full join Course
on Course.Cno=SC.Cno

在这里插入图片描述


3. 交叉联接

交叉联接使用 cross join 进行联接,没有where子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集得大小。

交叉联接中列和行的数量是这样计算的:


  • 交叉联接中的列=原表中列的数量总和(想加)。
  • 交叉联接中的行=原表中行数的积(相乘)。

语法:

select fieldlist from table1
cross join table2

其中,忽略 on 方法来创建交叉联接。

eg. 把 Student 表和 Course 表进行交叉联接。

select * from Student
cross join Course

在这里插入图片描述


4. 联接多表


4.1 在where子句中联接多表

在 from 子句中写联接多个表的名称,然后将任意两个表的联接条件分别写在 where 子句后。

语法:

select fieldlist from table1, table2, table3 ...
where table1.column=table2.column
and table2.column=table3.column and ...

eg. 把 Student 表、Course 表和 SC 表,这3个表在 where 子句中联接。

select * from Student,Course,SC
where Student.Sno=SC.Sno
and SC.Cno=Course.Cno

在这里插入图片描述


4.2 在 from 子句中联接多表

在 from 子句中联接多个表示内部联接的扩展。
语法:

select fieldlist from table1
join table2
join table3...
on table1.column=table2.column
and tbale2.column=table3.column

eg. 把 Student表、Course表 和 SC表,这3个表在from子句中联接。

select * from Student
join SC
join Course
on SC.Sno=Course.Cno
on Student.Sno=SC.Sno

在这里插入图片描述


5. 使用 case 函数进行查询

case 函数用于计算条件列表并返回多个可能结果表达式之一。
case函数具有以下两种格式:


  • 简单case函数将某个表达式与一组简单表达式进行比较以确定结果。
  • case搜索函数计算一组不二表达式以确定结果。

简单 case 函数的语法如下:

case input_expressionwhen when_expression then result_expression[...n][else else_result_expression]
end

case 搜索函数的语法如下:

casewhen Boolean_expression then result_expression[...n][else else_result_expression]
end

在 select 语句中,简单 case 函数仅检查是否相等,而不进行其他比较。本实例使用 case 函数更改产品系列类别的显示,以使这些类别更容易理解。

select ProductNumber, Category = case productLinewhen 'R' then 'Rpad'when 'M' then 'Mountain'when 'T' then 'Touring'when 'S' then 'Other sale items'else 'Not for sale'endName
from Production.Product
order by ProductNumber

eg. 查询SC表中的Sno和Cno,如果分数 >=90为优秀,>=80为良好

select Sno,Cno,等级=case
when Grade >=90 then '优秀'
when Grade >=80 then '良好'
else '不及格'
end
from SC

在这里插入图片描述


使用 case 语句更新

使用 case 语句更新学生信息,使所有男生年龄减 1 ,所有女生年龄加 1 ,

update Student
set Sage=
case when Sex='男' then Sage-1
when Sex = '女' then Sage+1
end

在这里插入图片描述
官方地址:
https://www.920vip.net/article/87


推荐阅读
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
author-avatar
克阳光沫沫的幸福
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有