《数据库查询大师:掌握SQL的终极技艺》

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 《数据库查询大师:掌握SQL的终极技艺》

前言


在前文 《数据库查询:解锁数据宝藏的魔法之钥》 中,我们探讨了数据库查询的基础知识和技巧。本篇文章将带您迈入更深的数据库查询领域,深入研究多表联查和子查询的奥秘。多表联查使您能够跨越不同数据表,将信息融合在一起,解锁更全面的数据视角。而子查询则是查询中的查询,为复杂数据问题提供了简洁而强大的解决方案。

我们将深入探讨如何使用JOIN语句进行多表联查,以及如何构建高效的子查询,以满足各种数据分析和报告的需求。无论您是数据库管理员、数据科学家还是应用开发者,本文都将为您提供深入的见解,帮助您更好地利用数据库查询工具,探索数据的更多层面。




多表联查


笛卡尔积

两张表在连接查询的时候,如果没有连接条件,那么会产生笛卡尔积(冗余数据)

select emp.*,dept.* from emp,dept


3.1 内连接

查询出来的数据一定满足链接的规则。

语法:

方言:select * from 表1 别名1,表2 别名2 where 别名1.xx=别名2.xx
标准:select * from 表1 别名1 inner join 表2 别名2 on 别名1.xx=别名2.xx
select e.*,d.* from emp e inner join dept d on e.deptno=d.deptno;



3.2 左外链接


因为内连接的查询结果,并不是所有的数据,而是满足规则的数据。

左外链接,右外连接是为了补充内连接的查询结果的。

左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能查询出来。左表中不满足条件的记录,右表部分都为NULL

语法:

select * from 表1 别名1 left [outer] join 表2 别名2 on 别名1.xx=别名2.xx
select * from emp e left outer join dept d on e.deptno=d.deptno;
select e.ename,e.deptno,d.dname from emp e left outer join dept d on e.deptno=d.deptno;


3.3 右外连接

右表记录无论是否满足条件都会查询出来,而左表只有满足条件才能查询出来。右表中不满足条件的记录,左表部分都为NULL

语法:

select * from 表1 别名1 right [outer] join 表2 别名2 on 别名1.xx=别名2.xx
mysql> select * from emp e right outer join dept d on e.deptno=d.deptno;


练习1:查询所有的部门,以及对应的员工信息。

SELECT
  e.*, d.*
FROM
  emp e
RIGHT JOIN dept d ON e.DEPTNO = d.DEPTNO
select d.DNAME,d.DEPTNO,e.DEPTNO,e.EMPNO,e.ENAME from dept d left join emp e on d.DEPTNO = e.DEPTNO;


练习2:查询每个员工的员工信息,工资等级。emp,salgrade

SELECT
e.*,s.*
FROM emp e
LEFT JOIN salgrade s
on e.SAL BETWEEN s.LOSAL and s.HISAL


练习3:查询每个员工的员工信息,部门名称,部门位置,工资等级

SELECT
e.*,d.DNAME,d.LOC,s.GRADE
FROM emp e
LEFT JOIN dept d
ON e.DEPTNO = d.DEPTNO
LEFT JOIN salgrade s
on e.SAL BETWEEN s.LOSAL and s.HISAL;


练习4:查询在部门在纽约的员工信息,部门名称,工资等级。

select 
e.*,d.dname,d.LOC,s.grade
FROM emp e
left join dept d
on e.deptno = d.deptno
LEFT JOIN salgrade s
on e.sal BETWEEN s.LOSAL and s.hisal
where d.LOC = 'NEW YORK';


练习5:查询每个部门的人数,部门名称,部门编号。

SELECT e.DEPTNO,d.DNAME,count(*) from emp e 
LEFT JOIN dept d ON e.DEPTNO = d.DEPTNO
group by e.DEPTNO,d.DNAME;
select t.*,d.DNAME
from (
SELECT e.DEPTNO,count(*) from emp e group by e.DEPTNO
) t
left join dept d
on t.DEPTNO = d.DEPTNO;

子查询

子查询:是指sql语句中包含另外一个select 语句。

