博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
联接查询
阅读量:5303 次
发布时间:2019-06-14

本文共 1590 字,大约阅读时间需要 5 分钟。

一. 交叉联接

交叉联接的格式为:表 1 CROSS JOIN 表 2,主要目的是求出两张表的笛卡尔积,即
返回两张表数据的乘积组合。这里用户表和身份证表做演示:
//实现用户表和身份证表的笛卡尔积
SELECT * FROM think_user CROSS JOIN think_card;
所以笛卡尔积,就是两张表所有列的组合。如果用户表有 5 条数据,身份证表有 4 条
数据,那么最后的结果就是 5 * 4 = 20 条数据。
//过滤筛选出用户和身份证对应的信息
SELECT * FROM think_user u CROSS JOIN think_card c WHERE u.id=c.uid;
//联接指定的对应数据,结果同上
SELECT * FROM think_user u CROSS JOIN think_card c ON u.id=c.uid;
PS:WHERE 和 ON 都是过滤筛选,只不过 ON 是在两个表联接时就过滤不满足条件的数
据,而 WHERE 是把所有数据读完后再过滤掉数据。
二. 内联接
内联接格式为:表 1 INNER JOIN 表 2;在 MySQL 中,CROSS JOIN 交叉联接基本等
于 INNER JOIN 内联接,以上的三种写法,都可以使用 INNER JOIN。
一般来说,除非你就是要输出笛卡尔积表,可以使用 CROSS JOIN 来完成。而带有过滤
条件的,都建议使用 INNER JOIN。如果使用 INNER JOIN 却不带过滤条件,就等于 CROSS
JOIN。
//INNER JOIN 联接两张表
SELECT * FROM think_user u INNER JOIN think_card c ON u.id=c.uid;
//INNER JOIN 可以省略 INNER
SELECT * FROM think_user u JOIN think_card c ON u.id=c.uid;
//没有条件的 INNER JOIN 就是 CROSS JOIN 实现笛卡尔积
SELECT * FROM think_user INNER JOIN think_card;
//先使用 ON 来联接将要处理的数据表,然后在用 WHERE 过滤更精确的数据
SELECT * FROM think_user u INNER JOIN think_card c ON u.id=c.uid WHERE
u.id>2;
PS:ON 一般用于两张表字段的联接,而 WHERE 作为联接后的过滤来使用。
三. 外联接
外联接格式为:表 1 [LEFT|RIGHT] OUTER JOIN 表 2,在外联接联接两张表时,是
不可以使用 WHERE 的,必须使用 ON。
//通过左联接来查找对应的身份证信息,没有身份证的用户,身份证信息将为 NULL
SELECT * FROM think_user u LEFT OUTER JOIN think_card c ON u.id=c.uid;
//找出没有身份证的用户
SELECT * FROM think_user u LEFT OUTER JOIN think_card c ON u.id=c.uid
WHERE c.id IS NULL;
//通过右联接来查找对应的用户信息,没有找到的,用户信息将为 NULL
SELECT * FROM think_user u RIGHT OUTER JOIN think_card c ON u.id=c.uid;
PS:和 INNER JOIN 一样,这里的 OUTER 关键字可以省略。

转载于:https://www.cnblogs.com/yesterday679/p/4441846.html

你可能感兴趣的文章
跨域——同源策略(译)
查看>>
多维数组,转化为一维数组多种解决方案
查看>>
VS2010和matlab混合编程时的图像矩阵传递
查看>>
『Python CoolBook』数据结构和算法_字典比较&字典和集合
查看>>
小程序:迁移服务器后,后台管理系统正常,但对外的接口访问不了。
查看>>
学习进度条02
查看>>
一道概率题
查看>>
COM Tip(2)
查看>>
stp协议
查看>>
Java通过JDBC 进行Dao层的封装
查看>>
cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded 解决方法
查看>>
webstorm常用功能快捷方式
查看>>
获取类名函数的方法
查看>>
mysql 数据库性能优化之SQL优化
查看>>
Shell调试
查看>>
Python 异常结构
查看>>
android一些系统相关的东西
查看>>
linux文件系统命令(6)---touch和mkdir
查看>>
最终有SpringMvc与Struts2的对照啦
查看>>
【github课程】创建github仓库和库创建一个版本号,并添加到存储库文件的版本号...
查看>>