多表查询
Posted sly-mi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表查询相关的知识,希望对你有一定的参考价值。
单表查询:从一张表中查询数据
SELECT 列名1,列名2,列名3 FROM 表名
从多张表中查询数据
SELECT <selectlist> FROM 表名1,表名2
多表查询,如果没有连接条件,会产生笛卡儿积
数学中的定义:假设集合A={a,b},集合B{0,1,2}则两个集合的笛卡尔积为(a,0)(a,1),(a,2),(b,1),(b,2),(b,0)。
实际运行环境下应避免使用笛卡儿集
查询所有的商品信息+对应的商品分类信息
解决方案:在WHERE加入有效的连接条件---->等值连接
注意:连接n张表至少需要n-1个连接条件。
主键约束(PRIMARY KEY):
外键约束(FOREING KEY):
A表中的外键列的值必须引用B表的某主键列
注意:在mysql中InnoDB支持事务和外键。
修改表的存储引擎为InnoDB:
ALTER TABLE 表名 ENGINE=`InnoDB`;
注意:外键关联的两张表必须都要改。
一般我们在定义外键的时候,创建表时习惯这样起名
引用表名(缩写)_引用表名,
KEY `外键列名` (外键名),
CONSTRAINT `外键约束名称` FOREING KEY (外键列名) REFERENCES `B表名`(·id·)
---------------------------------------------
为了提高性能而故意删除外键约束,此时我们可以通过JAVA代码来控制数据的合理性,
InnoDB存储引擎支持主键有支持事务。
--------------------------------------------------------------------------------
内链接查询:进行连接的两个表对应的相匹配的字段完全相同的连接
隐式内连接:SELECT <selectlist> FROM A,B WHERE A.列=B.列
显示内链接: SELECT <selectlist> FROM A[INNER] JOIN B ON A.列=B.列
使用表名前缀在多个表中区分相同的列。
在不同的表中具有相同的列名的列可以用表的别名加以区分。
使用别名可以简化查询。
使用表名前缀可以提高执行效率。
如果使用了表的别名,则不能使用表的真名。
以上是关于多表查询的主要内容,如果未能解决你的问题,请参考以下文章