表的连接分析(内,自,外连接)

简介: 表的连接分析(内,自,外连接)  下面我会说下数据库的表的连接,建立A,B表数据如下A表B表内连接(inner join)  使用比较运算符(包括=、>、=、和!、=、和!

表的连接分析(内,自,外连接)

  下面我会说下数据库的表的连接,建立A,B表数据如下

A表

这里写图片描述

B表

这里写图片描述

内连接(inner join)

  使用比较运算符(包括=、>、<、<>、>=、<=、!>和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据比较运算符不同,内连接分为等值连接和不等连接两种。

语法

内连接

select * 
from A inner join B  
on A.NO = B.NO 

结果为:

这里写图片描述

1.等值连接

  概念:在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。

select * from tableA A 
innerjoin tableB B  
on A.NO = B.NO 

2、不等连接

  概念:在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)

select * from tableA A 
innerjoin tableB B  
on A.NO <> B.NO

外连接

  
  外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。

左连接(LEFT JOIN或LEFT OUTER JOIN)

  概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

select * 
from A LEFT JOIN B   
ON A.NO = B.NO;

这里写图片描述

  总结:左连接显示左表全部行,右表不足用null补。

右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)

  概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

select * 
from A RIGHT JOIN B   
ON A.NO = B.NO;

这里写图片描述

  同理:右连接恰与左连接相反,显示右表全部行,左表与右表相同行。左表不足用null补足。

全连接(FULL JOIN 或 FULL OUTER JOIN)

  返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

select * from A  
FULL JOIN B   
ON A.NO = B.NO;

这里写图片描述

  总结:返回左表和右表中的所有行。

交叉连接(CROSS JOIN):也称迪卡尔积

  概念:不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积,如果带where,返回或显示的是匹配的行数。

不带where:

select * 
from A  CROSS join B   

等价于下面的

select * 
from  A,B 

这里写图片描述

有where子句

  有where子句,往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择。查询结果跟等值连接的查询结果是一样。

自连接

  自连接是对同一个表进行的连接。要自行一个自连接,必须使用不同的表别名来标识在查询中每次对表的引用。

  自连接查询因为其语法结构简单,而逻辑结构复杂,语义往往不是那么容易被人理解。自连接之前要对数据进行过滤。

sql的简单优化

对Select语句的法则

  • 在应用程序、包和过程中限制使用select * from table这种方式。

对Where 语句的优化

  • 避免在WHERE子句中使用in,not in,or 或者having。

可以使用 exist 和not exist代替 in和not in。
可以使用表链接代替 exist。Having可以用where代替,如果无法代替可以分两步处理。

  • 不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)否则会使索引无效,产生全表扫描。

  • 在WHERE 语句中,尽量避免对索引字段进行计算操作

编写写简单而损害了性能,建议不要为了编写简单而损害性能。

排序

避免使用耗费资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序

相关文章
|
13天前
|
关系型数据库 MySQL 索引
mysql查询中内连接和左连接有什么区别
mysql查询中内连接和左连接有什么区别
15 0
|
SQL 关系型数据库 MySQL
mysql数据库——连接查询(内连接:自然连接,等值连接。外连接:左连接,右连接,全连接)
mysql数据库——连接查询(内连接:自然连接,等值连接。外连接:左连接,右连接,全连接)
1553 0
mysql数据库——连接查询(内连接:自然连接,等值连接。外连接:左连接,右连接,全连接)
|
8月前
|
SQL
SQL 连接(内连接,外连接)
现在有两张表,学生表student1,成绩表SC1,两张表的数据如下
71 0
|
8月前
|
关系型数据库 MySQL 数据库
MySQL查询之 连接查询 - 内连接 左连接 右连接以及全连接
MySQL查询之 连接查询 - 内连接 左连接 右连接以及全连接
|
数据库
子查询与内连接查询区别(效率上,连接查询高于子查询)、左连接以及连接的原理,还有内连接与左连接的区别
子查询与内连接查询区别(效率上,连接查询高于子查询)、左连接以及连接的原理,还有内连接与左连接的区别
1040 0
子查询与内连接查询区别(效率上,连接查询高于子查询)、左连接以及连接的原理,还有内连接与左连接的区别
SQl课程实验(外连接,聚集函数,分组,行数限制)
文章目录 1.看完这篇文章你会得到什么 2.实验内容 1. 查询没有任何学生选学的课程编号和课程名称及学分 2. 查询每个班学生入学成绩最高分和最低分的差距,列名为“最大分差” 3. 查询至少选修了三门课程的学生编号 4.统计各个班级男生和女生的平均年龄及人数。 5.查询至少被两名学生选修的课程名称 6. 查询计算机学院至少有两门课的成绩在80以上的女学生学号、姓名和出生日期及其期末成绩的最高分 7. 查询所选课程期末成绩平均分在85分以上的“女”学生学号、姓名、期末成绩平均分 8. 查询“马克思主义基本原理”期末成绩排在6-10名的学生学号、姓名和期末成绩
SQl课程实验(外连接,聚集函数,分组,行数限制)
基础DQL(数据查询)—— 内连接、外连接、自连接(含实例)
在内连接的例子中,其实会有小的弊端,假设数据中相同属性的部门名称,或者是员工表内部门名称为空的话,就无法通过内连接查询出所有的数据(NULL值无法匹配),会造成一定的误差,所以我们就需要用到外连接来弥补一下。接下来我们就来认识一下外连接
155 0
基础DQL(数据查询)—— 内连接、外连接、自连接(含实例)
|
数据库
数据库-MySQL-基础(10)-内连接,外连接,自连接
目录 内连接 内连接查询语法 案例演示 外连接 外连接查询的语法 案例演示 自连接 自连接查询语法 案例演示
155 0
数据库-MySQL-基础(10)-内连接,外连接,自连接
|
SQL 关系型数据库 MySQL
mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)
多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)
|
SQL 关系型数据库 MySQL
SQL内连接、外连接、全连接、交叉连接、自连接、自然连接区别
本文是博主学习SQL的记录,希望对大家有所帮助
869 0
SQL内连接、外连接、全连接、交叉连接、自连接、自然连接区别

热门文章

最新文章