王秀文的博客

MySQL SELECT 查询

发布
分类
MySQL
篇幅
338 字 / 1 分钟
阅读
422

WHERE 条件过滤

比较运算符

含义 运算符
等于 =
不等于 <>或 !=
小于 <
小于等于(不大于) <= 或 !>
大于 >
大于等于(不小于) >= 或 !<
不小于 !<
在指定的两个数值之间 BETWEEN
为空值 IS NULL

逻辑运算符

含义 运算符
并且 AND
或者 OR
在指定范围内 IN
非(否定) NOT

通配符

含义 运算符
匹配任意字符串出现任意次数 %
匹配单个字符 -

eg1:

SELECT name FROM heros WHERE name LIKE '%太%'; -- (%)代表零个或多个字符
SELECT name FROM heros WHERE name LIKE '_%太%'; -- (_)只代表一个字符。

查询

SELECT '王者荣耀' as platform, `name` as n, hp_max, mp_max, attack_max, defense_max FROM heros ORDER BY hp_max DESC LIMIT 5;
SELECT DISTINCT role_assist FROM heros;

SELECT的顺序

书写顺序:

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

执行顺序(在MySQL和Oracle中,SELECT执行顺序基本相同):

1、FROM子句组装数据(包括通过ON进行连接)
2、WHERE子句进行条件筛选
3、GROUP BY分组
4、使用聚集函数进行计算;
5、HAVING筛选分组;
6、计算所有的表达式;
7、SELECT 的字段;
8、ORDER BY排序
9、LIMIT筛选

FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

SELECT DISTINCT player_id, player_name, count(*) as num # 5
FROM player JOIN team ON player.team_id = team.team_id # 1
WHERE height > 1.80 # 2
GROUP BY player.team_id # 3
HAVING num > 2 # 4
ORDER BY num DESC # 6
LIMIT 2 # 7

eg1:

SELECT DISTINCT role_assist FROM heros;

eg2:

SELECT '王者荣耀' as platform, `name` as n, role_main, role_assist, hp_max, mp_max, birthdate
FROM heros 
WHERE (role_main IN ('法师', '射手') OR role_assist IN ('法师', '射手')) 
AND DATE(birthdate) NOT BETWEEN '2016-01-01' AND '2017-01-01' -- 将字段birthdate转化为日期类型再进行比较
ORDER BY (hp_max + mp_max) DESC LIMIT 5;