首页 > 数据库 >MySQL多表关联查询+子查询_R

MySQL多表关联查询+子查询_R

时间:2022-12-28 11:32:40浏览次数:43  
标签:多表 -- 查询 emp MySQL WHERE id SELECT


MySQL多表关联查询+子查询


-- **************关联查询(多表查询)****************
-- 多表查询规则:1)确定查询哪些表。 2)确定哪些字段。 3)表与表之间连接关系(规律:连接条件数量=表数量-1)。
-- ***1.交叉连接查询(笛卡尔乘积,查询条数=表1数据条数*表2数据条数。基本不会用)=cross join
SELECT empName AS '姓名', deptName AS '部门名称' FROM emp, dept;

-- 需求:查询员工及其所在部门(显示员工姓名,部门名称)
-- ***2.内连接查询(只有满足条件的结果才会显示。使用最频繁)
-- 2.1语法一,隐式内连接
SELECT empName AS '姓名', deptName AS '部门名称' -- 2)确定哪些字段
FROM emp, dept -- 1) 先确定查询哪些表
WHERE emp.deptId=dept.id; -- 3) 表与表之间连接关系
-- 2.2语法二 显示内连接
SELECT empName AS '姓名', deptName AS '部门名称'
FROM emp
INNER JOIN dept
ON emp.deptId=dept.id; -- 注意这里用on
-- 使用别名
SELECT e.empName AS '姓名', d.deptName AS '部门名称'
FROM emp e
INNER JOIN dept d -- inner join 等价于 join
ON e.deptId=d.id;
-- 需求:查询每个部门的员工
-- ***3.左(外)链接查询(使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接则显示null)
-- 注意:左外连接:左边的数据一定会完整显示。
SELECT d.deptName "部门", e.empName "员工"
FROM dept d
LEFT OUTER JOIN emp e -- left outer join 等价于 left join
ON d.id=e.deptId;
-- ***4.右(外)链接查询(使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接则显示null)
SELECT d.deptName "部门", e.empName "员工"
FROM emp e
RIGHT OUTER JOIN dept d -- left outer join 等价于 left join
ON d.id=e.deptId;
-- *****************修改表数据*******************
ALTER TABLE emp ADD bossId INT;
UPDATE emp SET bossId=1 WHERE id = 2;
UPDATE emp SET bossId=2 WHERE id = 3;
UPDATE emp SET bossId=3 WHERE id = 4;
UPDATE emp SET bossId=4 WHERE id = 5;
-- ***5.自连接查询
-- 需求:查询员工及其上司
SELECT e.empName "员工", s.empName "上司"
FROM emp e
LEFT OUTER JOIN emp s
ON e.bossId = s.id;

-- ***6.子查询(嵌套查询)
-- 需求:员工id=1所在部门的所有员工信息
-- 1.查询员工id=1所在的部门
SELECT deptId FROM emp WHERE emp.id=1;
-- 2.查询该部门所有员工信息
SELECT * FROM dept WHERE dept.id=(SELECT deptId FROM emp WHERE emp.id=1);

重点:子查询


  注意:


   1) 子查询作为中间表时,必须给中间表取一个别名。


    2)当子查询查询的结果有多个时,作为条件使用时用  in


in ,因为不确定中间表的结果数据条数,用in比较保险。


注意1证明:


MySQL多表关联查询+子查询_R_连接查询

 


注意2证明:   需求4:查询“html”课程考试成绩为60-80分的学生名单


①一个单表查询




MySQL多表关联查询+子查询_R_数据_02




MySQL多表关联查询+子查询_R_MySQL多表查询_03

 

②用①中查出的数据,作为子查询的条件数据。



MySQL多表关联查询+子查询_R_连接查询_04




MySQL多表关联查询+子查询_R_MySQL多表查询_05



③用②中查出的数据,作为子查询的中间表。



MySQL多表关联查询+子查询_R_连接查询_06




MySQL多表关联查询+子查询_R_连接查询_07



注意:上面子查询结果作为中间表使用,必须取别名,否则报错: 错误码: 1248 Every derived table must have its own alias

 死


完成查询


SELECT * 
FROM student s
WHERE s.sId IN (SELECT sId FROM(SELECT se.sId, se.score FROM studentExam se WHERE se.geId=(SELECT ge.geId FROM gr


MySQL多表关联查询+子查询_R_连接查询_08



 

MySQL多表关联查询+子查询_R_数据_09


标签:多表,--,查询,emp,MySQL,WHERE,id,SELECT
From: https://blog.51cto.com/u_15769923/5974005

相关文章

  • sql查询将id用逗号拆分查出名称
    1、博客表  标签表  每个博客可能对应多个标签,比如一篇博客中用到的技术有springboot、mybatis等  现在根据标签的id,查出对应的标签的名称:  查询......
  • Kettle 连接 MySql 驱动:Driver class 'org.gjt.mm.mysql.Driver' could not be found
    异常:Driverclass'org.gjt.mm.mysql.Driver'couldnotbefound,makesurethe'MySQL'driver(jarfile)isinstalled.org.gjt.mm.mysql.DriverLink1:https://mvnrep......
  • MySQL中的insert ignore into
    一言以蔽之,insertignoreinto:忽略重复的记录,直接插入数据。 1、使用insertignoreinto语句时,如果主键冲突,只是提示"warnings"。如果使用insertinto语句时,如果主......
  • MySQL约束条件介绍
    无符号、零填充unsigned #因为正负值符号会占用一个比特位,使用此约束条件可以去掉数字类型里面的正负值符号,之后相同数字类型会支持的正数范围会更大 idintunsigne......
  • mysql Event、存储过程、表命令
     Mysql事件调度器(EventScheduler)类似于定时器,可以在某一个时间点执行一个SQL语句或一个语句块(BEGIN...END);或者每隔固定间隔重复执行。类似于Linux下的crontab,或Windows......
  • mybatis批量update(mysql)
    批量插入:<insertid="batchInsert">insertintotestTable(id,content)values<foreachcollection="list"item="item"index="index"separator=",">......
  • MySql索引下推知识分享
    作者:刘邓忠Mysql是大家最常用的数据库,下面为大家带来mysql索引下推知识点的分享,以便巩固mysql基础知识,如有错误,还请各位大佬们指正。1什么是索引下推索引下推(In......
  • docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
    一、前言在数据量大的企业级实践中,Elasticsearch显得非常常见,特别是数据表超过千万级后,无论怎么优化,还是有点力不从心!使用中,最首先的问题就是怎么把千万级数据同步到Elast......
  • mysql相关优化配置
    [mysqld]#mysql数据存储目录datadir=/data/mysql#socket存储socket=/tmp/mysqld.sock#当一个磁盘或分区空间不够时,可以将数据存储到其他的磁盘或分区symbolic-links=......
  • 基于KeepAlived的MySQL主主互备模式的高可用
    架构图主要设计思路是通过MySQLReplication技术将两台MySQLServer互相将对方作为自己的Master,自己又同时作为对方的Slave来进行复制。这样就实现了高可用构架中的数据......