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. 【转】PHP如何快速读取大文件

    在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  2. windows 下 openssl 生成RSA私钥公钥以及PKCS8

    生成RSA私钥 打开bin文件夹下面的openssl.exe,输入genrsa -out rsa_private_key.pem 1024 把RSA私钥转换成PKCS8格式 输入命令pkcs8 -to ...

  3. INSERT 语句总结

    一.基本语句 1.向指定的列中插入值(在插入批量数据时方式2优于方式1) <!--插入一条值--> INSERT INTO t1(field1,field2) VALUE(v001,v00 ...

  4. c#(winform)环境下使用动态链接库dll的详解

    1,什么是dll文件? DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被 ...

  5. Java实例---简单的宠物管理系统

    代码分析 Cat.java package com.ftl.petshop; class Cat implements Pet { private String name; private Strin ...

  6. Linux下的Mysql备份/恢复

    数据库逻辑备份 逻辑备份:将数据库的数据以逻辑的SQL语句的方式导出 查看帮助 mysqldump --help 0.数据库开启状态 1.备份某个特定的库: mysqldump -uroot -pro ...

  7. December 07th 2016 Week 50th Wednesday

    Life is a flower, and love is the honey of the flower. 人生是花儿,而爱情就是花的蜜. My life is not as beautiful a ...

  8. December 06th 2016 Week 50th Tuesday

    Behind every beautiful thing, there is some kind of pain. 美丽背后,必有努力. No pains, no gains. But it seem ...

  9. 一次xss的黑盒挖掘和利用过程

    挖掘过程一: 自从上一次投稿,已经好久好久没写文章了.今天就着吃饭的时间,写篇文章,记录下自己学习xss这么久的心得.在我看来.Xss就是javascript注入,你可以在js语法规定的范畴内做任何事 ...

  10. 消息中间件--"rocketmq"02之QuickStart

    依赖 <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq ...