mysql 左连接、右连接和内连接_Mysql

脚本如下:
drop table table1;
CREATE TABLE `andrew`.`table1`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE1(name, city) values ('Person A', 'BJ');
insert into TABLE1(name, city) values ('Person B', 'BJ');
insert into TABLE1(name, city) values ('Person C', 'SH');
insert into TABLE1(name, city) values ('Person D', 'SZ');
commit;
drop table table2;
CREATE TABLE `andrew`.`table2`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE2(name, city) values ('Person W', 'BJ');
insert into TABLE2(name, city) values ('Person X', 'SH');
insert into TABLE2(name, city) values ('Person Y', 'SH');
insert into TABLE2(name, city) values ('Person Z', 'NJ');
commit;
1. 外连接 – 左连接结果

table1居左,故谓之左连接。这种情况下,以table1为主,即table1中的所有记录均会被列出。有一下三种情况:
a. 对于table1中的每一条记录对应的城市如果在table2中也恰好存在而且刚好只有一条,那么就会在
返回的结果中形成一条新的记录。如上面Person A和Person B对应的情况。
b. 对于table1中的每一条记录对应的城市如果在table2中也恰好存在而且有N条,那么就会在返回的结果中形成N条新的记录。如上面的Person C对应的情况。
c. 对于table1中的每一条记录对应的城市如果在table2中不存在,那么就会在返回的结果中形成一条
条新的记录,且该记录的右边全部NULL。如上面的Person D对应的情况。
不符合上面三条规则的记录不会被列出。
2. 外连接 – 右连接结果

table2居右,故谓之右连接。这种情况下,以table2为主,即table2中的所有记录均会被列出。有一下三种情况:
a. 对于table2中的每一条记录对应的城市如果在table1中也恰好存在而且刚好只有一条,那么就会在
返回的结果中形成一条新的记录。如上面Person X和Person Y对应的情况。
b. 对于table2中的每一条记录对应的城市如果在table1中也恰好存在而且有N条,那么就会在返回的结果中形成N条新的记录。如上面的Person W对应的情况。
c. 对于table2中的每一条记录对应的城市如果在table1中不存在,那么就会在返回的结果中形成一条
条新的记录,且该记录的左边全部NULL。如上面的Person Z对应的情况。
不符合上面三条规则的记录不会被列出。
3. 内连接

内连接的数据记录中,不会存在字段为NULL的情况。可以简单地认为,内链接的结果就是在左连接或者右连接的结果中剔除存在字段为NULL的记录后所得到的结果。甚至可以认为,如果两个表中仅分别剩下内连接运算后所得的数据记录,如table1中只有Person A、Person B和Person C,table2中只有Person W、Person X和Person Y,那么这两个表的之间的左连接和右连接的返回的结果是一样的。
注意:select * from table1 a inner join table2 b on a.city = b.city 和select * from table1 a join table2 b on a.city = b.city 的效果是一样的,即如果join的左边没有诸如left、right或者inner这样的关键字时,缺省的是内连接。另,MySQL不支持full join。

时间: 2024-08-02 00:35:05

mysql 左连接、右连接和内连接_Mysql的相关文章

求教sql中,如何外连接2个需要内连接的表

问题描述 如题,假设有三个表A,B,C.A需要外连接B,而B要内连接C,sql语句应如何写.在mysql中我是这样写的:select A.* ,B.* ,C.* from A left outer join B on A.id = B.id inner join C on B.name = C.name where ....但是运行时不会得出预期的结果,恳请各位大大指点. 问题补充:hudingchen 写道 解决方案 你把你要的项目加上就可以阿SELECT A.*,M.* FROM A LEF

深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

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

数据库 左连接 右连接 全连接用法小结_数据库其它

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来.所以,在Transact-SQL中推荐使用这种方法.  SQL-92标准所定义的FROM子句的连接语法格式为:  FROM join_table join_type join_table  [ON (join_condition)]  其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接

SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍_MsSql

1. a. 并集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 b. 交集JOIN SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name c. 差集NOT IN SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2) d. 笛卡尔积 SELECT

MySQL左连接、右连接和内连接详解

本文向您简单介绍MySQL的ySQL左连接.右连接和内连接,并对具体的操作情况给出简单示例. 以MySql为例.在MySQL数据库中建立两张数据表,并分别插入一些数据. 示例脚本如下: drop table table1; CREATE TABLE `andrew`.`table1 ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city)

MYSQL 左连接右连接和内连接的详解及区别_Mysql

MYSQL 左连接右连接和内连接的区别,这里就对这些概念经过一个实例,讲解清楚. 代码如下: drop table table1; CREATE TABLE `andrew`.`table1` ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city) values ('Person A', 'BJ'); insert into TABLE

mysql左连接,右连接,内连接应用

/* 左连接:语法 假设a表在左不动,b表在a表的右边上下滑动 a表与b表通过一个关系来筛选b表的行 a left join b on 条件 ,条件为真,则b表对应的行取出 a left join b on 条件 这一块形成的也是一个结果集 可以看成一张表 设为c表 这时,可以对c表做查询 ,where ,group ,having,order by ,limit 照常使用 问 c表的可以查询的列有哪些列? 答: a b 的列都可以查 */ goods left join category on

SQL中内连接,左连接和右连接的区别

MYSQL中可以通过内外键链接,将有关系的表中数据合并到一起进行条件筛选: 首先创建两个新表,数据如下: student 表数据: score 表数据: 可以看到students表中stu_id为16048008的记录对应score表没有数据; 1.当进行内连接时,系统会自动忽略两个表中对应不起来的数据: -- 显示内连接所有数据: SELECT * FROM students st INNER JOIN score sc ON st.sid=sc.stu_id;   数据太多,只截图最末尾的:

mysql的内连接,外连接(左外连接,右外连接)巩固

1:mysql的内连接: 内连接(inner join):显示左表以及右表符合连接条件的记录: 1 select a.goods_id,a.goods_name,b.cate_name 2 from tdb_goods a,tdb_goods_cate b 3 where a.cate_id = b.cate_id; 4 5 <==============上下两种写法等价===============> 6 7 select c.goods_id,c.goods_name,d.cate_nam