MySQL之外键、联合查询、子查询
外键(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之外键、联合查询、子查询的更多相关文章
- MySQL的查询,子查询,联结查询,联合查询
MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...
- MYSQL 查询方法 统计查询 链接查询 子查询
mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as ...
- Python-select 关键字 多表查询 子查询
sql 最核心的查询语句!!!! 增删改 单表查询 select语句的完整写法 关键字的书写顺序 执行顺序 多表查询 笛卡尔积 内连接 左外连接 右外连接 全外连接 通过合并左外连接和右外连接 子查询 ...
- MySQL之外键约束
MySQL之外键约束 MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: [CONSTRAINT [symbo ...
- 【知识库】-数据库_MySQL之基本数据查询:子查询、分组查询、模糊查询
简书作者:seay 文章出处: 关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询 回顾:[知识库]-数据库_MySQL常用SQL语句语法大全示例 Learn [已经过测试校验] 一.简单查询 ...
- oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...
- 【数据库】SQL经典面试题 - 数据库查询 - 子查询应用二
上节课我们通过子查询,完成了查询的最高分学生的需求,今天我们来学习子查询的分类,以及通过子查询来完成工作中经常遇到一些个性化需求. 子查询概念: 一个SELECT语句嵌套在另一个SELECT语句中,子 ...
- ylb: SQL表的高级查询-子查询
ylbtech-SQL Server: SQL Server- SQL表的高级查询-子查询 SQL Server 表的高级查询-子查询. 1,ylb:表的高级查询-子查询返回顶部 --======== ...
- Oracle的查询-子查询
--子查询 --子查询返回一个值 --查询出工资和scott一样的员工信息 select * from emp where sal in (select sal from emp where enam ...
- coding++:mybatis 嵌套查询子查询column传多个参数描述
mybatis 嵌套查询子查询column传多个参数如下: 2.代码示例 备注:注意,相同颜色的单词都是有关联的 <resultMap id="blogResult" typ ...
随机推荐
- html+css快速入门教程(2)
3 标签 3.1 div div 标签表示一个区块或者区域,你可以把它看成是一个容器,比如说一个 竹篮 作用:用来把网页分块 并且里面可以装任意的html元素 <div>这里是一个div容 ...
- MFC--自己优化滚动条的双缓冲绘图方法
2010-01-09 18:45 MFC--自己优化的双缓冲绘图方法 自己通过尝试,用修改视图坐标的方法, 优化了双缓冲绘图,实现起来并不复杂. 在介绍这个方法前,重新介绍一下窗口和视口的概念 ...
- Redis系列(九):数据结构Hash源码解析和HSET、HGET命令
2.源码解析 1.相关命令如下: {"hset",hsetCommand,,"wmF",,NULL,,,,,}, {"hsetnx",hse ...
- DOM对象增删元素
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 廖雪峰Python教学课后作业---datetime
# -*- coding: utf-8 -*- import re from datetime import datetime, timezone, timedelta def to_timestam ...
- Idea自带插件Groovy无法创建和启动
前言 如果现在有人要开始完全重写 Java,那么 Groovy 就像是 Java 2.0.Groovy 并没有取代 Java,而是作为 Java 的补充,它提供了更简单.更灵活的语法,可以在运行时动态 ...
- 调试HotSpot源代码
之前的文章在Ubuntu 16.04上编译OpenJDK8的源代码 已经介绍过在Ubuntu上编译OpenJDK8的源代码,这一篇将介绍在Ubuntu上调试OpenJDK8源代码的2种方式. 1.GD ...
- 每日一题 - 剑指 Offer 47. 礼物的最大价值
题目信息 时间: 2019-07-02 题目链接:Leetcode tag:动态规划 难易程度:中等 题目描述: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0). ...
- VScode 配置c/c++环境(结合各大网站的blog和官方文档)
第一步:下载mingw64 首先,在各大搜索引擎上搜索mingw64,进入其官网下载即可 需要注意的是,下载默认的是先从网页上下载下载器,再进行选择下载.但是在部分电脑上下载会出现什么mingw64. ...
- MySQL CodeFirst的配置与注意事项
mysql+ef的配置相比较mssql+ef来说复杂一些.我的感受就是配置难度在于插件版本造成的各种不兼容问题.另外参考了很多博客,将多个博客里的经验综合才得以实现,因为不是每个人的操作都和那些博客作 ...