多表数据查询

浏览: 1272

在连接查询中,我们要实现两张或多张表之间的数据查询,通常多表数据查询的实现方式分为两种:

(1)表之间连接

笛卡尔积,简单指对没有连接条件表关系返回的结果,检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。而在表关系的笛卡尔积数据记录中,按照相应字段值的比较条件进行选择生产一个新的关系,分为外连接,内连接和交叉连接等等。不要联结不必要的表。联结的表越多,性能下降越厉害。

left join,right join,inner join,full outer join

SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
写法二:
SELECT vend_name, prod_name, prod_price
FROM Vendors ,Products
where
Vendors.vend_id = Products.vend_id
写法三:
SELECT vend_name, prod_name, prod_price
FROM Vendors join Products
USING(vend_id);
连接三张表:
SELECT A.1, B.1,C.1
FROM A INNER JOIN (B,C)
ON A.1 = B.1 AND B.2 =C.1 ;

步骤:确定需要查询的表和所查询字段的来源,再确定关联匹配条件,同时添加消除笛卡尔积的匹配条件。

(2)采用子查询

所有的表查询都可以通过连接进行查询,但是sql语句在执行过程中,会对两个表进行笛卡尔积操作,要先查看两个数据表操作笛卡尔积后的数据记录数,如果查询到的数据记录数mysql可以接受,然后再进行多表连接查询,否则考虑到效率问题,必须改用其他方式进行实现,通过子查询实现多表查询。

所谓的子查询是在查询中嵌套其他的若干查询,即在一个select查询语句的where或者from子句中包含另一个select查询语句。

通过子查询可以实现多表查询,该查询语句中可能包含in,any,all,等关键字除此之外还有比较运算符。

SELECT A.1, A.2,A.3
FROM A
where (A.1,A.2)=(select A.1,A.2 from A where A.4>N);

(3)from通过“,”区分表,添加where条件进行查询


补充:SQL允许给表名起别名,可以使用as指代,或者直接写在后面,一方面,可以缩短sql语句,另一方面,在一条select语句中多次使用相同的表时比较方便。

以上仅是基于我目前的学习,如果有误,感谢帮我指出~

推荐 0
本文由 晓薇 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册