mysql连接查询
1、笛卡尔乘积
SQL92写法:
select d.dname,e.ename from emp e,dept d where e.deptno = d.deptno;
SQL99写法(建议使用):
select d.dname,e.ename from emp e join dept d on e.deptno = d.deptno;
2、内连接
内连接查询出的数据是两张表的交集,即上图中C所表示的部分。
select d.dname,e.ename from emp e inner join dept d on e.deptno = d.deptno;
其中inner可以省略:
select d.dname,e.ename from emp e join dept d on e.deptno = d.deptno;
3、找出员工所对应的工资等级,显示员工姓名、工资、工资等级:
select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
4、查询员工的名称和员工对应的领导名称:
select a.ename empname ,b.ename leadername from emp a join emp b on a.mgr = b.empno;
说明:上面的写法是emp表自己跟自己做连接查询,这种写法叫做自连接。
5、找出每一个员工对应的领导名,要求显示所有员工:
select a.ename empname ,b.ename leadername from emp a left join emp b on a.mgr = b.empno;
说明:查询结果中的king的领导是null,使用左连接或右连接才可以将其查询出来。
找出每一个员工对应的部门名称,以及该员工对应的工资等级,要求显示员工姓名、部门名称、工资等级:
SELECT
e.ename, d.dname, e.sal, s.grade
FROM
emp e
JOIN
dept d ON e.deptno = d.deptno
JOIN
salgrade s ON e.sal BETWEEN s.losal AND s.hisal;
6、使用union合并结果
将查询的结果集合并,合并结果集时查询字段的个数必须一致。
查询出job为MANAGER和SALESMAN的员工:
SELECT
empno, ename, job
FROM
emp
WHERE
job = 'MANAGER'
UNION
SELECT
empno, ename, job
FROM
emp
WHERE
job = 'SALESMAN';
7、limit
作用:获取一表前几条戒中间某几行数据,主要用来分页处理,limit关键字只在MySQL中起作用。
找出工资排名在前5的员工:
select ename,sal from emp order by sal desc limit 0,5;
或者:
select ename,sal from emp order by sal desc limit 5;
找出工资排名在[ 3-9 ]的员工:
select ename,sal from emp order by sal desc limit 2,7;
参考:http://www.monkey1024.com/database/819
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了