mysql怎么查询所有的表

这是一个陷阱,不信,不做。

展示表格 锚定:2 008 年,MySQL官方文档推荐,1 条命令。

信息架构 锚定:2 01 1 年,MySQL 5 .0推出,5 条命令。

mysql.tables 锚定:2 005 年,非标准订单,0个结果。

实用提醒:优先考虑SHOW TABLES。

mysql中jion用法 mysql表连接查询教程

嘿嘿,说说实用性吧。
前年,我在上海做一个项目,遇到了不好的问题,都通过JOIN解决了。

让我告诉你有关 INNER JOIN 的信息。
去年在北京,我们做了一个电商报告,要做跟用户的订单匹配。
只需使用它 sql SELECT o.order_id, c.customer_name FROM 订单 o INNER JOIN customer c ON o.customer_id = c.customer_id
这样做的结果是orders表中没有customer_id,或者users表中没有customer_id,所以会直接去掉。
简单、粗暴、高效。

然后是左连接。
去年我在深圳的项目,我必须检查所有用户,是否下过订单。
那一定是 sql SELECT c.customer_id、c.customer_name、o.order_id 来自客户 c LEFT JOIN order o ON c.customer_id = o.customer_id
这种写法。
在结果中,对于没有订单的用户,order_id 列为空。
这非常有用。
例如,如果你想统计没有下订单的用户数量,你可以依靠这个。

JOIN RIGHT 我很少用,去年在杭州发现过一次。
所有订单都必须经过审核,无论是否由我们的用户发出。
就是这样 sql SELECT o.order_id, c.customer_id FROM 订单 o RIGHT JOIN customer c ON o.customer_id = c.customer_id
这个技巧。
orders 表中没有 customer_id,因此块 c 为空。

FULL EXTERNAL JOIN MySQL 不直接支持它。
我从来没有用过它。
他们都是使用LEFT JOIN加RIGHT JOIN来执行。
去年在长沙的项目中,老板坚持要做完整的报告,所以我最后还是做了 sql SELECT FROM table1 LEAVE JOIN table2 ON ... UNION SELECT FROM table1 RIGHT JOIN table2 ON ...
是这样写的。
结果是相当慢。
桌子一出现,足有上万之多,瞬间就冻结了。

索引非常重要。
前年广州的项目中,表有几百小,所以JOIN一直扫描全表,只改变索引。
只需添加一个 sql 在订单上创建索引 idx_customer_id(customer_id); CREATE INDEX idx_customer_id ONcustomers(customer_id);
这样,查询速度会快几个数量级。
EXPLAINING必须被理解,否则就没用。

处理NULL值也很麻烦。
去年成都的项目中,用户没有订单,order_id为空,所以无法直接查询。
我只会使用 sql SELECT customer_name, IFNULL(order_id, '无订单') AS order_status 来自客户 c LEFT JOIN order o ON c.customer_id = o.customer_id
此技巧将 NULL 更改为“无订单”。
只有看过之后你才能明白。

建议打开复杂查询。
去年的武汉项目,一开始把所有的JOIN都写在一起的时候,我很困惑。
然后,我将其分解为更小的查询,并在理解它们之前重新连接它们。
比如先查用户,再查订单,最后合并。

最常用的是 INER JOIN 和 LEFT JOIN。
前年的南京项目,完全就是靠这两个。
多表JOIN,表很多的时候要小心,分批处理,不然会烧CPU。

我尝试过的替代方案。
去年苏州的项目JOIN表较少,直接子查询比JOIN快。
如果表太多,JOIN 会立刻杀掉你。
我很少使用UNION查询,太麻烦了。

对于总结起来,只有几件事:索引!不要忘记索引!只需检查您需要的字段即可! JOIN表达了太多的差异!处理 NULL 值时要小心!定期检查SQL,进行需要更改的更改,并为需要建立索引的添加索引。

JOIN一点也不复杂,但却是最简单的。
关键看你是否在正确的场景下使用。
这就是我这十年来经历的所有坎坷所获得的经验。
你记住了,一定是对的。