外键(foreign key):

  外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称之为外键。

  外键可以在创建表的时候或者创建表之后增加(但是要考虑数据的问题)。一张表可以有多个外键。

  创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) reference 外部表(主键字段)

  在新增表之后增加外键:修改表结构

  Alter table 表名 add[constraint 外键名字] foreign key(外键字段)reference 父表(主键字段);

  修改外键与删除外键

  外键不可以修改,只能先删除后新增

  删除外键语法

  Alter table 表名 drop foreign key 外键名;  ---一张表中可以有多个外键,但是名字不能相同。

  

  外键作用

  外键默认的作用有两点:一个对父表,一个对字表(外键字段所在的表)

  对子表的约束:子表数据进行写操作的时候,如果对应的外键字段在父表找不到对应的匹配,那么操作会失败(约束子表数据操作)。

  对父表的约束:父表数据进行写操作(删和改:都必须涉及到主键本身),如果对应的主键在子表中已经被数据所引用,那么就不允许操作。

  外键条件:

  1、外键要存在:首先必须保证表的存储引擎是innodb(默认的存储引擎),如果不是innodb存储引擎,那么外键可以创建成功,但是没有约束效果。

  2、外键字段的字段类型(列类型)必须与父表的主键类型完全一致。

  3、一张表中的外键名字不能重复。

  4、增加外键的字段(数据已经存在),必须保证数据与父表主键要求对应。

  外键约束:就是指外键的作用。

  删除后置空:

  删除置空的前提条件:外键字段允许为空(如果不满足条件,外键无法创建)

  联合查询:

  将多次查询(多条select语句),在记录上进行拼接(字段不会增加)。

  基本语法:

  多条select语句构成,每一条select语句获取的字段数必须严格一致(但是字段类型无关)

  select  语句1  Union[union选项] select 语句2……

  Union选项:与select选项一样有两个

    All:保留所有(不管重复)

    Distinct:去重(整个重复),默认的。

  联合查询只要求字段一样,跟数据类型无关

  意义:

  联合查询的意义分为两种:

  1、查询同一张表,但是需求不同:如查询学生信息,男生身高升序,女生身高降序。

  2、多表查询:多张表的结构是完全一样的,保存的数据(结构)也是一样的。

  Order by 使用:

  在联合查询中:order by不能直接使用,需要对查询语句使用括号才行。

  之上的查询方式也是不成功的,如果需要order by生效,必须搭配limit,limit使用限定的最大数即可。

  子查询(sub query):

  查询实在某个查询结果之上进行的。(一个select语句内部包含另外一条select语句)。

  子查询分类:

  子查询有两种分类方式:按位置分类、按结果分类。

  按位置分类:子查询(select语句)在外部查询(select语句)中出现的位置。

    From子查询:子查询跟在from之后。

    Where子查询:子查询出现在where条件中。

    Exists子查询:子查询出现在exists中。

  按结果分类:根据子查询得到的数据进行分类(理论上讲任何一个查询得到的结果都可以理解为二维表)

    标量子查询:子查询得到的结果是一行一列。

    列子查询:子查询得到的结果是一列一行。

    行子查询:子查询得到的结果是多列一行(多行多列)。

  上面几个出现的位置是在where之后。

    表子查询:子查询得到的结果是多行多列(出现的位置是在from之后)

  列子查询返回的结果比较:一列多行,需要使用in作为条件匹配,其中在mysql中还有几个类似的条件:all、some、any

  =any —— in;  其中一个即可

  any  —— some;  any跟some是一样

  =all  —— 为全部

肯定结果:

否定结果:

  行子查询:

  返回的结果可以是多行多列(一行多列)

  行子查询需要构造行元素,行元素由多个字段构成。

  表子查询:

  子查询返回的结果是多行多列的二维表:子查询返回的结果是当做二维表来使用。

  表子查询:from子查询,得到的结果作为form的数据源。

  Exists子查询:

  Exists:是否存在的意思,Exists子查询就是用来判断某些条件是否满足(跨表),Exists是接在where之后,Exists返回的结果只有0和1;

