先展示两个表

学生表:

老师表:

年级班级表

普通连表查询

查询年级的管理老师和班级的管理老师
select gradeclass.name as gradeName,teacher.name as teacherName from gradeclass,teacher where gradeclass.leaderid = teacher.id

查询多个表使用 select 字段名,字段名… from 表名1,表名2 的方式查询两张表

内连接查询 inner join

inner 可以省略
查询年级的管理老师和班级的管理老师
select gradeclass.name as gradeName,teacher.name as teacherName from gradeclass inner join teacher on gradeclass.leaderid = teacher.id

查询年级的年级主任老师
select gradeclass.name as gradeName,teacher.name as teacherName from gradeclass inner join teacher on gradeclass.leaderid = teacher.id where gradeclass.pid = 0

inner join也可以本表连接本表(这样需要起别名)
查询每个年级的班级,显示年级和班级名称
select g1.name as grade ,g2.name as class from gradeclass g1 join gradeclass g2 on g1.id=g2.pid

注:inner join 方式的使用比普通连表查询对比:

  1. 查询效率 inner join 要快很多 (因为使用普通查询where 的方式查询的时候所全不匹配一遍,然而inner join on 的方式on只匹配了匹配的内容)
  2. 普通查询的方式where后面就没有了,而inner join on 后面还可以跟where再次过滤数据

外连接 left join on 和 right join on

left join 就是把左面的表认为成主表
right join 就是把右面的表认为成主表

查询年级和班级的负责老师
select gradeclass.name as gradeName,teacher.name as teacherName from gradeclass right join teacher on gradeclass.leaderid = teacher.id

因为right join是右连接所以后面的表为主 宋老师因为没有管理班级或年级所以年级班级位置为null

上面的查询代码直接换成left join就会以左面的表认为成主表显示
select gradeclass.name as gradeName,teacher.name as teacherName from gradeclass left join teacher on gradeclass.leaderid = teacher.id

上面的sql语句就是改了一下left join左连接,因为左连接是左面的表为主表 宋老师的名字直接不显示

多表连查

查询年级下班级的班主任,显示成几年级几班,老师只显示班主任
select concat(g1.name,g2.name) gradeclassname,t.name from gradeclass g1 join gradeclass g2 on g1.id=g2.pid left join teacher t on g2.leaderid = t.id

查询年级下班级的班主任和学生,显示成几年级几班,老师只显示班主任
select concat(g1.name,g2.name) gradeclassname,t.name teachername,s.name studentname from gradeclass g1 join gradeclass g2 on g1.id=g2.pid left join teacher t on g2.leaderid = t.id left join student s on s.grade=g2.id

mysql连表查询,多表查询相关推荐

  1. mysql所有班级名称和人数_mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...

    mysql数据库优化课程---12.mysql嵌套和链接查询(查询user表中存在的所有班级的信息?) 一.总结 一句话总结: in:distinct:select * from class wher ...

  2. mysql 所有表的字段信息_mysql如何查询所有表和字段信息

    mysql查询所有表和字段信息的方法: 1.根据库名获取所有表的信息 SELECT * FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'e ...

  3. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  4. MySQL IN、Exist关联查询时,我们为什么建议小表驱动大表?

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  5. mysql多表连接 索引_MySQL多表查询之外键、表连接、子查询、索引

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...

  6. mysql查询员工表中所有员工入职20个月之后的日期_Mysql基础教程

    往期推荐 2020黑马Python教程 Docker基础知识 网易云课堂2019 Java高级教程 郭术生AE教程 SQL语句分类 DDL:数据定义语言,用来定义数据库对象:库.表.列等 DML:数据 ...

  7. Linux命令:MySQL系列之五--SELECT单表查询、多表查询升级及删除,插入

    SELECT:查询 SELECT select-list FROM tb WHERE qualification  根据标准qualification查找对应的行 查询语句类型:  qualifica ...

  8. php如何查询数据库表中数据库,PHP+MYSQL如何进行查询数据库

    PHP+MYSQL进行查询数据库的方法:1.函数[mysql_fetch_object()],从结果集中取得一行作为对象,并将字段名字做为属性:2.函数[mysql_num_rows()]获取由sel ...

  9. mysql 查看某个表缓存情况_MySQL 查询缓存 QUERY_CACHE

    保存查询返回的完整结果.当查询命中该缓存,MySQL会立即返回结果,跳过解析.优化和执行阶段. 官方在特定环境测试结果(官方文档中有详细说明): 1.如果对某表进行简单查询,但每次查询条件都不一样时, ...

  10. mysql多表查询书籍_MySQL多表查询及子查询

    1. MySQL数据库执行查询操作时的查询流程: 请求-->查询缓存 请求-->查询缓存-->解析器-->预处理器-->优化器-->查询执行引擎-->存储引擎 ...

最新文章

  1. 办公室28个经典赞美句子【转】
  2. qt 回调函数设置界面_回调函数实现类似QT中信号机制(最简单)
  3. How to determine what causes a particular wait type
  4. jsp2自定义标签开篇
  5. 安卓APP_ Fragment(3)—— Fragment的生命周期
  6. java web 自定义标签_JavaWeb学习——自定义标签
  7. 一行 Python 代码能实现这么多丧心病狂的功能?(代码可复制)
  8. php中数字字符串转换为字符串,php如何实现数字转字符串,php字符串转换为数字...
  9. TensorFlow tf.keras.layers.Dense
  10. rtmp直播推流软件推荐
  11. (01)ORB-SLAM2源码无死角解析-(18) SVD奇异值分解→求解Homography,Fundamental矩阵,了解矩阵自由度
  12. 使用SurfaceView完成地图无缝拼接
  13. 云计算到底有哪些魅力 云计算就业前景好不好
  14. (三)office2016-excel制作打钩按钮
  15. ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得NUMBER
  16. python-把excel里面的数据存储到矩阵里面
  17. EasyExcel 导出 excel(二)添加序号列,设置excel打印样式,导出即可打印
  18. Go语言中的Map和List实现有序Map
  19. linux网络编程大杂烩==Linux应用编程7
  20. MySQL自动化安装部署(数据库参数可自适应 DBA 推荐)

热门文章

  1. Elasticsearch8.0版本中Elasticsearch Java API Client客户端的基本使用方法
  2. 华为发布HarmonyOS 3.0,向“万物互联”再迈一步
  3. 页面缩放导致布局变乱
  4. python谁是卧底游戏流程图_python谁是卧底、猜词语
  5. - 转载- 阿里为大家学习Flutter操碎了心
  6. 混合高斯模型 http://www.cnblogs.com/CBDoctor/archive/2011/11/06/2236286.html
  7. 使用java开发flutter_Flutter教程从零构建电商应用(一)
  8. TIM学习文档——TIM简介
  9. 把脉全球设计创造力最新趋势!蒙纳字体发布《2022全球字体趋势报告》
  10. 微信小程序支付完整流程