目录
一、 连接查询 对多个表进行查询
1.0 数据准备
1.1 连接查询
1.2 内连接 INNER JOIN
1.3 左连接 LEFT JOIN
1.4 右连接 RIGHT JOIN
1.5 FULL OUTER JOIN
1.6 自连接查询
1.7 子查询-嵌套在查询中
一、 连接查询 对多个表进行查询
1.0 数据准备
在之前的文章当中,我们在 base_1 当中有了一个 stu 表,记录的是学生的name age height等信息
第一步,我们再创建一个班级表 class
create table class(id int unsigned primary key not null auto_increment,name varchar(20) not null);
目前的班级表:
第二步,在班级表中插入数据
insert into class(name) values('class_1'),('class_2'),('class_3');
第三步,给 stu 表插入个字段classID,表示所在的班级
alter table stu add classID int unsigned;
第四步,给学生分班 使用 where
目前 21 个学生,3个班级,那就 7 人一个班级
mysql> update stu set classID=1 where id in(1,2,3,4,5,6,7);
mysql> update stu set classID=2 where id in(8,9,10,11,12,13,14);
mysql> update stu set classID=3 where id in(15,16,17,18,19,20,21);
分班结果:
ok 到此,前期的数据准备就完成了!
1.1 连接查询
当中 on 的作用是什么?
在 MySQL 中,ON 是连接查询中的一个关键字,用于指定连接条件,它的作用是将两个或多个表连接起来并返回匹配的数据行。
在连接查询中,使用 ON 关键字可以指定两个表之间的连接条件,这个条件用于匹配两个表中的数据行。
例如:
select * from stu inner join class on stu.classID = class.id;
这个查询语句表示将 stu和 class表连接起来,并且将它们之间的连接条件设置为 stu的 classID 字段等于 class的 id 字段。
MySQL连接查询是一种用于连接多个表并获取相关数据的查询方法。
它将两个或多个表中的行结合起来,根据两个表之间的共同列或键(如主键和外键)进行匹配,并返回匹配的结果。
连接查询可以通过 INNER JOIN、LEFT JOIN、RIGHT JOIN 或 FULL OUTER JOIN 的方式执行。
1.2 内连接 INNER JOIN
上面就是内连接的示例!
通俗一点就是:交集!
1.3 左连接 LEFT JOIN
左 和 右的区分,看在 join的左边还是右边
LEFT JOIN 返回左表中所有的行和右表中匹配的行,如果右表中没有匹配的行,则返回 NULL 值;
1.4 右连接 RIGHT JOIN
RIGHT JOIN 返回右表中所有的行和左表中匹配的行,如果左表中没有匹配的行,则返回 NULL 值;
1.5 FULL OUTER JOIN
FULL OUTER JOIN 返回左表和右表中所有的行,无论它们是否匹配。
1.6 自连接查询
MySQL 自连接查询是指在同一张表中进行连接查询。
自连接可以用来解决一些需要用到两个相同表的情况。
例如
我们有一个员工表,其中记录了员工的姓名、工资和上级姓名。
如果要查询每个员工的上级姓名和上级的工资,就需要使用自连接查询。
可以使用以下 SQL 语句进行自连接查询:
SELECT e.name, e.salary, m.name AS manager_name, m.salary AS manager_salary
FROM employee e
LEFT JOIN employee m ON e.manager_id = m.id;
其中,employee
是表名,e
和 m
是表的别名,id
是员工表的主键,manager_id
是上级员工的 ID。
这个查询语句将 employee
表自己连接了一次,使用 LEFT JOIN
连接,将员工表 e
中的 manager_id
与同一张表中上级员工的 id
进行匹配,然后将上级员工的姓名和工资返回。
1.7 子查询-嵌套在查询中
MySQL子查询是一个嵌套在另一个查询中的查询。
子查询可以用作 SELECT、FROM、WHERE 子句中的任何一部分来生成结果集合。
一个基本的子查询语法如下:
SELECT column1, column2, column3, ...
FROM table1
WHERE column_name ( SELECT column_name FROM table_name WHERE condition ) ;
子查询会首先执行
在上面的语句中,子查询 (SELECT column_name FROM table_name WHERE condition)
会首先执行,然后它的结果可以用于 WHERE 子句中的过滤条件。
另一个常见的子查询使用方法是嵌套在 JOIN 子句中,用于连接表与执行过滤操作。下面是一个示例:
SELECT *
FROM table1
JOIN (SELECT id, column2 FROM table2 WHERE condition) AS t2
ON table1.id = t2.id;
在上面的语句中,子查询 (SELECT id, column2 FROM table2 WHERE condition)
被赋予别名 t2
并与 table1
表连接,结果集将包含两个表中的所有列。
需要注意的是,如果子查询返回大量的结果,可能会导致性能下降
因此,尽量保持子查询返回的结果集较小,以提高查询性能。