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数据库入门----第五章 多表操作的更多相关文章

  1. MySQL----MySQL数据库入门----第四章 单表查询

    select [distinct] * | 字段1,字段2,字段3... from 表名 [where 条件表达式] [group by 字段名] [having 条件表示式] [order by 字 ...

  2. Excel VBA入门(五)Excel对象操作

    本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...

  3. MySQL:数据库入门篇4

    1. 视图 创建视图 create view 视图名字 as 查询sql语句; drop view 视图名字; alter view 视图名字 as 查询sql语句; 2. 触发器 1. 插入事件触发 ...

  4. MySQL:数据库入门篇1

    1,什么是数据库?——存储数据的仓库 数据库技术是计算机应用领域中非常重要的技术,它产生于20世纪60年代末,是数据管理的最新技术,也是软件技术的一个重要分支. 简单的说,数据库就是一个存放数据的仓库 ...

  5. MySQL线上执行大事务或锁表操作

    前提 在线执行一些大事务或锁表操作(给某个核心级表加一列或者执行修改操作),此时不但主库从库要长时间锁表,主从延迟也会变大.未避免大事务sql对整个集群产生影响,,我们希望一条SQL语句只在Maste ...

  6. 高性能MySQL之【第十五章 备份与恢复】学习记录

      我们不打算包括的话题:      安全(访问备份,恢复数据的权限,文件是否需要加密)      备份存储在哪里,包括他们应该离源数据多远,以及如何将数据从源头移动到目的地      保留策略.审计 ...

  7. MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程

    MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...

  8. 云原生入门 第五章:kubernetes学习实践

    1. 简介 在本章中,我们将学习不同的Kubernetes对象,它们的用途以及如何与它们交互. 在设置集群或使用现有集群之后,我们可以开始部署一些工作负载.Kubernetes中最小的计算单元不是一个 ...

  9. 数据库Mysql的学习(六)-子查询和多表操作

    )*0.05 WHERE card_id ='20121xxxxxx'; //子查询就是一个嵌套先计算子查询 SELECT * FROM borrow WHERE book_id =(SELECT b ...

随机推荐

  1. Oracle 11g 管理工具及SQL Deverloper 的使用教程

    Oracle 管理工具及SQL Deverloper 的使用教程 默认的网站的管理工具 网址格式:https://机器名:1158/em 默认:https://localhost:1158/em 机器 ...

  2. CPU硬件辅助虚拟化技术

    目前主要有Intel的VT-x和AMD的AMD-V这两种技术.其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest O ...

  3. Linux运维体系

  4. php 3des加密 兼容JAVA 多么痛的领悟呀

    最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...

  5. Visual Studio 2017RC 版本相关资料

    Visual Studio 2017 RC版本说明 1.社区版 Visual Studio Community 2017 RC Visual Studio Community 2017 RC 是针对个 ...

  6. 图书管理系统 基于form组件

    models: from django.db import models # Create your models here. class Book(models.Model): name = mod ...

  7. 【转】snmpwalk常用用法

    在日常监控中,经常会用到snmp服务,而snmpwalk命令则是测试系统各种信息最有效的方法,现总结一些常用的方法如下: 1.snmpwalk -v 2c -c public 10.103.33.1 ...

  8. 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 ...

  9. [WebKit] JavaScriptCore解析--基础篇 (一)JSC与WebCore

    先看一下官方的基本介绍,短短几句就塞满了关键字. SquirrelFish,正式名称是JavaScriptCore,包括register-based(基于寄存器的虚拟机), direct-thread ...

  10. 把对象缓存到HttpRuntime.Cache里,你能安全地使用它吗?

    每每勤勤恳恳,思来想去,趁还有激情,先把它记录下来... 定义一个Stu的类: public class Stu { public string Name { get; set; } public i ...