当前位置:网站首页 > SQL数据库编程 > 正文

mysql主键查询慢(mysql查询慢查询)



在关系型数据库中,我们通常为了减少数据的冗余量将对数据表进行规范,将数据分割到不同的表中。当我们需要将这些数据重新合成一条时,就需要用到我们介绍来将要说到的表连接。

常用术语

冗余(Redundancy):存储两次数据,以便使系统更快速。

主键(Primary Key):主键是唯一的。同一张表中不允许出现同样两个键值。一个键值只对应着一行。

外键(Foreign Key):用于连接两张表。

表连接的方式

内连接

外连接

自连接

我们接下来将对这三种连接进行详细的介绍。

数据准备

我们需要创建下面的数据表来作为示例:

student表

表结构:

字段解释

studentId

学号(主键)

name

姓名

phone

电话

数据:

mysql俩表联查很慢 mysql两张表联合查询_mysql俩表联查很慢

数据:

mysql俩表联查很慢 mysql两张表联合查询_ci_02

内连接

内连接就是表间的主键与外键相连,只取得键值一致的,可以获取双方表中的数据连接方式。语法如下:

SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

运行结果:

这样,我们就成功将【student】表中的【name】和【college】表中的【collegeName】进行了重新结合,并检索出来。

外连接

与取得双方表中数据的内连接相比,外连接只能取得其中一方存在的数据,外连接又分为左连接和右连接两种情况。接下来,我们将介绍这两种连接方式。

左外连接

左连接是以左表为标准,只查询在左边表中存在的数据,当然需要两个表中的键值一致。语法如下:

SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

运行结果:

我们可以看出,与内连接查询结果不同的是:【赵六】、【钱七】这两个学生虽然没有学校ID但是也被查出来了,这就是我们所说的,他会以左连接中的左表的全部数据作为基准进行查询。

右外连接

同理,右连接将会以右边作为基准,进行检索。语法如下:

我们可以看出,这里就是以右边的表【college】为基准进行了检索,因为【student】中并没有【厦大】的学生,所以检索出来的为【NULL】

注意事项:

内连接是抽取两表间键值一致的数据,而外连接(左连接,右连接)时,是以其中一个表的全部记录作为基准进行检索。

左连接和右连接只有数据基准的区别,本质上是一样的,具体使用哪一种连接,根据实际的需求所决定

无论是内连接还是外连接,在查询的时候最好使用【表名.列名】的方式指定需要查询的列名,否则一旦两个表中出现了列名一致的数据时,可能会报错,养成良好的习惯很重要。

表的别名:其实我们在查询的过程中,如果遇到了特别复杂的数据表名,我们可以通过取别名的方式来实现,使用的是我们以前使用过的【AS】语句,例如,我们的内连接就可以化简为下面的语句:

SELECT s.name,c.collegeName FROM student AS s INNER JOIN college AS c ON s.collegeId = c.collegeId;查询结果一致,是不是瞬间觉得语句简洁很多呢?

自连接

自连接顾名思义就是自己跟自己连接,有人或许会问,这样的连接有意义吗?答案是肯定的。

例如,我们将【student】的数据改为下图:

mysql俩表联查很慢 mysql两张表联合查询_mysql教程详解之多表联合查询_03

运行结果如图:

自连接的使用情况还是很多的,比如当我们找某个站点所经过的所有公交等,都可以采用自连接的方式进行检索;

子查询

通常我们在查询的SQL中嵌套查询,称为子查询。子查询通常会使复杂的查询变得简单,但是相关的子查询要对基础表的每一条数据都进行子查询的动作,所以当表单中数据过大时,一定要慎重选择。基本语法如下:

SELECT 列名1 ...FROM 表名 WHERE 列名 比较运算符 (SELECT 命令);

例如:我们利用上面的内连接的例子,在它的基础上查出学校为【清华】的学生的姓名

查询成功。

到此这篇mysql主键查询慢(mysql查询慢查询)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • mysql自增主键和uuid(mysql自增主键缺点)2025-05-26 19:18:09
  • 为什么用redis不用mysql(有redis为什么还要mq)2025-05-26 19:18:09
  • sql循环函数(sql实现循环)2025-05-26 19:18:09
  • pymysql由于目标计算机积极拒绝(sqlserver由于目标计算机积极拒绝,无法连接)2025-05-26 19:18:09
  • mysql导入sql文件过大(mysql导入sql文件太慢)2025-05-26 19:18:09
  • mysql主键uuid(mysql主键重复怎么解决)2025-05-26 19:18:09
  • mysql导入sql文件跳过错误(mysql怎么导入sql文件错误)2025-05-26 19:18:09
  • 数据库增删改查面试题(sql数据库增删改查操作面试)2025-05-26 19:18:09
  • sql循环语句的几种写法(sql循环语句的几种写法区别)2025-05-26 19:18:09
  • sql server打开sql文件(sqlserver打开sql文件)2025-05-26 19:18:09
  • 全屏图片