SQL Sever联接查询

简介: 作者主页:https://www.couragesteak.com/

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

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

在这里插入图片描述

1. 内部联接

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

select * from SC
join Student
on Student.Sno = SC.Sno
AI 代码解读

在这里插入图片描述

2. 外部联接

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

2.1 左向外联接

语法

select fieidlist from table1 
left join table2
on table1.comlumnn=table2.column
AI 代码解读

参数说明:

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

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

select * from Student
left join SC
on Student.Sno=SC.Sno
AI 代码解读

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

2.2 右向外联接

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

语法:

select fieldlist from table1 
right join table2
on table1.column=table2.column
AI 代码解读

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

select * from SC
right join Course
on Course.Cno=SC.Cno
AI 代码解读

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

2.3 完整外联接

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

语法:

select fieldlistfrom table1 
full join table2
on table1.column=table2.column
AI 代码解读

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

select * from SC
full join Course
on Course.Cno=SC.Cno
AI 代码解读

在这里插入图片描述

3. 交叉联接

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

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

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

    语法:

select fieldlist from table1
cross join table2
AI 代码解读

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

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

select * from Student
cross join Course
AI 代码解读

在这里插入图片描述

4. 联接多表

4.1 在where子句中联接多表

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

语法:

select fieldlist from table1, table2, table3 ...
where table1.column=table2.column
and table2.column=table3.column and ...
AI 代码解读

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

select * from Student,Course,SC
where Student.Sno=SC.Sno
and SC.Cno=Course.Cno
AI 代码解读

在这里插入图片描述

4.2 在 from 子句中联接多表

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

select fieldlist from table1
join table2
join table3...
on table1.column=table2.column
and tbale2.column=table3.column
AI 代码解读

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

select * from Student
join SC
join Course
on SC.Sno=Course.Cno
on Student.Sno=SC.Sno
AI 代码解读

在这里插入图片描述

5. 使用 case 函数进行查询

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

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

简单 case 函数的语法如下:

case input_expression
    when when_expression then result_expression
    [...n]
    [
    else else_result_expression
    ]
end
AI 代码解读

case 搜索函数的语法如下:

case
    when Boolean_expression then result_expression
    [...n]
    [
    else else_result_expression
    ]
end
AI 代码解读

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

select ProductNumber, Category = 
    case productLine
        when 'R' then 'Rpad'
        when 'M' then 'Mountain'
        when 'T' then 'Touring'
        when 'S' then 'Other sale items'
        else 'Not for sale'
    end
  Name
from Production.Product
order by ProductNumber
AI 代码解读

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

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

在这里插入图片描述

使用 case 语句更新

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

update Student
set Sage=
case when Sex='男' then Sage-1
when Sex = '女' then Sage+1
end
AI 代码解读

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

目录
打赏
0
0
0
0
185
分享
相关文章
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
136 77
|
23天前
|
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
43 17
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
89 6
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
357 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
105 9
|
3月前
|
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
53 8
|
3月前
|
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
104 4
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
125 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等