第二天Msqli查询简单用法

本文详细介绍了MySQL中的多表查询技术,包括子查询、内连接、外连接(左外连接、右外连接)的应用实例。从简单的员工信息查询到复杂的部门、职位、工资等级的联合查询,再到部门人数统计和员工上下级关系查询,全面展示了多种查询方法的使用场景和语法结构。
摘要由CSDN通过智能技术生成
  1. Mysq多表查询练习

 需求:

    1. 第一题

查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述   

      1.  子查询

是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 select,update 和 delete 语句中使用,而且可以进行多层嵌套,实际开发中,子查询经常出现在 where 语句中

 

      1. 内连接查询

内连接 ( inner join ) 使用 inner join 关键字连接两张表,并使用 on 子句来设置连接条件

多个表连接时,再 from 后边连续使用 inner join 或 join 即可

 

      1. 外连接查询

内连接查询的结果都是符合连接条件的结果,为外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足与不满足条件的记录

      1. 左外连接查询

 

      1. 右外连接查询

右外连接又称为右连接,右连接是左连接的反向连接。使用 right outer join 关键字连接两个表,可以简化为 right join ,并使用 on 子句来设置连接条件

 

    1. 第二题

查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置  

      1. 子查询查询

 

      1. 内连接查询

 

      1. 左外连接查询

 

      1. 外连接查询

       

    1. 第三题

查询员工姓名,工资,工资等级

SELECT e.ename,e.salary,s.grade  FROM emp e,salarygrade s where e.salary between s.losalary AND s.hisalary

 

    1. 第四题

查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

SELECT e.ename,e.salary,j.jname,j.description, d.dname,loc,s.grade as "工资等级"  FROM emp e,salarygrade s, dept d,job j where e.salary between s.losalary AND s.hisalary and e.job_id = j.id and e.dept_id = d.id

 

select a.id,a.ename,a.salary,b.jname,b.description,c.dname,c.loc,s.grade from ((emp a left join job b on a.job_id = b.id )left join dept c on a.dept_id = c.id) left join salarygrade s on a.salary between s.losalary AND s.hisalary

 

    1. 第五题

.查询出部门编号、部门名称、部门位置、部门人数

select d.id,d.dname,d.loc, count(e.id) as"人数" from emp e  left join dept d  on e.dept_id = d.id group by d.id

 

    1. 第六题
      1. 左外连接查询

查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询

select a.ename as "员工",b.ename as "领导" from emp a left join emp b on a.mgr = b.id

​​​​​​​ 

  1. 多表联查

1. inner join(等值连接) 只返回两个表中联结字段相等的行

  ①  2个表进行查询

SELECT

  t.tab1,

  t.tab2,p.tab1

FROM

  表1 AS t

  INNER JOIN 表2 AS p

    ON t.tab1 = p.tab1

GROUP BY  t.tab2

②  3个表进行查询

SELECT

  t.tab1,

  t.tab2,p.tab1

FROM

  (

    表1 AS a

    INNER JOIN 表2 AS p

      ON a.tab1 = p.tab1

  )

  INNER JOIN 表3 AS t

    ON a.tab1 = t.tab1

GROUP BY t.tab2

③   4个表进行查询

SELECT

  t.tab1,

  t.tab2,a.tab1

FROM

  (

    (

      表1 AS a

      INNER JOIN 表2 AS p

        ON a.tab1 = p.tab1

    )

    INNER JOIN 表3 AS c

      ON a.tab1 = c.tab1

  )

  INNER JOIN 表4 AS t

    ON a.tab1 = t.tab1

GROUP BY t.tab2

④  5个表进行查询

SELECT

  t.tab1,

  t.tab2,a.tab1

FROM

  (

    (

      (

        表1 AS a

        INNER JOIN 表2 AS p

          ON a.tab1 = p.tab1

      )

      INNER JOIN 表3 AS c

        ON a.tab1 = c.tab1

    )

    INNER JOIN 表4 AS d

      ON a.tab1 = d.tab1

  )

  INNER JOIN 表5 AS t

    ON a.tab1 = t.tab1

GROUP BY t.tab2

 ⑤ 6个表进行查询...

   多个表嵌套,  以此类推......

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

注: left join  、right join   和 inner join  一样嵌套即可, 不做举例~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值