MySQL——多表查询

栏目: 数据库 · 发布时间: 4年前

内容简介:多表查询中,如果没有连接条件,则会产生笛卡尔积数学中的定义:假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}

多表查询:

select listname from tablename1,tablename2;

笛卡尔积

多表查询中,如果没有连接条件,则会产生笛卡尔积

数学中的定义:假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为

{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}

MySQL——多表查询

实际运行环境下,应避免使用笛卡尔积;

解决方案:

在where加入有效的连接条件-----> 等值连接(连接n张表,需要n-1个连接条件)

select * from employee,department where employee.deptno = department.deptno

MySQL——多表查询

主键约束

约束当前表中,指定列的值非空且唯一

外键约束

表A中的外键列的值必须参照表B中的某一列的值

MySQL——多表查询

MySQL中, InnoDB支持外键和事务,MyISAM不支持外键和事务

/* 修改表的存储引擎 */
alter table [tablename] engine='InnoDB';
alter table [tablename] engine='MyISAM';

添加外键后:

MySQL——多表查询

MySQL——多表查询

一般情况下,如果列要使用外键列,可以这样命名: 引用表名_引用列名

我们要引用productdir表中的id列

在开发中,为了提高性能,会故意删除外键约束,通过代码来控制数据的合理性。

隐式连接

隐式內连接(看不到连接):仅选出两张表中互相匹配的记录

MySQL——多表查询

隐式连接缺点:

  • 需要在where条件中加入连接条件,如果忘了写,代码不会报错,但是会产生笛卡尔积
  • 只能做内连接

显示连接

内连接查询:查询效果和隐式内连接相同

select [table.list],[table.list] from [table] join [table] on(连接关系);
 
select e.empno,e.name,d.dname from emp e join dept d on(e.deptno = d.deptno);
/* 连接关系列名相同可以用using */
select e.empno,e.name,d.dname from emp e join dept d using(deptno);

外连接:

  • 左连接:将join左边表全部数据都查询处理啊,join右边表不匹配的数据NULL填充
/* 将左边表所有数据都显示 */
select * from emp left join dept using(deptno);
  • 右连接
  • 全外连接:MySQL暂时不支持

自连接:把一张表看成两张表来做查询

MySQL——多表查询


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

激荡十年,水大鱼大

激荡十年,水大鱼大

吴晓波 / 中信出版社 / 2017-11-1 / CNY 58.00

【编辑推荐】 知名财经作者吴晓波新作,畅销十年、销量超过两百万册的《激荡三十年》续篇,至此完成改革开放四十年企业史完整记录。 作为时代记录者,吴晓波有意识地从1978年中国改革开放伊始,记录中国翻天覆地的变化和对我们影响至深的人物与事件,串成一部我们每个人的时代激荡史。而最新的这十年,无疑更壮观,也更扑朔迷离。 很多事情,在当时并未有很深很透的感受,回过头来再看,可能命运的轨迹就......一起来看看 《激荡十年,水大鱼大》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具