MySQL 条件查询
查询条件
having
having的功能和where一样,都是用来筛选查询,不同的是,where在分组之前用,having必须在分组之后使用。
# 查询每个部门大于30岁的平均工资,并且保留平均工资在10000以上的
1、过滤大于30岁的
select * from dep where age > 30;
2、在大于30岁的这群人中,再分组得到每一个部门
select post, avg(salary) from emp where age > 30 group by post;
3、在分组结果的基础上,过滤掉平均工资小于10000的部门
select post, avg(salary) as avg_salary from emp where age > 30 group by post having avg(salary) > 10000;
distinct
去重。
select dictinct age from emp;
order by
将数据升序或降序排列。
# order by colunm_name asc; 升序
# order by colunm_name desc; 降序
# 排序也可以指定多个字段进行排序
select * from emp order by age, salary desc;
# 查询每个部门中大于30岁的平均工资,并且保留平均工资在10000以上的,按照平均工资降序排列
select post, avg(salary) as avg_salary from emp where age > 30 group by post having avg(salary) > 10000 order by avg(salary) desc;
limit
分页,限制数据显示。
select *from emp limit 5; # 限制前5条数据
select *from emp limit 5, 5; # 从第5条开始,查询5条数据
# 查询工资最高的员工
select max(salary) from emp;
select * from emp order by salary desc, age asc limit 1;
多表查询
子查询
也称之为内查询,或者说嵌套查询,将一个SQL语句的结果作为另外一个SQL语句的条件。
使用子查询必须遵循以下几个规则:
- 子查询必须括在圆括号中。
- 子查询的 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列相比较。
- 子查询不能使用 ORDER BY,不过主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用。
- 返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符。
- SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB 类型值的引用。
- 子查询不能直接用在聚合函数中。
- BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中。
# 基本语法
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
连表查询
将多个表拼接成一张表,当作单表查询。
select * from table1, table2;
select * from emp,dep where table1.table2_id = table2.id # 筛选条件消除笛卡尔
内链接查询
查找出同时存在在不同表中的关联数据形成结果表。
SELECT 字段1,字段2,字段3,…… FROM 表名1 INNER JOIN 表名2 ON 关联条件;
等同于
SELECT 字段1,字段2,字段3,…… FROM 表名1,表名2 WHERE 关联条件;
与INNER JOIN组合使用ON子句,而不是WHERE。ON和WHERE后面的指定条件相同, WHERE子句定义条件更简单明了,但某些时候会影响查询性能,而INNER JOIN语法是ANSI SQL的标准规范,能够确保不忘记连接条件。
左连接查询
左连接(LEFT JOIN) 以左表为基准,将右表中的信息匹配进去,如果右表无对应值,则以空值显示。
SELECT 字段1,字段2,字段3,…… FROM 表名1 LEFT JOIN 表名2 ON 关联条件;
若去掉左表有而右表为空的部分,在SELECT语句末尾加上"WHERE 表2.关联字段=NULL"
右连接查询
右连接(RIGHT JOIN) 以右表为基准,将左表中的信息匹配进去,如果左表无对应值,则以空值显示。
SELECT 字段1,字段2,字段3,…… FROM 表名1 RIGHT JOIN 表名2 ON 关联条件;
若去掉右表有而左表为空的部分,在SELECT语句末尾加上"WHERE 表2.关联字段=NULL"
union
UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
- expression1, expression2, ... expression_n: 要检索的列。
- tables: 要检索的数据表。
- WHERE conditions: 可选, 检索条件。
- DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
- ALL: 可选,返回所有结果集,包含重复数据。
MySQL 条件查询的更多相关文章
- mysql条件查询and or使用实例及优先级介绍
mysql and与or介绍 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来. 使用OR关键字时: 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来. 如果不符合这 ...
- (四)MySQL条件查询(通配符、模糊查询)、排序查询、分组查询(单行、分组函数)
一.条件查询 1.含义:前面学的基础查询可以查询一个或多个字段,如果需要的数据仅仅是其中的某一行或多行就用到了条件查询. 2.语法:(序号表示语句执行顺序) SELECT 字段名 ③ FROM 表名 ...
- mysql条件查询中AND与OR联合使用的注意事项!
mysql查询中经常会用到AND与OR一起使用的情况,可如果写法不对,往往会起到相反的效果,这不,前几天就碰到了,最后测试果然提了一堆bug!!!! 废话就不多说了,主要总结一下几点: 一 当mysq ...
- MySQL条件查询
语法: ①SELECT 查询列表(可以包括:字段.表达式.常量值.几个拼在一起的,构成的表) ②FROM 表名(原始表) ③WHERE (理解为当...筛选条件=TRUE或筛选条件=FALSE) 筛选 ...
- 三:mysql条件查询
1:查询工资等于5000的员工
- mysql条件查询-排除null ---oracle、mysql 区分总结
' AND IFNULL(c.`COURSE_NO`,'-1') != '-1' ;
- Mysql动态多条件查询
动态多条件查询是一类经常遇到的问题. 在Mysql里面可以用语句简单的解决. SELECT * FROM product WHERE price = IF('{0}' = '', price, '{0 ...
- mysql进阶(五)数据表中带OR的多条件查询
MySQL数据表中带OR的多条件查询 OR关键字可以联合多个条件进行查询.使用OR关键字时: 条件 1) 只要符合这几个查询条件的其中一个条件,这样的记录就会被查询出来. 2) 如果不符合这些查询条件 ...
- Mysql 中Left/Right join on后面and和where条件查询的差异-Mysql SQL运算符是有优先级
一.Mysql中Left/Right join on后面and和where条件查询的差异 1.建两张测试表,一张商户定义表.一张商户操作状态明细表 1)商户定义表 CREATE TABLE hope. ...
随机推荐
- 使用robot合并Robot Framework测试报告
p.p1 { margin: 0; font: 17px ".PingFang SC" } p.p2 { margin: 0; font: 12px "Helvetica ...
- Linux文件目录结构详解 (转)
整理自<鸟哥的私房菜> 对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能, ...
- [小技巧] Notepad++关闭拼写检查
From : http://blog.csdn.net/xuefeng0707/article/details/18272989 把[插件]-[DSpellCheck]-[Spell Check Do ...
- python 字典添加数据
dzkuaa={}#类似{"张三":2,"李四":3} for i in range(23): ming=bj[i] if dzkuaa.get(ming)== ...
- urllib3使用池管理发送请求和requests常用方法的基本使用+session使用
使用urllib3的池管理器 urllib3是在urllib进行更加深入的改进,最大的好处就是在urllib的基础上添加了池管理,以至于我们不需要再去注意我们需要由那个链接去发送请求,而只需要获取到链 ...
- IDEA 生成类注释和方法注释
目录 一.生成类注释-01 1.1.生成类注解模板 1.2.把模板设置到IDEA中 1.3.效果图 二.生成类注释-02 2.1.生成类注释模板 2.2.把模板设置到IDEA中 2.3.效果图 2.4 ...
- R绘图(7): 把散点图的点换成扇形
前几天分析了一批单细胞TCR的数据,需要画这样一个图: 行是不同的样本,列是不同的T细胞类型,每一个位置点的大小表示T细胞的数目多少,并且还需要根据T细胞所属的克隆型类型涂色.这个图用来描述TCR是我 ...
- python之数据驱动ddt操作(方法一)
下载ddt并安装 Pip install ddt 或者官网下载安装 http://ddt.readthedocs.io/en/latest/ https://github.com/txels/ddt ...
- 上手Coc.nvim 完全指南
上手Coc.nvim 完全指南 介绍 Coc.nvim 是一个基于NodeJS 的适用于Vim8, Neovim 的Vim 智能补全插件. 拥有完整的LSP 支持.配置.使用方式及插件系统的整体风格类 ...
- P5042 丢失的题面
P5042 丢失的题面 顺序:10 - 1 - 7 - 8 - 9 - 4 - 5 - 6 - 2 - 3 Point 10 读入,特判,输出. 读入的英文意思是让选手输出自己的程序本身,这个题的确存 ...