MySQL之外键、联合查询、子查询的更多相关文章

  1. MySQL的查询,子查询,联结查询,联合查询

    MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...

  2. MYSQL 查询方法 统计查询 链接查询 子查询

    mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as ...

  3. Python-select 关键字 多表查询 子查询

    sql 最核心的查询语句!!!! 增删改 单表查询 select语句的完整写法 关键字的书写顺序 执行顺序 多表查询 笛卡尔积 内连接 左外连接 右外连接 全外连接 通过合并左外连接和右外连接 子查询 ...

  4. MySQL之外键约束

    MySQL之外键约束 MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: [CONSTRAINT [symbo ...

  5. 【知识库】-数据库_MySQL之基本数据查询:子查询、分组查询、模糊查询

    简书作者:seay 文章出处: 关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询 回顾:[知识库]-数据库_MySQL常用SQL语句语法大全示例 Learn [已经过测试校验] 一.简单查询 ...

  6. oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by

    select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...

  7. 【数据库】SQL经典面试题 - 数据库查询 - 子查询应用二

    上节课我们通过子查询,完成了查询的最高分学生的需求,今天我们来学习子查询的分类,以及通过子查询来完成工作中经常遇到一些个性化需求. 子查询概念: 一个SELECT语句嵌套在另一个SELECT语句中,子 ...

  8. ylb: SQL表的高级查询-子查询

    ylbtech-SQL Server: SQL Server- SQL表的高级查询-子查询 SQL Server 表的高级查询-子查询. 1,ylb:表的高级查询-子查询返回顶部 --======== ...

  9. Oracle的查询-子查询

    --子查询 --子查询返回一个值 --查询出工资和scott一样的员工信息 select * from emp where sal in (select sal from emp where enam ...

  10. coding++:mybatis 嵌套查询子查询column传多个参数描述

    mybatis 嵌套查询子查询column传多个参数如下: 2.代码示例 备注:注意,相同颜色的单词都是有关联的 <resultMap id="blogResult" typ ...

随机推荐

  1. 如何下载 Ubuntu 镜像文件?

    Ubuntu,是一款基于 Debian Linux 的以桌面应用为主的操作系统,内容涵盖文字处理.电子邮件.软件开发工具和 Web 服务等,可供用户免费下载.使用和分享. 但是对于国内的用户来说如果直 ...

  2. vue多个项目公共化组件方案

    前言 最近项目需求,需要把两个vue项目多个一样的模块抽成公共化.考虑采用的方案 1.把公共部分独立出来一个项目,npm发布私有包,使用的项目npm install下载(目前下载使用出现配置错误) 存 ...

  3. Day11-微信小程序实战-交友小程序-附近的人(地图的形式)及位置获取

    回顾:在下面的tabbar中,我们已经实现了首页 消息 我的,就剩下”附近“页面了 ”附近“的页面主要是用地图来进行展示的(可以显示我的位置,也可以显示周围附近的人的位置) (在地图里面点击它的头像的 ...

  4. 【asp.net core 系列】14 .net core 中的IOC

    0.前言 通过前面几篇,我们了解到了如何实现项目的基本架构:数据源.路由设置.加密以及身份验证.那么在实现的时候,我们还会遇到这样的一个问题:当我们业务类和数据源越来越多的时候,我们无法通过普通的构造 ...

  5. 表达式计算开源组件(NCalc.NetCore)

    首先,这款组件是开源的,NCalc是.net中的一个数学表达式求值程序.NCalc可以解析任何表达式并计算结果,包括静态或动态参数和自定义函数. 官网地址:http://ncalc.codeplex. ...

  6. 记一次发布/更新npm包的过程及包版本管理

    您可以发布包含package.json文件的任何目录.这里如何首次发布程序包以及如何在以后更新程序包. 如何发布包 制备 了解npm政策 在开始之前,如果您对网站礼仪,命名,许可或其他指南有疑问,最好 ...

  7. 消息总线(Bus)

    Spring Cloud Bus将分布式系统的节点与轻量级消息代理链接.可以用于通知状态更改(例如配置更改)或其他管理指令.一个关键的地方是,Bus就像一个分布式执行器,用于扩展的Spring Boo ...

  8. Java1.8的HashMap源码解析

    java1.8是现在用的最多的版本,hashmap是现在用的最多的map,今天我们试图分析一下源码. 数据结构 首先我们注意到数据是存放在一个Node数组里面 transient Node<K, ...

  9. java语言进阶(三)_List_Set_数据结构_Collections

    主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 1.1 数据结构有什么用? 常见的数据结构:堆.栈.队列.数组.链表和红黑树 . 1.2 常见的数据结构 栈 栈 ...

  10. Mysql百万级数据查询优化

    1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count当起始页较小时,查询没有性能问题 ...