Mysql的多表查询及表的连接

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

Mysql的多表查询及表连接


  
连接查询条件




  • 查询的两张表假如出现同名的列,我们需要将表名标注到列名前面
  • 假如是非同名的列,表名可加可不加,保举加上为了誊写方便,**可以给表添加别名,**一般环境下取首字母,特殊环境下取它所代表的含义,表的别名只在本次查询中收效
  • 假如表与表进行关联查询的时间,假如不添加关联条件,查询的总记录数就是a*b = 笛卡尔积,数据匹配不精确
  • 多表查询的时间必须要加条件

    • ​等值
    • 非等值

有关联的表的连接


natural join

自动选择列名类似而且范例类似的列
格式:表名 natural join 列名
代码展示:
  1. select * from sc natural join student;
复制代码
运行效果:

using

指定等值连接的列
格式:表名 join 表名 using(同名同范例等值的列名)
代码展示:
  1. select * from sc join course using(cno);
复制代码
运行效果:

on

可以指定两张表关联的条件,可以是非等值的操作,添加约束
等值连接

表 join 表 on 表.列=表.列
代码展示:
  1. select * from course join teacher;
  2. -- on 添加约束
  3. select * from course join teacher on course.tno=teacher.tno;
复制代码
运行效果:


非等值连接

不使用等于(=)操作符来比较字段,而是大概使用其他比较操作符


  • 格式:表名 join 表名 on 非等值操作

表与表的外连接


左外连接

显示左面表所有的数据


  • 列名 left join 列名 (on 判定)
    代码展示:
  1. select * from course left join teacher on course.tno=teacher.tno;
复制代码
运行效果:

右外连接

显示右面表所有的数据


  • 列名 left join 列名 (on 判定)
代码展示:
  1. select * from course right join teacher on course.tno=teacher.tno;
复制代码
运行效果:

表的自连接


格式:表名 as 表名1 inner join 表名 as 表名2 on 操作
代码展示:
  1. select * from student as a inner join student as b  on a.sno=b.sno;
复制代码
运行效果:

表的子连接


把一个SQL语句的查询效果当成另外一个SQL语句的查询条件
代码展示:
  1. select *from sc;
  2. select * from sc where score>(select avg(score) from sc);
复制代码
运行效果:


表的伪表查询


假如我们所需要的查询条件需要别的SQL语句提供,假如需要多个查询条件,这是就要将所有的查询效果当做伪表进行管理
代码展示:
  1. select course.cname,s2.sname from (select sc.cno,s1.sno,s1.sname from (select sno,sname from student) as s1,sc where s1.sno=sc.sno) as s2,course where course.cno=s2.cno;
复制代码
运行效果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表