MySQL常用查询命令(连接查询&子查询)
多张表联合起来查询即为连接查询,可分为:
- 内连接:等值连接、非等值连接、自连接
- 外连接:右外连接、左外连接
也就是先把多张表通过某种指定条件用join...on...语法连接起来,然后再进行where... group by... having等条件查询。
内连接中的等值连接
// 从emp表中查询ename,从dept表中查询员工所在的部门名称,即dname
mysql> select e.ename as employee,d.dname as department
-> from emp e
-> inner join dept d
-> on e.deptno=d.deptno;
其中inner可以省略
内连接中的非等值连接
// 从emp表中查询ename,从salgrade表中查询员工薪资等级
mysql> select e.ename employee,s.grade
-> from emp e
-> join salgrade s
-> on e.sal between s.losal and s.hisal;
内连接中的自连接,也就是自己相当于多张表
// 从emp表中查询ename和员工的领导的名字
mysql> select e.ename employee,l.ename leader
-> from emp e
-> join emp l
-> on e.mgr=l.empno;
在该查询结果中,不包括没有领导的员工
外连接中表有主次之分,而内连接中表没有主次之分。主表就是查询其中的全部数据,关联查询此表中的数据。右外连接表示join右侧的表是主表,左外连接则join左侧的是主表
// 从emp表中查询ename和员工领导的名字,没有领导的员工也要包括
mysql> select e.ename employee,l.ename leader
-> from emp e
-> left outer join emp l
-> on e.mgr=l.empno;
可以查询到emp表中的全部员工,没有领导的则leader字段显示NULL,上述语句可以改写为右连接,其中的outer可以省略。
mysql> select e.ename employee,l.ename leader
-> from emp l
-> right join emp e
-> on e.mgr=l.empno;
可见,外连接查询的结果的数量>=内连接的查询结果的数量。一条SQL语句中内连接和外连接可以同时存在。
// 从emp表中查询全部员工名字、领导名字,所在部门名字、薪资等级
mysql> select e.ename as employee,l.ename as leader,d.dname as dept,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
-> left join emp l
-> on e.mgr=l.empno;
上述join...on..语句的顺序不重要,也就是说
mysql> select e.ename as employee, l.ename as leader,d.dname as dept,s.grade
-> from emp e
-> left join emp l
-> on e.mgr=l.empno
-> join dept d
-> on e.deptno=d.deptno
-> join salgrade s
-> on e.sal between s.losal and s.hisal;
查询出来的结果一样,只是顺序不一样。
子查询即查询语句中嵌套查询语句
where子句中嵌套select:
// 从emp表中查询薪资大于平均薪资的员工姓名和其薪资
mysql> select ename as name,sal as salary
-> from emp
-> where sal>(select avg(sal) from emp);
from子句中嵌套select,可以把子查询的结果当作一张临时表
// 从emp和salgrade表中查询不同岗位的平均薪资和薪资等级
mysql> select t.job,t.avgsal,s.grade
-> from (select job,avg(sal) as avgsal from emp group by job) as t
-> join salgrade s
-> on t.avgsal between s.losal and s.hisal;
注意,这里最好给子查询的临时表的查询字段都取个别名。
此外,union用于合并查询结果集
mysql> select ename,job from emp where job='MANAGER'
-> union
-> select ename,job from emp where job='SALESMAN';
与
mysql> select ename,job from emp where job='MANAGER' or job='SALESMAN';
查询结果一样,但是使用union的效率更高。
limit用于分页查询,即依照条件取出部分查询结果
mysql> select ename,sal from emp order by sal desc limit 2,3;
其中2是起始位置,0时可以省略,3是取出的结果数量。
mysql> select ename,sal from emp order by sal desc limit 5;
limit (pageNo-1)*pageSize, pageSize;
MySQL常用查询命令(连接查询&子查询)的更多相关文章
- mysql的联合,连接,子查询
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- mysql学习笔记-- 多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长
一.查询加强 1.在mysql中,日期类型可以直接比较,需要注意格式 2.%:表示0到多个字符, _:表示单个字符 exp:显示第二个字符为大写O的所有员工的姓名和工资 select name fr ...
- MySQL 子查询(四)子查询的优化、将子查询重写为连接
MySQL 5.7 ref ——13.2.10.10优化子查询 十.子查询的优化 开发正在进行中,因此从长远来看,没有什么优化建议是可靠的.以下列表提供了一些您可能想要使用的有趣技巧.See also ...
- MS sql server 基础知识回顾(二)-表连接和子查询
五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...
- mysql加强(6)~子查询简单介绍、子查询分类
一.子查询简单介绍 1.什么是子查询? 一个查询之中嵌套了其他的若干查询. 在使用select 语句查询时,有时候where的查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果. 子 ...
- ylb:SQL 表的高级查询-多表连接和子查询
ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...
随机推荐
- Tomcat-默认访问的工程和默认访问的资源
Tomcat(默认访问的工程和默认访问的资源) ROOT的工程的访问,以及默认index.html页面的访问 当我们在浏览器地址栏中输入访问地址如下: http://ip:port/ ====== ...
- 『无为则无心』Python函数 — 38、Python中的异常
目录 1.异常概念 2.了解异常 3.异常的写法 (1)语法 (2)快速体验 (3)捕获指定异常 (4)异常中的else (5)异常中的finally (6)总结 1.异常概念 定义:程序在运行过程当 ...
- python17day
昨日回顾 自定义模块等 今日内容 自定义模块 模块是什么? 抖音:20万行代码全部放在一个py文件? 为什么不行? 代码多,读取时间长 代码不容易维护 所以应该? 一个py文件拆分100个文件,100 ...
- Zookeeper 源码解析-环境准备
为了深入学习Zookeeper,准备把zookeeper源码导入eclipse中学习 一.Ant环境准备 因为我自己用的是Mac,直接输入命令:brew install ant即可 如果是window ...
- 蓝桥杯试题 基础练习 2n皇后问题以及n皇后问题
在学习2n皇后之前,我们应该认识一下n皇后问题: 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于 ...
- 微信小程序之video组件与cover-view组件和cover-image组件灵活应用
前言:最近忙着赶项目,没时间更博:希望和大家一起学习一起进步. 本人遇到的坑,以及爬出坑的方法:在某个微信小程序项目中,有这样一个需求:在滑块swiper组件和swiper-item组件中嵌套vide ...
- IDEA Debug常用快捷键
快捷键 介绍 F7 步入:进入到方法内部执行.一般步入自定义的方法.区别于强行步入 F8 步过:不会进入到方法内部,直接执行. F9 恢复程序:下面有断点则运行到下一断点,否则结束程序. Shift+ ...
- Web容器中DefaultServlet详解
万分感谢原文作者:_licho 原文链接:https://blog.csdn.net/qq_30920821/article/details/78328608 Web容器中DefaultServlet ...
- SqlServer数据库表生成C# Model实体类SQL语句——补充
在sql语句最前边加上 use[数据库名] 原链接:https://www.cnblogs.com/jhli/p/11552105.html --[SQL骚操作]SqlServer数据库表生成C ...
- NoSQL 之 Redis配置与优化
NoSQL 之 Redis配置与优化 1.关系数据库与非关系型数据库概述 2.关系数据库与非关系型数据库区别 3.非关系型数据库产生背景 4.Redis简介 5.Redis安装部署 6.Redis 命 ...