MySQL(七)联结表
一、联结表基础知识
1、关系表
把信息分解成多个表,一类数据一个表,各表通过某些常用值(即关系设计中的关系(relational))互相关联;
2、外键(foreign key):外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
3、联结表的优点:
①数据信息不重复,从而不浪费时间和空间
②如果某个数据信息变动,可以只更新该表中的某个记录,相关表数据不用变更
③数据无重复,可以更有效的存储和方便的处理,伸缩性强(能够适应不断增加的工作量而不失败,设计良好的数据库或者应用程序称为可伸缩性好(scale well))
PS:联结是一种机制,用来在一条select语句中关联表,因此称之为联结(联结在运行时关联表中正确的行)
二、创建联结
例如:select A_name,B_name,B_mobile
from A, B
where A.A_id = B.B_id
order by A_name, B_name;
该SQL语句中,select语句指定要检索的列(因为是创建关联,所以指定了3个列,区别在于A_name在A表中,B_name和B_mobile在另一个表);from语句列出了2个表分别是A和B,A和B表使用where子句正确联结,
where子句指示MySQL匹配A表中的A_id和B表中的B_id相匹配,要匹配的两列以A.A_id和B.B_id完全限定表名(当引用的列可能存在二义性,必须使用完全限定表名(用一个点分隔的表名和列名))
PS:where子句的重要性
在一条select语句中联结几个表时,相应的关系是在运行中构造的;在联结两个甚至多个表时,实际上是将第一个表中的每一行与第二个表中的每一行配对,where子句作为过滤条件,它只包含匹配的给定条件的行。
没有where子句,第一个表中每个行将与第二个表中的每个行匹配,而不管逻辑上是否可以配在一起。
1、笛卡尔积
由没有联结条件的表关系返回的结果称为笛卡尔积(检索出的行的数目将是第一个表中的行数乘以第二个表中的行数);
例如:select A_name,B_name,B_mobile
from A, B
order by A_name, B_name;
PS:应保证所有联结都有where子句,否则MySQL将返回比想要的数据多得多的数据,还应保证where子句的正确性。
2、内部联结
等值联结(equijoin):基于两个表之间的相等测试,也称为内部联结
例如:select A_name,B_name,B_mobile
from A inter join B
on A_name = B_name;
这条SQL语句中,select语句与之前的相同,相较于上面的from,这里使用了inter join指定(当使用inter join时,联结条件用on子句而不是where子句,在这里on等同于where)
3、联结多个表
SQL对一条select语句中可以联结的表的数目没有限制,创建规则也基本相同(首先列出所有表,然后定义表之间的关系)
PS:MySQL在运行时关联指定的每个表以处理联结,这样很耗费资源,因此使用中应注意,不要联结不必要的表。
三、创建高级联结
1、使用表别名
别名除了允许用于列名和计算字段外,SQL还允许给表名起列名,好处在于:
①缩短SQL语句;
②允许在单条select语句中多次使用相同的表;
例如:select a_name, a_mobile
from A as a, B as b, C as c
where A.a_id = B.b_id
and C.c_num = B.b_num
and birthday_id = '1992-10-26';
PS:表别名不仅可用于where子句,还可用于select列表,order by子句以及语句其他部分(表别名只在查询执行中使用,表别名不返回到客户端主机)
2、自联结
自联结:自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。
例如:select p1.user_id, p1.user_name
from usertable as p1, usertable as p2
where p1.user_id = p2.user_id
and p2.user_id = '10086';
这条SQL语句中,usertable表第一次出现为别名p1,第二次为别名p2,在select语句中明确使用p1前缀给出所需列名,否则MySQL将返回错误,因为其无法正确区分想要的具体为哪一列;
3、自然联结
无论何时对表进行联结,应至少有一个列出现在不止一个表中(被联结的列);标准的联结返回所有数据,自然联结排除多次出现,只返回一次。
一般使用select *通配符,对其他表的列使用明确的自己来完成,通配符只对第一个表使用,所有其他列明确列出。
4、外部联结
用来检索包含了在相关表中没有关联行的行,这种类型的联结称为外部联结。
例如:select A.cust_id, B.mobile_num
from A left outer join B
on A.cust_id = B.mobile_num;
这条select语句使用关键字outer join来指定联结的类型(不是在where子句中指定);在使用outer join语法时,必须使用left或right指定包括其他所有行的表(right指出右边的表,left指出左边的表)
外部联结的类型:
分为左外部联结和右外部联结,唯一差别是关联表的顺序不同,左外部联结可以通过颠倒from或where子句中的表顺序转换为右外部联结,两种类型可以互换使用(聚集函数也可和联结一起使用)。
PS:联结使用要点
①注意使用的联结类型
②保证使用正确的联结条件,否则将返回不正确的数据
③应该总是提供联结条件,否则会得到笛卡尔积
④同一个联结下可包含多个表,甚至对每个联结采用不同的联结类型
MySQL(七)联结表的更多相关文章
- MySQL常用的七种表类型(转)
MySQL常用的七种表类型(转) 其实MySQL提供的表类型截至到今天已经有13种,各有各的好处,但是民间流传的常用的应该是7种,如果再细化出来,基本上就只有两种:InnoDB.MyIASM两种. ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- MySql必知必会实战练习(四)主键、外键、sql约束、联结表
本博将对主键.外键.MySql数据库约束和联结表的相关特性进行总结和实战 1. 主键 表中的每一行都应该具有可以唯一标识自己的一列(或一组列),而这个承担标识作用的列称为主键 如果没有主键,数据的管理 ...
- 第二百七十七节,MySQL数据库-数据表、以及列的增删改查
MySQL数据库-数据表.以及列的增删改查 1.创建一个表 CREATE(创建) TABLE(表) ENGINE(引擎) ENGINE=INNODB(引擎)还有很多类引擎,这里只是简单的提一下INNO ...
- MySQL联结表
联结 SQL最强大的功能之中的一个就是能在数据检索查询的运行中联结表.而联结表是基于关系表. 理解关系表例如以下,假如由同一供应商生产的多种物品.在数据库中须要存储产品信息,而在产品信息的这一行不存储 ...
- MySQL的联结(Join)语法
MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别: 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如 ...
- MySQL数据库以及表的管理
MySQL数据库以及表的管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 今天我们探讨的话题就是如何使用MySQL做开发,我们运维的主要工作不是去开发SQL的,但尽管如此,我们有 ...
- day15(mysql 的多表查询,事务)
mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1( a INT PRIMARY KEY , b ...
- mysql 库,表,数据操作
一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...
随机推荐
- ubuntu安装docker以及基本用法
ubuntu安装docker以及基本用法 一.安装 安装前先更新apt-get源到最新版本 apt-get update 使用ubuntu自带的docker安装包安装docker apt-get in ...
- Apache:详解QSA,PT,L,E参数的作用
[QSA] 当被替换的URI包含有query string的时候,apache的默认行为是,丢弃原有的query string 并直接使用新产生的query string,如果加上了[QSA]选项,那 ...
- Internet Download Manager IDM 破解器
IDM 全名Internet Download Manager 是一款国外的多线程下载神器(简称IDM),Internet Download Manager 支持多媒体下载.自动捕获链接.自动识别文 ...
- 文件夹生成zip
package com.leoodata.utils; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.Zi ...
- agc023C - Painting Machines(组合数)
题意 题目链接 有\(n\)个位置,每次你需要以\(1 \sim n-1\)的一个排列的顺序去染每一个颜色,第\(i\)个数可以把\(i\)和\(i+1\)位置染成黑色.一个排列的价值为最早把所有位置 ...
- ES6模块化与常用功能
目前开发环境已经普及使用,如vue,react等,但浏览器环境却支持不好,所以需要开发环境编译,下面介绍下开发环境的使用和常用语法: 一,ES6模块化 1,模块化的基本语法 ES6 的模块自动采用严格 ...
- 传统BI还是自助式BI---BI与数据分析 ZT
自助式BI或者自助式数据分析是最近几年兴起的一个概念.根据Gartner发布的信息,Self Service Business Intelligence(SSBI)被定义为“终端用户在被批准和支持的平 ...
- 面向对象的封装与隐藏 this
当我们创建一个对象的时候,我们可以通过‘对象.属性’的方式,对对象的属性进行赋值. 这里赋值操作要受到属性的数据类型和存储范围的制约,但是除此之外,没有其他制约条件. 但是实际问题中我们需要给这个属性 ...
- ssh登陆慢的问题
识别主机名时卡一下,关掉DNS选项: root@ns-virtual-machine:~# grep -i dns /etc/ssh/sshd_config UseDNS no 如果还有问题,打开ve ...
- win10怎么查看进程
1.在任务栏右击-任务管理器 2.