多表连接

多表连接

  前面我们演示的是两张表的连接,那么可不可以3张表或更多的表进行连接呢?当然是可以的。实际上他和两张表的连接是基本相同的。

  下面我们就以商品表、商品类别表、商品品牌表为例来给大家做一下演示。操作命令及部分结果如下。

SELECT   goods_id,goods_name,cate_name,brand_name,goods_price    FROM   tdb_goods   AS   a    INNER   JOIN   tdb_goods_cates    AS  b  ON   a.cate_id = b.cate_id  
INNER   JOIN   tdb_goods_brands    AS  c   ON   a.brand_id = c.brand_id \G; 

   a、b和c都是别名。

  我们发现是这样一个结果,跟我们最初查看商品表的信息基本一样。不一样的是我们这是通过多表连接实现的而之前是纯粹的通过单表的查询实现的。

  其实,我们现在可以发现,我们表的连接实际上就是外键约束的逆向操作,我们通过外键把数据分开来存储,我们又通过连接把多张表连接到一块来处理。这就是我们学习的简单的多表连接

关于连接的补充说明:

  1、下面我们来看一下这个例子A LEFT JOIN B join_conditio

  这是一个典型的左外连接,数据表B的结果集依赖数据表A,也就是说数据表A中有的记录在B表中才显示出来。否则B表中不能显示。我们再往下看数据表A的结果集根据左连接条件依赖所有数据表(B表除外)左外连接条件决定如何检索数据表B(在没有指定WHERE 条件的情况下) 也就是说A表来决定着B表,如果数据表A的某条记录符合WHERE条件,但是在数据表B中不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。这句话的意思就是有符合条件的就连接,没有的就显示为NULL,这就是左外连接的一点补充说明,当然右外连接调一下方向就行。

  2、如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试以下操作:col_name IS NULL时,如果col_name被定义为NOT NULL,MySQL将在找到符合连接条件的记录后停止搜索更多的行。

  这个应该很好理解,就是说你在查找的时候是NULL的,但是你在定义的时候却说不能为NULL,这样两者就会产生冲突,所以说就会在查找到符合连接条件的记录后就会停止搜索。Ok,这就是对连接做的一个简单的补充。

时间: 2024-10-14 09:02:41

多表连接的相关文章

SQL Server三种表连接原理

http://msdn.microsoft.com/zh-cn/library/dn144699.aspx 简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join这三种物理连接中的一种.理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述. 嵌套循环连接(Nested Loop J

每天一点数据库之-----Day 9 表连接

每天一点数据库之-----Day 9 表连接 ----转载请注明出处:coder-pig 本节引言: 前面我们学习的都是针对一个表来进行操作的,上一节虽然学了UNION这个可以操作多个表 的关键字,但是又有两个限制(查询字段数目与数据类型要相同),本节就来学习通过表连接 来操作多个表!而表连接又有四种: 内连接,外连接,交叉连接与自连接,那么接下来开始本节学习! 数据准备: 在开始学习前,我们先准备一些数据,建三个表:T_Stu,T_Class,T_Dorm 建T_Stu表: CREATE TA

表连接查询与where后使用子查询的性能分析。

子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表连接查询的性能做出一点分析. 对于表连接查询和子查询性能的讨论众说纷纭,普遍认为的是表连接查询的性能要高于子查询.本文将从实验的角度,对这两种查询的性能做出验证,并就实验结果分析两种查询手段的执行流程对性能的影响. 首先准备两张表 1,访问日志表mm_log有150829条记录(相关sql文件已放在

Mysql 表连接查询

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF

Mysql表连接

当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能. 从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录.我们最常用的是内连接. 例如:查询出所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在表emp 和dept 中,因此,需要使用表连接来进行查询: select ename,deptname from emp,dept where emp.deptno=dept.deptno; ename是表emp

oracle 表连接 - hash join 哈希连接

一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集的表连接方法. 哈希连接仅仅能用于等值连接条件(=). 如果以下的 sql 语句中表 T1 和 T2 的连接方式是哈希连接, T1 是驱动表 select * from T1, T2 where T1.id = T2.id and T1.name = 'David'; oracle 运行过程例如以下

MySQL多表查询之外键、表连接、子查询、索引

一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dep

表连接Join

--表连接Join--使用子查询select StudentNo,StudentName,(select classname from Classes where ClassId=Student.ClassId) from Student--使用from多表的方式select Student.StudentNo,Student.StudentName,Classes.classnamefrom Student,Classeswhere student.ClassId=classes.ClassI

Hadoop阅读笔记(三)——深入MapReduce排序和单表连接

继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算方法,更是一种解决问题的新思维.新思路.将原先看似可以一条龙似的处理一刀切成两端,一端是Map.一端是Reduce,Map负责分,Reduce负责合. 1.MapReduce排序 问题模型: 给出多个数据文件输入如: sortfile1.txt 11 13 15 17 19 21 23 25 27

mysql表连接,子查询以及if判断

创建表: CREATE TABLE emp ( ename varchar(10) DEFAULT NULL, hiredate date DEFAULT NULL, sal decimal(10,2) DEFAULT NULL, deptno int(2) DEFAULT NULL, age int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CREATE TABLE dept ( deptno int(2) DEFAULT NUL