MySQL----MySQL数据库入门----第五章 多表操作
5.1 外键
比如说有两个数据表,分别是学生信息表student和年级表grade。在student表中有存储学生年级的字段gid(外键),在grade表也有存储学生年级的字段id(主键),student表和grade表之间通过学生年级建立关联,两者是主从关系。在这种关联关系中:
①学生表student是引用表;------------------------------------------------->引用表是从表
②年级表grade是被引用表;------------------------------------------------->被引用表是主表
③引用表中引用字段gid要引入grade表中id字段,所以是外键;
④被引用表中的字段id,是grade中的主键或者对其设置唯一性约束;
⑤引入外键后,外键列只能插入参照列存在的值,参照列被参照的值不能被删除。这就保证了数据的参照完整性;
为表添加外键约束
alter table 引用表名 add constraint 外键名 foreign key (外键字段名) references 被引用表名(主键字段名)
删除外键约束
alter table 引用表名 drop foreign key 外键名
注意:
①建立外键的表必须是InnoDB型,不能是临时表。因为在MySQL中只有InnoDB类型的表才支持外键。
②定义外键名时,不能加引号。
5.2 连接查询
①内连接查询
select 表1.字段1,表2.字段2,...,表1.字段n
from 表1 [inner] join 表2
on 表1和表2的约束条件
[where条件];
②内连接的类似方法查询
select 表1.字段1,表2.字段2,...,表1.字段n
from 表1,表2
where条件;
注意:使用where子句的查询结果与使用inner join的查询结果是一致的,但是inner join是内连接语句,where是条件判断语句,在where语句后可以直接添加其他条件,而inner join语句不可以。
③左连接查询
select 表1.字段1,表2.字段2,...,表1.字段n
from 表1 left join 表2
on 表1和表2的约束条件
[where条件];
④右连接查询
select 表1.字段1,表2.字段2,...,表1.字段n
from 表1 right join 表2
on 表1和表2的约束条件
[where条件];
注意:
1、左连接的结果包括left join 子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在,则在右表中显示为空;
2、同理,右连接的结果包括right join 子句中指定的右表的所有记录,以及所有满足连接条件的记录。如果右表的某条记录在左表中不存在,则在左表中显示为空;
5.3 子查询
子查询就是一个查询的结果作为另外一个查询的条件使用。外层的查询称为父查询,作为条件的查询称为子查询(subquery),在查询语句执行时,首先会执行子查询中的语句,然后将返回结果作为外层查询的过滤条件。
①带IN关键字的子查询
select * from 数据表 where 字段名 in (select 字段名 from 数据表 [where条件]);
②带exists关键字的子查询
select * from 数据表 where exists (select 字段名 from 数据表 [where条件]);
注意:exists关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,不产生任何数据,只返回true或者false,当返回值为true时,外层查询才会执行。
③带any关键字的查询
select * from 数据表 where 字段名 > | < | >= | <= | != any(select 字段名 from 数据表 [where条件]);
注意:any关键字标识满足其中任意一个条件,它允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询条件。
④带all关键字的查询
select * from 数据表 where 字段名 > | < | >= | <= | !=all (select 字段名 from 数据表 [where条件]);
注意:all关键字与any有点类似,只不过带all关键字的子查询返回的结果需要同时满足所有内层查询条件。
MySQL----MySQL数据库入门----第五章 多表操作的更多相关文章
- MySQL----MySQL数据库入门----第四章 单表查询
select [distinct] * | 字段1,字段2,字段3... from 表名 [where 条件表达式] [group by 字段名] [having 条件表示式] [order by 字 ...
- Excel VBA入门(五)Excel对象操作
本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...
- MySQL:数据库入门篇4
1. 视图 创建视图 create view 视图名字 as 查询sql语句; drop view 视图名字; alter view 视图名字 as 查询sql语句; 2. 触发器 1. 插入事件触发 ...
- MySQL:数据库入门篇1
1,什么是数据库?——存储数据的仓库 数据库技术是计算机应用领域中非常重要的技术,它产生于20世纪60年代末,是数据管理的最新技术,也是软件技术的一个重要分支. 简单的说,数据库就是一个存放数据的仓库 ...
- MySQL线上执行大事务或锁表操作
前提 在线执行一些大事务或锁表操作(给某个核心级表加一列或者执行修改操作),此时不但主库从库要长时间锁表,主从延迟也会变大.未避免大事务sql对整个集群产生影响,,我们希望一条SQL语句只在Maste ...
- 高性能MySQL之【第十五章 备份与恢复】学习记录
我们不打算包括的话题: 安全(访问备份,恢复数据的权限,文件是否需要加密) 备份存储在哪里,包括他们应该离源数据多远,以及如何将数据从源头移动到目的地 保留策略.审计 ...
- MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程
MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...
- 云原生入门 第五章:kubernetes学习实践
1. 简介 在本章中,我们将学习不同的Kubernetes对象,它们的用途以及如何与它们交互. 在设置集群或使用现有集群之后,我们可以开始部署一些工作负载.Kubernetes中最小的计算单元不是一个 ...
- 数据库Mysql的学习(六)-子查询和多表操作
)*0.05 WHERE card_id ='20121xxxxxx'; //子查询就是一个嵌套先计算子查询 SELECT * FROM borrow WHERE book_id =(SELECT b ...
随机推荐
- Oracle 11g 管理工具及SQL Deverloper 的使用教程
Oracle 管理工具及SQL Deverloper 的使用教程 默认的网站的管理工具 网址格式:https://机器名:1158/em 默认:https://localhost:1158/em 机器 ...
- CPU硬件辅助虚拟化技术
目前主要有Intel的VT-x和AMD的AMD-V这两种技术.其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest O ...
- Linux运维体系
- php 3des加密 兼容JAVA 多么痛的领悟呀
最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...
- Visual Studio 2017RC 版本相关资料
Visual Studio 2017 RC版本说明 1.社区版 Visual Studio Community 2017 RC Visual Studio Community 2017 RC 是针对个 ...
- 图书管理系统 基于form组件
models: from django.db import models # Create your models here. class Book(models.Model): name = mod ...
- 【转】snmpwalk常用用法
在日常监控中,经常会用到snmp服务,而snmpwalk命令则是测试系统各种信息最有效的方法,现总结一些常用的方法如下: 1.snmpwalk -v 2c -c public 10.103.33.1 ...
- jquery实现的时间轴
代码 样式文件style.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...
- [WebKit] JavaScriptCore解析--基础篇 (一)JSC与WebCore
先看一下官方的基本介绍,短短几句就塞满了关键字. SquirrelFish,正式名称是JavaScriptCore,包括register-based(基于寄存器的虚拟机), direct-thread ...
- 把对象缓存到HttpRuntime.Cache里,你能安全地使用它吗?
每每勤勤恳恳,思来想去,趁还有激情,先把它记录下来... 定义一个Stu的类: public class Stu { public string Name { get; set; } public i ...