MySQL之外键、联合查询、⼦查询
外键(foreign key):
  外⾯的键(键不在⾃⼰表中),如果⼀张表中有⼀个字段(⾮主键)指向另外⼀张表的主键,那么将该字段称之为外键。
  外键可以在创建表的时候或者创建表之后增加(但是要考虑数据的问题)。⼀张表可以有多个外键。
  创建表的时候增加外键:在所有的表字段之后,使⽤foreign key(外键字段) reference 外部表(主键字段)
  在新增表之后增加外键:修改表结构
  Alter table 表名 add[constraint 外键名字] foreign key(外键字段)reference ⽗表(主键字段);
什么意思?  修改外键与删除外键
  外键不可以修改,只能先删除后新增
复合函数求导举例
  删除外键语法
  Alter table 表名 drop foreign key 外键名;  ---⼀张表中可以有多个外键,但是名字不能相同。
  外键作⽤
  外键默认的作⽤有两点:⼀个对⽗表,⼀个对字表(外键字段所在的表)
  对⼦表的约束:⼦表数据进⾏写操作的时候,如果对应的外键字段在⽗表不到对应的匹配,那么操作会失败(约束⼦表数据操作)。
  对⽗表的约束:⽗表数据进⾏写操作(删和改:都必须涉及到主键本⾝),如果对应的主键在⼦表中已经被数据所引⽤,那么就不允许操作。
  外键条件:
  1、外键要存在:⾸先必须保证表的存储引擎是innodb(默认的存储引擎),如果不是innodb存储引擎,那么外键可以创建成功,但是没有约束效果。
  2、外键字段的字段类型(列类型)必须与⽗表的主键类型完全⼀致。
  3、⼀张表中的外键名字不能重复。
  4、增加外键的字段(数据已经存在),必须保证数据与⽗表主键要求对应。
  外键约束:就是指外键的作⽤。
  删除后置空:
  删除置空的前提条件:外键字段允许为空(如果不满⾜条件,外键⽆法创建)
  联合查询:
oncontextmenu mfc
  将多次查询(多条select语句),在记录上进⾏拼接(字段不会增加)。
  基本语法:
  多条select语句构成,每⼀条select语句获取的字段数必须严格⼀致(但是字段类型⽆关)
  select  语句1  Union[union选项] select 语句2……
  Union选项:与select选项⼀样有两个
    All:保留所有(不管重复)
    Distinct:去重(整个重复),默认的。
  联合查询只要求字段⼀样,跟数据类型⽆关
  意义:
  联合查询的意义分为两种:
mysql语句多表查询  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;其中⼀个即可
printscreen键是什么意思  any  —— some;  any跟some是⼀样
  =all  —— 为全部
肯定结果:
否定结果:
  ⾏⼦查询:
  返回的结果可以是多⾏多列(⼀⾏多列)
  ⾏⼦查询需要构造⾏元素,⾏元素由多个字段构成。
  表⼦查询:
  ⼦查询返回的结果是多⾏多列的⼆维表:⼦查询返回的结果是当做⼆维表来使⽤。
  表⼦查询:from⼦查询,得到的结果作为form的数据源。
  Exists⼦查询:
offsetwidth的作用
  Exists:是否存在的意思,Exists⼦查询就是⽤来判断某些条件是否满⾜(跨表),Exists是接在where之后,Exists返回的结果只有0和1;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。