MySql数据库系列(四)、多表查询

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。MySql数据库系列(四)、多表查询,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

第四章、多表查询

学习目标

在这里插入图片描述

4.1、外键

  • 什么是外键
    • 外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。
    • 外键用于建立和加强两个表数据之间的链接。在这里插入图片描述

我们知道建立外键是为了保证数据的完整和统一性,即主表和从表中对应的数据保持统一,可以在建立外键时添加ON DELETE或ON UPDATE子句。
在已存在的表上添加外键约束的语法格式如下:
alter table 表名 add constraint 外键名(不能带引号) foreign key(外键字段名) references grade(主键字段名);
[ON DELETE {CASCADE | SETNULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SETNULL | NO ACTION | RESTRICT}]
在这里插入图片描述

  • 为表添加外键约束
    #创建数据库
    create database chapter04;
    #使用创建的数据库
    use chapter04;
    #班级表
    create table grade(
    	gid int primary key not null,
    	gname varchar(20) not null
    )
    
    --创建外键
    #方法1
    create table student(
    	sid int primary key not null,
    	sname varchar(20) not null,
    	gid int not null,
    	foreign key(gid) references grade(gid)#此处系统会默认取好外键名
    );
    
    #方法2
    create table student(
    	sid int primary key not null,
    	sname varchar(20) not null,
    	gid int not null,
    	#自定义外键名
    	CONSTRAINT fk_student_gid foreign key(gid) references grade(gid)
    );
    
    #方法3(为已存在的表添加外键约束)
    alter table student add constraint fk_student_gid foreign key(gid) references grade(gid);
    
  • 解除外键约束
    alter table student drop foreign key fk_student_gid ;
    
  • 删除外键约束
    alter table student drop gid;
    
  • 查看表结构(外键)
    show create table 表名; 
    

4.2、操作关联表

  • 关联关系
    在这里插入图片描述
  • 添加数据
    在向从表中添加数据时,外键所在字段必须只能选择主表中已存在的关联键列,这是受外键约束。
  • 删除数据
    根据创建外键时选择的级联删除的[cascade | set null | no action | restrict],在删除主表和从表中数据时,会有不同的结果,详情请看该篇4.1、外键引用中的图表 。

4.3、连接查询

  • 交叉连接(CROSS JOIN)
  1. 交叉连接返回的结果是被连接的两个表中所有数据的笛卡尔积即行数的乘积。
  2. 最常见的是多对一的关系,下面以主表grade和从表student两表为例。
    在这里插入图片描述
  3. 语法如下:
    select * from student cross join grade;
    
  4. 返回结果:
    在这里插入图片描述
  • 内连接(INNER JOIN)
  1. 内连接(INNER JOIN)又简称连接或自然连接,内连接使用比较运算符对两个表中的数据进行比较,列出与连接条件匹配的数据行,组合成新的记录。
  2. 语法如下:
    select * from student inner join grade on student.s_gid = grade.gid;
    
  3. 返回结果:
    在这里插入图片描述
  • 外连接
  1. 外连接包括左连接和右连接
    在这里插入图片描述
  2. 语法如下:
    select 所查字段 from1 LEFT | RIGHT [OUTER] JOIN2 ON1.关系字段 =2.关系字段 WHERE 条件
    #实例(where条件可带可不带)
    select * from student left join grade on student.s_gid = grade.gid;
    
  3. 返回结果:
    在这里插入图片描述
  • 复合条件连接查询
    复合条件连接查询就是再连接查询的过程中,通过添加过滤条件来限制查询结果,是结果更加精确。

4.4、子查询

  • 子查询是指一个查询语句嵌套另一个查询语句内部的查询。在执行查询语句时,首先会执行子查询中的语句,然后将返回结果作为外层查询的过滤条件。
  • 带IN关键字的子查询
  • 带EXISTS关键字的子查询
  • 带ANY关键字的子查询
  • 带ALL关键字的子查询
  • 带比较运算符的子查询

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189499.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!