搜索
首页数据库mysql教程mysql多表联合查询

mysql多表联合查询

May 09, 2019 pm 04:15 PM
mysql

内连接INNER JOIN在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件。在MySQL中CROSS和INNER JOIN被划分在一起。

mysql多表联合查询

多表连接类型

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被划分在一起。 join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]

3. MySQL中的外连接,分为左外连接和右连接,即除了返回符合连接条件的结果之外,还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。

例子:

user表:
id | name
———
1 | libk
2 | zyfon
3 | daodao
user_action表:
user_id | action
—————
1 | jump
1 | kick
1 | jump
2 | run
4 | swim

sql语句:

select id, name, action from user as uleft join user_action a on u.id = a.user_id

结果:

id | name   | action
——————————–
1  | libk  | jump     结果1      
1  | libk  | kick     结果2        
1  | libk  | jump     结果3       
2  | zyfon  | run      结果4          
3  | daodao | null     结果5         
---------------------

分析:

注意到user_action中还有一个user_id=4, action=swim的纪录,但是没有在结果中出现,

而user表中的id=3, name=daodao的用户在user_action中没有相应的纪录,但是却出现在了结果集中

因为现在是left join,所有的工作以left为准.

结果1,2,3,4都是既在左表又在右表的纪录,5是只在左表,不在右表的纪录

工作原理:

从左表读出一条,选出所有与on匹配的右表纪录(n条)进行连接,形成n条纪录(包括重复的行,如:结果1和结果3),如果右边没有与on条件匹配的表,那连接的字段都是null.然后继续读下一条。

引申:

我们可以用右表没有on匹配则显示null的规律, 来找出所有在左表,不在右表的纪录, 注意用来判断的那列必须声明为not null的。

如:

select id, name, action from user as uleft join user_action a on u.id = a.user_idwhere a.user_id is NULL

(注意:1.列值为null应该用is null 而不能用=NULL

         2.这里a.user_id 列必须声明为 NOT NULL 的.)

上面sql的result:

id | name | action
————————–
3 | daodao | NULL

以上是mysql多表联合查询的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何在mysql中找到大桌子如何在mysql中找到大桌子Jul 23, 2025 am 02:20 AM

在MySQL中查找大表,可通过查询系统表或检查物理文件实现。1.使用information_schema.TABLES表,执行SQL语句筛选出数据量大、占用空间多的表,并按大小排序;2.通过服务器访问权限进入MySQL数据目录,使用命令查看.ibd文件大小定位大表;3.结合索引和碎片情况分析真实“大”表,利用DATA_FREE字段查看碎片空间,必要时执行OPTIMIZETABLE进行优化。以上方法分别从统计信息、物理文件和存储效率三方面帮助识别并处理影响性能的大表问题。

有效地管理MySQL中的大对象(斑点/文本)有效地管理MySQL中的大对象(斑点/文本)Jul 23, 2025 am 02:11 AM

处理MySQL中的大对象(BLOB/TEXT)需注意性能与设计。1.根据数据类型选择BLOB或TEXT,TEXT适用于文本,BLOB用于二进制内容,并注意字符集影响。2.避免在频繁查询字段中使用大对象类型,建议拆分到单独表并通过外键关联。3.合理使用索引,如前缀索引或FULLTEXT索引,避免盲目添加普通索引。4.优先使用InnoDB存储引擎并优化配置,如开启innodb_file_per_table和考虑分区策略,以提升大对象处理效率。

实施MySQL代理以进行负载平衡和故障转移实施MySQL代理以进行负载平衡和故障转移Jul 23, 2025 am 02:09 AM

MySQLProxy是一个轻量级数据库中间件,用于实现负载均衡与故障转移。其核心功能包括:1.查询分析与重写;2.负载均衡;3.故障切换。配置负载均衡需通过Lua脚本控制流量,例如将SELECT请求轮询发送至多个从库。故障转移则需脚本监听连接状态,标记失败节点并临时跳过。使用时需注意:1.单线程模型可能影响高并发性能;2.Lua脚本开发需一定能力;3.缺乏内置健康检查;4.连接池支持有限。总体而言,它适合资源有限、需求简单的场景。

为混合云环境确保MySQL为混合云环境确保MySQLJul 23, 2025 am 01:55 AM

MySQL数据库在混合云环境中的安全配置需重点从以下四方面着手:1.网络访问控制是第一道防线,应通过防火墙规则、绑定指定网络接口、使用VPC对等连接等方式限制数据库暴露范围;2.启用并正确配置SSL加密连接,确保数据传输安全,防止中间人攻击;3.用户权限和认证策略要精细化,遵循最小权限原则,创建专用账号并限制来源;4.定期审计和日志监控,利用日志分析平台及时发现异常行为,提升整体安全性。

为MySQL数据库构建灾难恢复计划为MySQL数据库构建灾难恢复计划Jul 23, 2025 am 01:49 AM

AsolidMySQLdisasterrecoveryplanrequiresunderstandingpriorities,choosingtherightbackupstrategy,settingupreplication,andpracticingrecovery.1.IdentifycriticaldatabasesanddefineRPO/RTOtodeterminebackupfrequency.2.Choosebetweenfullorincrementalbackupsusin

使用Percona工具包MySQL数据库监视使用Percona工具包MySQL数据库监视Jul 23, 2025 am 01:46 AM

PerconaToolkit可通过四个核心工具实现MySQL监控:1.使用pt-query-digest分析慢查询日志,定位耗时SQL;2.用pt-heartbeat监控主从复制延迟,检测延迟时间;3.通过pt-variable-advisor检查配置风险,获取优化建议;4.利用pt-online-schema-change在结构变更时观察性能影响。这些工具轻量高效,适合快速诊断与监控MySQL运行状态。

设计库存管理的MySQL数据库设计库存管理的MySQL数据库Jul 23, 2025 am 01:42 AM

设计库存管理数据库需明确核心表结构、处理库存变化方式、优化查询与报表、考虑扩展性。1.核心表包括商品(Products)、仓库(Warehouses)、库存(Inventory)、出入库记录(Transactions),各表有明确字段并通过外键关联确保一致性。2.库存变化通过事务式更新处理,出入库操作先写入Transactions再更新Inventory,使用事务避免并发问题,并进行负值检查。3.查询优化包括在Transactions表建立复合索引、使用视图简化逻辑、生成汇总表加速报表。4.扩展

实施MySQL数据版本和审核实施MySQL数据版本和审核Jul 23, 2025 am 01:42 AM

totrackchangesinamysqldatabase,usehistorytableswithtriggersorapplication-levellogging.1.createashadowtableforeachTrackedTable使用ExtrafieldSlikereVision \ _id,修订\ _type,rupision \ _timestamp,andrevision \ _user.2.usetriggerstoautaimanticallogationallogationallogationallogchangesbe

See all articles

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器