检索数据的几种方式
SELECT name FROM table_name;
SELECT name , age FROM table_name; // 查询多列
SELECT name AS n , age AS a FROM table_name; // 获取数据时列名转别名
SELECT '常' AS platform ,name FROM table_name; // 增加固定列名固定值
SELECT * FROM table_name; // 查询所有列名
查询语句更多约束条件:
SELECT DISTINCT attack_range FROM heros; // DISTINCT 去重
SELECT DISTINCT attack_range, name FROM heros; // 只有两个条件都一致才会去重
SELECT name, hp_max FROM heros ORDER BY hp_max DESC; // ORDER BY排序, DESC从高到低,降序。ASC 升序。多个条件排序,条件1相同后才开始对比条件2,字符串排序跟DBMS有关。
SELECT name, hp_max FROM heros ORDER BY hp_max ASC LIMIT 2;// LIMIT 约束返回数量
SELECT name, hp_max FROM heros WHERE hp_max < 5500 ORDER BY hp_max ASC LIMIT 2
进阶:
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
关键字顺序:
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
查询语句执行顺序:
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT
提升检索效率的两个常用方法:
- 避免使用SELECT *,更多的通过需要的字段名称来检索数据
- 如果确定返回的条目数量,多使用Limit关键字
查询过滤
SELECT name, 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'ORDER BY (hp_max + mp_max) DESC
- where 在 from 后面。
- select后面的字段用,隔开
- 如果语句中有count (*) ,conunt是聚集函数,只会返回一条结果数据,count(*)在from前。
- order by 在最后
- where + 包含关系,用 IN 关键字
- where 判断时间范围,使用时间函数 date , 结合 between-and 使用(时间格式必须是 yyyy-mm-dd)
- like 通配符
通配符
SELECT name FROM heros WHERE name LIKE '%太%'; // 通配符,%%,只要包含了中间字段的就满足条件
SELECT name FROM heros WHERE name LIKE '_%太%'; // _代表忽略,忽略第一个字段,用后面的字段进行比较,只有后面的字段包含才满足条件
SELECT name FROM heros WHERE name LIKE '___%太%';// 三个下划线 = 忽略前面三个字段
网友评论