mysql多表查询返回值_MySQL的多表查询和子查询4(笔记)

联结查询:事先将两张或多张表jion,根据join的结果进行查询 交叉联结:如果交叉A表和B表,那查询的结果是数据是A*B行,这种查询大多没用,

自然联结(内联结):A表的每一条记录都在B表中有一条匹配的记录

等值联结:把两张表的对应字段做等值关联

条件比较:做条件判断,如:比较的.不过这种用的比较少

外联结:A表的每一条记录不需要在在B表中有一条匹配的记录

左外联结:只保留出现在左外联结运算(左边)之前的关系中的元组;

语法:left_tb_name LEFT JOIN right_tb_name ON 联结条件

右外联结:只保留出现在右外联结运算(右边)之后的关系中的元组;

语法

全外联结:MySQL不支持全外联结

自联结:自己联结自己

字段别名和表别名:AS

子查询:在查询中嵌套的查询,可以嵌套WHERE后面,用在WHERE后面的话,如果是用于比较表达式时,他的返回值只能有一个.如果要取多个返回值时,使用EXISTS表示是否存在,如果要判断是否在指定列表中,使用IN.

如果是用在FROM中的子查询:SELECT slias.col,...FROM (SELECT clause) AS alias WHERE clause

注:mysql对子查询的优化不是特别好,所以建议少用子查询.

现有如下数据库

18fc7d999bc4d69436809cf37eacb40b.png

学生表

78f3e5843c0fb9599ecba9989446fe5a.png

班级表

6acf5adb99b76376179cf6328f11d597.png

课程表

04a033257a1fb59501675b803d478874.png

成绩表

4a2c69e7eb79ed07e1608f7014889e75.png

班级表和课程表的对应表

bdc5b8e79dc393d69c53ef69493572b7.png

1.交叉连接:

下面的查询结果是200行,是因为students有25行,classes有8行,这样连接相乘关系

5ddc2c93aa5402581620f7a87dc68243.png

2.等值连接,这等值关系为23个而不是25个的原因是,students中有两个ClassID为NULL,这样他和classes中的ClassID就找不到对应关系,所以就忽略了两个

6bae0feb8ef14824abb7912f8336e293.png

3.如果联结的两张表中有相同的字段,为了以示区分,可以使用db_name.tb_name的方式:如:

4bc4d7393d002817a9cc1c1296b53014.png

4.字段别名

d4f6f75ed7de7e5106b443b1048a457a.png

5.左外联结,左边有的右边没有,右边就NULL,以左为准,保留坐标中的每一个元组

58db8175f60f33f922f21f5c492bed6d.png

6.右外联结,右边有的左边没有,左边就NULL,以右为准,保留右表中的每一个元组

46a7aa4815fd88fe8741df554c15b64e.png 练习:

1.显示前5位同学的姓名,课程及成绩

SELECT Name,Course,Score FROM students,courses,coc,scores WHERE students.StuID = coc.ClassID AND coc.CourseID = courses.CourseID AND students.StuID <= 5 AND students.StuID = scores.StuID AND coc.CourseID = scores.CourseID;????????

231d78d47310609acd52bb3198f82638.png

2.显示成绩高于80的同学姓名及课程

628c74c382404be17998885cb6a99f1d.png

3.求前8位同学每位同学自己两门课程的平均成绩,并按降序排列

7354381c8dc658e5a87f1b450052e5a4.png

4.显示每门课程课程名称及学习的同学的个数

871d48243b2f0fb38ddd0d79ef143f5f.png

5.显示其年龄大于平均年龄的同学的名字

2f3ba2abd280eb027838709e0bbed1de.png

6.显示学习课程为第4门课的同学的名字

8f2aa0cc099fe6db369c80b6b1cbc2ea.png

7.显示成员数最少为3个的班级的同学中年龄大于同伴同学平均年龄的同学

8.统计各班级中年龄大于全校同学平均年龄的同学

子联结

30605447859836dce7e33c2470cd9ebf.png

联合查询:

把两张或两种以上的表的查询结果合并成一个结果进行输出

e7a460c1ce6c63ffba021e9b337b7a98.png MySQL视图:视图就是一个虚表,例如在:students中做视图,视图会被当作表来对待,MySQL对视图的支持也很有限,给用户授权视图的方法和给用户表授权的方法是一样的

创建一个视图,只包含StuID,Name,Age,Gender

14defffb172b89a6fad1af81f931b13f.png

查看视图状态

17c894279b1abb2662bf4d0bfb58de67.png

查询视图

e155ce7099b0867e06a9da2a0303ead4.png

删除视图

b3caf8982451aa7c55b01bdd7efa15fc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值