当前位置:主页 > 查看内容

MySQL表的增删改查3

发布时间:2021-08-05 00:00| 位朋友查看

简介:文章目录 1.联合查询 1.1笛卡尔积 1.2 内连接 1.3外连接 1.3.1 左外连接 1.3.2 右外连接 1.4自连接 1.5 子查询 1.5.1单行子查询 1.5.2多行子查询 1.5.3 exists关键字 2.合并查询 2.1 union 2.2 union all 1.联合查询 1.1笛卡尔积 实际开发中往往数据来自于不……

1.联合查询

1.1笛卡尔积

实际开发中往往数据来自于不同的表,所以需要多表查询,多表查询是对多张表的数据取笛卡尔积。那么笛卡尔积是什么呢?
在这里插入图片描述
笛卡尔积:
先遍历第一张表,依次取出表中的第一条记录,再拿出这条记录和第二张表再进行排列组合。
注意: 关联查询可以对关联表取别名。

1.2 内连接

语法:

select 字段 from1 别名1[inner] join2 别名2 on 连接条件 and 其他条件
select 字段 from2 别名2 where 连接条件 and 其他条件;

(1)查询"xuxian"同学的成绩

select student.name,score.score,score.course_id
from student,score where student.name='xuxian'
and student.id=score.student_id;

select student.name,score.score,score.course_id
from student join score on student.name='xuxian'
and student.id=score.student_id;

在这里插入图片描述
(2)查询所有同学的总成绩,及学生的个人信息

select student.name,student.id,score.student_id,sum(score.score) 
 from student,score
where student.id=score.student_id group by student.id;

select student.name,student.id,score.student_id,sum(score.score) 
from student join score
on student.id=score.student_id group by student.id;

在这里插入图片描述
(3)查询所有同学的成绩,及同学的个人信息

select student.id,student.name,course.name, score.score
from student,course, score
where student.id=score.student_id
and course.id=score.course_id;

在这里插入图片描述

1.3外连接

外连接分为左外连接和右外连接,如果联合查询,左侧的表完全显示的我们称为左外连接;右侧完全显示我们就称为右外连接。
假设有两张表,此时学生表中的王五,在分数表中没有成绩,分数表中4,在学生表中没有学生存在。
在这里插入图片描述

1.3.1 左外连接

-- 左外连接,表1完全显示
select 字段名 from1 left join on2 on 连接条件;

--示例
select student.name, student.id,score.score from student left join on student.id=score.student_id;

在这里插入图片描述

1.3.2 右外连接

-- 右外连接,表2完全显示
select 字段名 from1 right join on2 on 连接条件;

--示例
select student.name, student.id,score.score from student right join on student.id=score.student_id;

在这里插入图片描述

1.4自连接

自连接是指在同一张表连接自身进行查询。
显示所有的“计算机原理”成绩比“Java成绩高的成绩信息”

select * from score s1,score s2
where s1.student_id=s2.student_id
and s1.course_id=1
and s2.course_id=3
and s1.score<s2.score;

在这里插入图片描述

1.5 子查询

子查询是指嵌入到其他sql语句中的select语句,也叫做嵌套查询。

1.5.1单行子查询

单行子查询:返回一行记录的子查询。
查询于“buxiaobiye"的同班同学:

select name from student where
classes_id=
(select classes_id from student
where name='buxiangbiye');

在这里插入图片描述

1.5.2多行子查询

多行子查询:返回多行记录的子查询
查询"english"或“chinese"课程的成绩信息。

select * from score
where score.course_id in
(select id from course
where name='chinese' or name='english');

在这里插入图片描述

1.5.3 exists关键字

select * from score
where exists
 (select score.course_id from course
 where(name='chinese' or name='english')
 and course.id=score.course_id);

在这里插入图片描述
exists:一边进行外层查询,一边进行里查询.
在from子句中使用子查询:子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当作一个临时表可以使用。

2.合并查询

在实际开发中,为了合并多个select执行的结果,可以把使用集合操作符union,union all.使用union和union all时,前后查询的结果集中,字段需要一致。

2.1 union

该操作符用于取得两个结果的并集。当使用该操作符时,会自动去掉结果集中的重复行。
查询id<3,或者名字为"english"的课程:

select * from course where id<3
union
select * from course where name='english';

在这里插入图片描述

2.2 union all

该操作符用于取得两个结果集的并集,当使用该操作符时,不会去掉结果中的重复行。
示例:查询id小于3,或者名字为"java"的课程

select * from course where id<3
union all
select * from course where name='java';

可以看到结果中Java出现了两次,没有去掉重复行。
在这里插入图片描述

;原文链接:https://blog.csdn.net/qq_52206533/article/details/115820576
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