玖叶教程网

前端编程开发入门

MySQL内连接(mysql内连接查询)

今天回到家有点晚了,本来是想一篇把几个常用的JOIN全部写出来,但怕影响睡觉的质量,就分开来写了。连接是关系型数据库的主要特点,连接查询是关系型数据库中最主要的查询,主要包括内连接、外连接。通过连接运算符可以实现多个表查询。主要就是介绍下面这三个语句的用法,这一篇介绍INNER JOIN。

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录
  • RIGHT JOIN(右连接):与LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

关系型数据库就是对表的连接、筛选和投影三个操作,筛选出满足条件的数据。然后对数据进行聚合、运算等操作。所以连接是第一步,而很多连接都是存在于逻辑当中,因为不需要展示出来所有的连接结果,也没有必要,但是我们大脑中一定要有一张完整的大表,后面的操作才不会乱。所以这里还是先介绍一下笛卡尔积,可以通过这一篇看一下介绍和Python的实现方式(Python_笛卡尔积)。下面是MYSQL中实现笛卡尔积,就是不加任何条件形成一张大表,数据是下面这两张,一个9行学生表,一个5行班级表,生成一张9*5=45的笛卡尔积表。

SELECT
  * 
FROM
  student,
  class;


INNER JOIN内连接的语法格式如下:

SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
  • 字段名:需要查询的字段名称。
  • <表1><表2>:需要内连接的表名。
  • INNER JOIN :内连接中可以省略 INNER 关键字,只用关键字 JOIN。
  • ON 子句:用来设置内连接的连接条件。

上面的笛卡尔积也可以通过INNER JION实现,语法如下↓

SELECT
  * 
FROM
  student
  INNER JOIN class;


一般情况下我们会筛选出符合条件,有意义的字段。可以发现,因为Jack是302班,而班级表里面没有302班,所以加了条件之后,Jack的信息就没有被筛选出来。

SELECT
  * 
FROM
  student as s
  INNER JOIN class as c
WHERE
  s.s_class_id=c.c_id;

INNER JOIN可以使用WHERE子句指定连接条件,但是INNER JOIN ... ON语法是官方的标准写法,而且WHERE子句在某些时候会影响查询的性能。所以上面的语句可以这么写↓

SELECT
  * 
FROM
  student as s
  INNER JOIN class as c ON s.s_class_id=c.c_id;


也可以指定查询的列,如果只需要查询姓名、班级名称和教室地址,就可以这么写↓

SELECT
  s.s_name AS 学生姓名,
  c.c_name AS 班级,
  c.c_add AS 教室
FROM
  student as s
  INNER JOIN class as c ON s.s_class_id=c.c_id;


多张表查询,这里使用三张表进行查询,再加一个课程表格。

SELECT
  * 
FROM
  student as s
  INNER JOIN class as c ON s.s_class_id=c.c_id
  INNER JOIN course as co ON co.c_id = c.c_id


End

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言