MySQL的多表查询(笛卡尔积原理)

原文:MySQL的多表查询(笛卡尔积原理)

  1. 先确定数据要用到哪些表。
  2. 将多个表先通过笛卡尔积变成一个表。
  3. 然后去除不符合逻辑的数据(根据两个表的关系去掉)。
  4. 最后当做是一个虚拟表一样来加上条件即可。

 

注意:列名最好使用表别名来区别。

 

 

笛卡尔积

 

 

 

 

Demo:

 

左,右连接,内,外连接

l             内连接:

要点:返回的是所有匹配的记录。

  1. 2.         select * from a,b where a.x = b.x                                                 ////内连接

l             外连接有左连接和右连接两种。

要点:返回的是所有匹配的记录 外加 每行主表外键值为null的一条记录。辅表所有列为null值。

  1. select * from a left join b on a.x=b.x order by a.x  //左外连接或称左连接
  2. select * from a right join b on a.x=b.x order by a.x  //右外连接或称右连接

select子句顺序


子句


说明


是否必须使用


select


要返回的列或表示式



form


从中检索数据的表


仅在从表选择数据时使用


where


行级过滤



group by


分组说明


仅在按组计算聚集时使用


having


组级过滤



order by


输出排序顺序



limit


要检索的行数


时间: 2024-11-17 14:09:24

MySQL的多表查询(笛卡尔积原理)的相关文章

数据库-关于原生mysql语句多表查询更新字段问题 求大神解答

问题描述 关于原生mysql语句多表查询更新字段问题 求大神解答 如题:a表user_id school_id1233 220132346 220172344 234452247 22017... ... b表user_id term2346 12346 12346 22247 21233 1... ... 如上两张表:根据a表中的school_id=22017 得到它的user_id 然后根据此user_id得到b表中的term 并把term=1的变为term=2,把term=2的变为term

java me-关于mysql优化连表查询的问题

问题描述 关于mysql优化连表查询的问题 mysql中查询两张表中的数据,一张表的数据量大,一张数据量小,有一个id关联,但是这个id在两张表都不是主键,怎么 查才能速度快呢?sql大概在下面,数据a表10w条,b表几十条 select * from a a ,b b where a.c_id = b.c_id ORDER BY a.cid limit 1,20 大概要0.8秒,如果去掉排序只要3ms,试过用inner join ,但是有条件的情况下也很慢 解决方案 1.加索引 2.避免用se

mysql SQL 多表查询最优问题

问题描述 mysql SQL 多表查询最优问题 有表 t(t_year,col), t1(t1_year,t1_month,col_1), t2(t2_year,t2_month,col_t2), t3(t3_year,t3_month,col_t3), 和目标表 T(T_year,T_month,col,col_1,col_2,col_3), 将t, t1, t2, t3的数据整合到 T 中,什么样的SQL最优? 解决方案 多个表join,然后设置on的条件判断年,月,日相等条件. 解决方案二

MySQL左联多表查询where条件写法示例_Mysql

复制代码 代码如下: select * from _test a left join _test b on a.id=b.id where a.level='20' and a.month='04' and b.level='20' and b.month='03'; select a.*,b.* from (select * from _test where level='20' and month='04') as a left join (select * from _test where

MySql实现跨表查询的方法详解_Mysql

复制代码 代码如下: SELECT c.id, c.order_id, c.title, c.content, c.create_time, o.last_pic FROM `orders` o , `case` c WHERE c.order_id = o.order_id ORDER BY c.id DESC LIMIT 15; 关于跨表提取字段的方法!利用order_id相同字段,提取case中的id,order_id,title,content,create_time:orders表中的

MySQL数据库锁机制的相关原理

在一个update和insert操作频繁的表中,少量数据测试的时候运行良好,在实际运营中,因数据量比 较大(21万条记录),会出现死锁现象,用show processlist查看,可以看到一个update语句状态是 Locked,一个delete语句状态是Sending data.查看了一下参考手册,把锁定相关的资料整理下来,以便 自己记录和追踪该问题的解决情况: MySQL 5.1支持对MyISAM和MEMORY表进行表级锁定,对BDB表进行页级锁定,对InnoDB 表进行行级锁定 .在许多情

轻松掌握MySQL数据库锁机制的相关原理

在MySQL中对于使用表级锁定的存储引擎,表锁定时不会死锁的.这通过总是在一个查询开始时立即请求所有必要的锁定并且总是以同样的顺序锁定表来管理. 在一个update和insert操作频繁的表中,少量数据测试的时候运行良好,在实际运营中,因数据量比较大(21万条记录),会出现死锁现象,用show processlist查看,可以看到一个update语句状态是Locked,一个delete语句状态是Sending data.查看了一下参考手册,把锁定相关的资料整理下来,以便自己记录和追踪该问题的解决

mysql-MYSQL 简单多表查询,需要大神门帮忙

问题描述 MYSQL 简单多表查询,需要大神门帮忙 请各位大神帮忙.要求:color表要遍历(不重复) 假如modal_id = 1 如果modal_color 表中存在 modal_1 对应status=1

mysql-MySQL中多表查询语句并显示结果到jsp上

问题描述 MySQL中多表查询语句并显示结果到jsp上 我的Java连接了数据库(MySQL的),现在库里十张表,除了表名不一样外,表里内容都一致.现在我想通过后台来根据表名查询每张表,然后把每张表里的内容显示到前台的jsp页面上,请问查询语句应该怎么写? 解决方案 可以用sql的 union 语句连接几个表,组织到一个集合里显示