MySQL的连接查询

数据库中存在多张数据表的,而这些表之间会存在各种关系;如果一次查询需要涉及到多张表中的数据,则就需要使用表连接查询;

连接查询

是数据库中最主要的查询,包括等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询和复合条件查询等
在数据库中表与表之间的关系,都是两两关联
我们要对有联系的表建立他们之间的关系;该关系通过一个外键(列)体现,通过一个外键将两张表联系起来;
当两张表存在关系,都会有一个主表一个从表,外键列放在从表中,用于与主表关联;(从表中的外键列与主表中的主键列关联<两个字段的名字可以不一样但一般设置为一样的,数据类型和长度必须一致>)
现在说一下表连接查询

内连接

当两个表中都存在(主外键一致)才查询数据
select 要查询的字段 from 表1 inner join 表2 on 主外键关联关系

select stu.stu_name,sc.score_score
 from tbl_stu as stu inner join tbl_score as sc
  on stu.stu_no=sc.stu_id;

当然也可以这样写

select stu_name,sc_score from
 tbl_stu as stu,tbl_score as sc
 where stu.stu_no=sc.stu_id;

左外连接

左表全部显示,右表存在和左表一样(主外键)的显示,不一样显示为null
关键字:左表 left outer(可省略) join 右表

select stu_name,sc_score
from tbl_stu stu left join tbl_score sc
on stu.stu_no=sc.stu_id;

右外连接

右表全部显示,左表根据右表一样(主外键)的显示,不一样的不显示
关键字:左表 right outer(可省略) join 右表

select stu_name,sc_score
from tbl_stu stu right join tbl_score sc
on stu.stu_no=sc.stu_id;

多表查询

查询每个学生的学号,姓名,选修课名称及成绩

select sno,sname,cname,grade
from tbl_stu stu,tbl_sc sc,tbl_course course
where stu.sno=sc.sno and sc.cno=course.cno

嵌套查询(子查询)

以一道面试题为例:
人员表:人员姓名,人员id
销售表:人员id, 时间,销售金额
花费表:人员id,时间,花费金额
写一条sql语句,完成下面的统计结果:
人员姓名,总花费,总销售
注意:需要使用子查询,三张表直接关联不行,回出现重复数据
//人员表user userId name
//销售表sale userId sale_time sale_money
//花费表cost userId cost_time cost_money

select t1.name, 总销售额, 总花费额 from (
select user.id as id, user.name as name, sum(sale_money) 总销售额
from  user, sale
where user.id=sale.userid 
group by user.id
) t1, (
select user.id as id, user.name, sum(cost_money) 总花费额
from  user, cost
where user.id=cost.userid 
group by user.id
) t2
where t1.id = t2.id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值