MySQL条件查询语句常用操作全面汇总
顾名思义, 条件查询就是使用where字句 , 将满足条件的数据筛选出来
语法 :
select < 结果 > from < 表名 > where < 条件 >
这里我们以t_user表为例
-- 查询性别为男的信息 SELECT * FROM t_user WHERE sex='男' -- 查询性别不为男的信息 SELECT * FROM t_user WHERE NOT sex='男' -- 查询性别为男并且年龄为20的信息 SELECT * FROM t_user WHERE sex='男' AND age=20 -- 查询性别为男或者年龄为20的信息 SELECT * FROM t_user WHERE sex='男' OR age=20
模糊查询
LIKE
是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值或数值型.
通配符: % 任意多个字符,包含 0 个字符 _ 任意单个字符
我们知道, 在实际查询中, 往往我们只需要大致的信息, 就能查到我们需要的结果(例如淘宝搜索商品等) , 而这就需要到了模糊查询 ,例 :
-- _下划线一次匹配一个字符 -- %一次可以匹配0个或者多个字符 SELECT * FROM t_user WHERE NAME LIKE '_李_' SELECT * FROM t_user WHERE NAME LIKE 'b__' SELECT * FROM t_user WHERE NAME LIKE 'b%'
上述第三条sql查询结果如下 :
between and 两者之间 , 包含临界值;
in 判断某字段的值是否属于 in 列表中的某一项
IS NULL (为空的)或 IS NOT NULL (不为空的)
-- 查询体重在100和130之间的信息,包括100和130 SELECT * FROM t_user WHERE weight BETWEEN 100 AND 130 -- 查询体重是100或者110的信息 SELECT * FROM t_user WHERE weight IN(100,110) -- 查询生日为null或者不为null的信息 SELECT * FROM t_user WHERE birthday IS NULL SELECT * FROM t_user WHERE birthday IS NOT NULL
这里需要注意, 我们如果要用null 来作为where的查询条件时 ,是不能写成下面这样
-- SELECT * FROM t_user WHERE birthday=NULL
这样是查询不到结果的, 这里我们需要使用 is null
union
使用 union 或者 union all 会把两条sql语句的查询结果合并
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all , mysql 会把所有的记录返回,且效率高于union 。
SELECT * FROM t_user WHERE age=20 UNION SELECT * FROM t_user WHERE sex='男'
查询结果 :
SELECT * FROM t_user WHERE age=20 UNION ALL SELECT * FROM t_user WHERE sex='男'
查询结果 :
排序
查询结果排序 , 使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
asc 代表的是升序, desc 代表的是降序,如果不写,默认是升序
order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
-- 按体重升序排列 SELECT * FROM t_user ORDER BY weight ASC -- 按体重降序排列 SELECT * FROM t_user ORDER BY weight DESC -- 如果体重相等,就按照学号来排,升序 SELECT * FROM t_user ORDER BY weight ASC, number ASC
数量限制
limit 子句:对查询的显示结果限制数目 (sql 语句最末尾位置 )
在实际查询中, 数据库内会存放大量的数据, 所以我们会对查询的数量进行控制,这时就需要limit
-- 从第一条数据开始查询2条数据(不包括第一条数据) SELECT * FROM t_user LIMIT 1,2
limit 后第一位数字是指: 开始查询的位置
第二位数字是指: 查询的数据条数
分组
group by 子句 : 对查询的信息分组
having 子句 : 对分组后的结果集再进行筛选
-- 通过sex分组 -- 这里select后跟的必须是group by后的字段或者分组函数 SELECT sex,AVG(weight) FROM t_user GROUP BY sex SELECT sex,AVG(weight) FROM t_user GROUP BY sex HAVING sex='女'
这里需要注意的是:
查询列表比较特殊,要求是分组函数和group by后出现的字段
分组前筛选 原始表 group by 子句的前面 where
分组后筛选 分组后的结果集 group by 的后面 having
where 是分组前筛选, having是分组后筛选
综合
在实际的开发过程中,这些字句都是连在一起使用的,并且有着一定的位置, 位置不对就会报错,例:
SELECT sex,AVG (weight) w FROM t_user WHERE sex = '男' GROUP BY sex HAVING sex = '男' ORDER BY w ASC LIMIT 0, 1
子句的顺序是有一定要求的
查询结果 :