数据库查询,多表查询相关inner left right

来源:互联网 发布:mysql function 赋值 编辑:程序博客网 时间:2024/06/08 11:26

在进行多表查询时一主多从


eg:
user表所包含字段有pid(用户详细信息关联的表content)、oid(用户订单关联的表order);那么在查询的时候我们就需要先查询一条user表里面的一条信息、然后根据查询到的pid和oid再分别查询content和order表的信息;将查询的信息放在一个数组中,就可以放到模板中去了

这种查询的特点是与使用多表联查相比,在多次查询的时候可以减轻服务器的压力

原因:多表查询的时候会使得有其中一个表会查询全部的数据

多表联查

学生表联查


select users.*,contacts.phone,orders.price from users left join contacts on users.id=contacts.user_id left join orderson users.id=orders.user_id

下面是详细解释
select users.*,contacts.phone,orders.price
查询users表的全部。contacts表的phone字段,orders表的price字段,
from
users left join contacts
以users表为主,即如果两表交接为空的话将查询出以user表为主的所有的信息;
on users.id=contacts.user_id
查询条件是users表的id字段和contacts表的user_id字段相同
left join orders
以contacts表为主,即如果user表的id字段和orders表的user_id字段交接为空的话将查询出以user表为主的所有的信息;
on users.id=orders.user_id
条件是users的id字段和orders表的user_id字段相同
contacts中文意思:联系

上面语句大概解释:
查询users表的全部,contacts表的phone字段,orders表的price字段。

实例:


表一为学生表stu
表二为成绩表grade

1)select stu.name,grade.number from stu,grade where stu.id=grade.uid查询学生表stu的name字段和成绩表grade的分数number字段where条件是学生表的id字段 = 成绩表的uid字段
使用inner查询出来的信息:如果有学生没有成绩,则不会输出这两个学生的信息;60人参加考试,2人没有成绩就只输出58人的成绩等同于上表 1)
2)select stu.name,grade.number from stu inner join grade on stu.id=grade.uid
使用left查询出的信息:以左表为主,如果交叉有空的话会以右表为主,输出左表的所有值,右表的部分值;如果有学生没有成绩,也会输出这两个学生的信息;60人参加考试,2人没有成绩输出60人的成绩
3)select stu.name,grade.number from stu left join grade on stu.id=grade.uid
使用right查询出的信息:以右表为主,如果交叉有空的话会以右表为主,输出右表的所有值,左表的部分值
4)select stu.name,grade.number from  grade right join stu on stu.id=grade.uid
阅读全文
0 0
原创粉丝点击