子查询出现的位置:

from 后,作为表
where 后,作为条件


注意事项:


1,子查询必须在()里


2,在子查询中不能使用order by子句


3,子查询可以再嵌套子查询,最多不能超过255层


子查询:单行子查询,多行子查询


  1. 单行子查询 子查询的结果是单行数据 在where条件后,需要配合单行运算符:>,<,>=,<=,!=,=
  2. 多行子查询 子查询的结果是多行数据



1.查询比allen工资高的员工信息。

select * from emp where sal > (select sal from emp where ename='allen');


练习1:查询工资不是最高的,也不是最低的员工信息。


mysql> select * from emp where sal !=(select max(sal) from emp ) and sal !=(select min(sal) from emp);


练习2:不是销售部的员工信息

dname--->deptno


思路一:

select deptno from dept where dname='sales'

mysql> select * from emp where deptno != (select deptno from dept where dname='sales');


思路二:

select deptno from dept where dname !='sales';

mysql> select * from emp where deptno in(select deptno from dept where dname !='sales');


练习3:查询员工信息,要求工资高于部门编号为10的中的任意员工即可


思路一:

select min(sal) from emp where deptno=10; //

mysql> select * from emp where sal >(select min(sal) from emp where deptno=10);

练习4:查询员工信息,工资大于30部门的所有人


思路一:

mysql> select * from emp where sal >(select max(sal) from emp where deptno=30);

练习5:查询本公司工资最高的员工详细信息


select max(sal) from emp;

select * from emp e,dept d

where sal=(select max(sal) from emp)  and e.deptno=d.deptno;





最后


本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
数据库查询sql语句大全
SQL(Structured Query Language,结构化查询语言)是用于管理关系数据库的标准编程语言。以下是一些常见的 SQL 查询语句示例,这些示例可以帮助你进行基本的数据库操作。请注意,
|
SQL Oracle 关系型数据库
Oracle 数据库利用sql语句判断某个表是否是临时表实例演示,达梦数据库查询出所有临时表
Oracle 数据库利用sql语句判断某个表是否是临时表实例演示,达梦数据库查询出所有临时表
741 0
Oracle 数据库利用sql语句判断某个表是否是临时表实例演示,达梦数据库查询出所有临时表
|
5月前
|
SQL 存储 安全
SQL入门与进阶:数据库查询与管理的实用指南
一、引言 在数字化时代,数据库已经成为各行各业存储、管理和分析数据的关键基础设施
|
5月前
|
SQL 安全 数据库
SQL实践指南:从基础到进阶的数据库查询与管理
一、引言 在数据驱动的时代,数据库已成为各行各业不可或缺的一部分
|
5月前
|
SQL 存储 数据库
掌握SQL:数据库查询与管理的关键技能
一、引言 在信息化快速发展的今天,数据库已成为存储、处理和查询数据的重要工具
|
5月前
|
SQL 存储 监控
精通SQL:数据库查询与管理的全面指南
一、引言 在当今的数据驱动世界中,[数据库](https://www.iyxwzx.com/)技术无处不在,而SQL(结构化查询语言)则是数据库操作的基础
|
5月前
|
SQL 安全 数据库
精通SQL:数据库查询与管理的实战指南
一、引言 在当今数字化时代,[数据库](https://www.iyxwzx.com/)已成为企业、组织和个人不可或缺的数据[管理](https://www.iyxwzx.com/news/)工具
|
6月前
|
SQL 存储 数据库
SQL数据库查询优化技巧
【5月更文挑战第6天】本文介绍了7个SQL数据库查询优化技巧,包括选择合适索引、避免`SELECT *`、使用JOIN代替子查询、优化WHERE子句、使用LIMIT、分析查询计划和定期维护数据库。通过这些方法,开发者可以提升查询效率,改善系统性能。
|
SQL 数据库 C语言
用SQL语句进行数据库查询(复杂查询)
用SQL语句进行数据库查询(复杂查询)
146 0
|
SQL Serverless 测试技术
用SQL语句进行数据库查询(简单查询)
用SQL语句进行数据库查询(简单查询)
294 0