`
zhengdl126
  • 浏览: 2509976 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

【汇总】mysql join

 
阅读更多

标准SQL中CROSS JOIN交叉连接(笛卡尔积)和内连接INNER JOIN不同,但是MySQL中两者是相同的,即有[CROSS | INNER] JOIN,两者可以互相替代,而且可以只使用JOIN


1. 笛卡尔积(交叉连接)
在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','

SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1 JOIN table2
SELECT * FROM table1,table2

由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。
一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN

2. 内连接INNER JOIN
在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件
在MySQL中CROSS和INNER JOIN被划分在一起,不明白。
参看MySQL帮助手册
http://dev.mysql.com/doc/refman/5.0/en/join.html
join_table:
    table_reference [INNER | CROSS] JOIN table_factor [join_condition]



根据后面的on过滤条件将CROSS JOIN 转换为 INNER JOIN


USING子句,如果连接的两个表连接条件的两个列具有相同的名字的话可以使用USING

 

 

 

==================== left join,right join,inner join

 

 

下面是例子分析
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115

表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408

创建这两个表SQL语句如下:
CREATE TABLE a
aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,
aNum char( 20 )
)
CREATE TABLE b(
bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
bName char( 20 )
)

INSERT INTO a
VALUES ( 1, 'a20050111' ) , ( 2, 'a20050112' ) , ( 3, 'a20050113' ) , ( 4, 'a20050114' ) , ( 5, 'a20050115' ) ;

INSERT INTO b
VALUES ( 1, ' 2006032401' ) , ( 2, '2006032402' ) , ( 3, '2006032403' ) , ( 4, '2006032404' ) , ( 8, '2006032408' ) ;

实验如下:
1.left join(左联接)

sql语句如下:
SELECT * FROM a
LEFT JOIN b
ON a.aID =b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)

结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.


2.right join(右联接)

sql语句如下:
SELECT * FROM a
RIGHT JOING b
ON a.aID = b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)

结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join(相等联接或内联接)

sql语句如下:
SELECT * FROM a
INNER JOIN b
ON a.aID =b.bID

等同于以下SQL句:
SELECT *
FROM a,b
WHERE a.aID = b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录 .

 

 

 

分享到:
评论

相关推荐

    MySQL 5权威指南(第3版) 中文版 下载地址

     9.5 涉及多个数据表的关联查询(LEFT/RIGHT JOIN)  9.6 合并查询结果(UNION)  9.7 分组查询,统计函数(GROUP BY)  9.8 修改数据(INSERT、UPDATE和DELETE)  9.9 创建数据表、数据库和索引  第10章...

    MySQL命令大全

    MYSQL常用命令 1.导出整个数据库 mysqldump -u 用名 -p –default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 ...

    MySQL 数据库面试题

    这是一个汇总了十道常见 MySQL 面试题以及详细答案的资源。涵盖了数据库事务、索引、关系型数据库与非关系型数据库的区别、数据库范式、主键和外键、JOIN 操作、数据库索引、备份和恢复、数据库连接池以及提高数据库...

    MYSQL常用命令大全

    MYSQL常用命令 1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 ...

    MySQL5 权威指南第3版中文版_part1

     9.5 涉及多个数据表的关联查询(LEFT/RIGHT JOIN)  9.6 合并查询结果(UNION)  9.7 分组查询,统计函数(GROUP BY)  9.8 修改数据(INSERT、UPDATE和DELETE)  9.9 创建数据表、数据库和索引  第10章 SQL...

    202311月最新MySQL-71到精选面试题题及答案涵编程题和存储知识点-20231120.pdf

    MySQL面经文档,其中包含了一些常见的面试编程题和...这个汇总的MySQL面经文档是一个有价值的资源,可以帮助面试者对MySQL面试的类型、难度和覆盖范围有一个全面的了解,并提供了一些常见的面试编程题和技术要点供复

    Mysql常用sql语句汇总

    1、mysql 导出文件: SELECT `pe2e_user_to_company`.company_name, `pe2e_user_to_company`.company_code, `users`.name, `users`.uid, `users`.mail, `pe2e_email_notification_email`.`email_cc` FROM `users` ,...

    MySQL基础学习5

    文章目录聚合函数sum求和avg平均数max最大值min最小值year求年龄count查询数据个数group by分组with rollup数据总汇having分组筛选join多表查询inner join内连接[outter] join外连接left [outer] join左连接right ...

    基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程.txt

    ├─(36) inner join 的学习.sql ├─(37) union all的学习代码.sql ├─(38) 外关联介绍.sql ├─(39) 示例数Ju.sql ├─(40) 示例数Ju.txt ├─(41) 示例表.xlsx ├─(42) 笛卡尔积的知识介绍.sql (10)\SQL...

    MySQL查询语法汇总

    本篇文章主要简介下MySQL中where,group by ,order by ,limit,join,union ,union all,子表等查询语法。 测试数据准备 create table emp ( empno numeric(4) not null, ename varchar(10), job varchar(9), mgr ...

    全国省市区县街道四级sql

    自己通过网上各个资源整合,汇总出的比较全面的全国省市区县街道数据。将该SQL导入数据库执行例如:SELECT p.province 省份,c.city 城市,b.area 区名,a.county 街道全称,a.short_county 街道简称 ,a.`longitude` ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例013 安装MySQL数据库服务器 26 实例014 安装PHP.50 28 实例015 第4个PHP程序 30 1.5 XAMPP——Linux版PHP集成化安装包 31 实例016 XAMPP——Linux下PHP开发环境的集成化 31 实例017 Linux操作系统下启动XAMPP 32...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例013 安装MySQL数据库服务器 26 实例014 安装PHP.50 28 实例015 第4个PHP程序 30 1.5 XAMPP——Linux版PHP集成化安装包 31 实例016 XAMPP——Linux下PHP开发环境的集成化 31 实例017 Linux操作系统下启动XAMPP 32...

    PHP程序开发范例宝典III

    实例222 使用聚集函数SUM对学生成绩进行汇总 344 实例223 使用聚集函数AVG求某班学生的平均成绩 346 实例224 使用聚集函数MIN求销售额、利润最少的商品 347 实例225 使用聚集函数MAX求月销售额完成最多的销售...

    matlab导入excel代码-utl_select_a_sas_wps_dataset_from_windows_explorer_and_

    join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph ...

    matlab代码输入如何换行符-utl_sort_transpose_and_summarize_in_one_proc_v2:在一个过程中对

    join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS Access JSON图形映射NLP自然语言处理机器学习igraph ...

    matlab导入excel代码-utl_transposing_and_summarizing_a_matrix_that_lacks_row

    缺少行标识符的转置和汇总矩阵。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS Scala Perl CC#Excel MS ...

    程序员的SQL金典.rar

     7.2 内连接(INNER JOIN)  7.3 不等值连接  7.4 交叉连接  7.5 自连接  7.6 外部连接  7.6.1 左外部连接  7.6.2 右外部连接  7.6.3 全外部连接 第8章 子查询  8.1 子查询入门  8.1.1 单值子查询  8.1.2...

    程序员的SQL金典6-8

     4.1.5 数据汇总  4.1.6 排序  4.2 高级数据过滤  4.2.1 通配符过滤  4.2.2 空值检测  4.2.3 反义运算符  4.2.4 多值检测  4.2.5 范围值检测  4.2.6 低效的“WHERE 1=1”  4.3 数据分组  4.3.1 数据分组...

Global site tag (gtag.js) - Google Analytics