# 后面可以跟多个条件检索# 1. OR AND NOT# 2. = != > < >= >=SELECT*FROM cnip WHERE name ='lucy'OR age =20;SELECT*FROM phone WHERENOT age >=9;
2. 模糊查询
# 不能匹配null值# % 代表0-n个字符, 英文匹配时候不区分大小写; -只匹配一个字符;# 匹配时: 字符的一定要用‘’, 数值类型,可用可不用''SELECT*FROM cnip WHERE content LIKE'%zte%';SELECT*FROM cnip WHERE content LIKE'z%e';SELECT*FROM cnip WHERE content LIKE'_te';SELECT*FROM cnip WHERE content LIKE'__te';SELECT*FROM phone WHERE name like'%\_%';// 转义符号 \SELECT*FROM phone WHERE name like'%^_%'ESCAPE'^';// 自定义转义符号为 ^
3. 范围查询
# between and not between and SELECT*FROM phone WHERE age BETWEEN20and100;// 包含临界值 有前后顺序SELECT*FROM phone WHERE age NOTBETWEEN32AND100;# in : 命中一个即可SELECT*FROM phone WHERE name in('tony','jack','lucy');
4. null值比较
// IS NULL IS NOT NULLSELECT*FROM phone WHERE name ISNULL;SELECT*FROM phone WHERE name ISNOTNULL;// <=>: mysql提供的特殊的,用于对null值比比较的SELECT*FROM phone WHERE name <=>NULL;SELECT*FROM phone WHERENOT name <=>NULL;
5. 排序查询
# 默认升序,即ASC ,DESC为降序排列# 多个字段排序: 先按第一个字段排序,第一个字段相同再按第二个排序# order by 后也支持别名SELECT*FROM president ORDERBY first_name DESC, last_name DESC;# 区分null值的排序: 先按照null和非null排序,再按照字段排序# IF(ccondtion,0,1): true则为0,false 则为1, 三元表达式SELECT*FROM president ORDERBYIF(address ISNULL,0,1)DESC, address DESC;
// 1. GROUP BY 将表中数据分为若干组SELECTCOUNT(brand)as brand_num FROM phone GROUPBY brand;// 2. 查询列表字段必须是分组函数 或者 group by后面的字段SELECTMAX(price)as brand_max_price , brand FROM phone GROUPBY brand;// 3. COUNT()时候,最后一行可以通过这种方式来进行汇总SELECTcount(*)FROM phone GROUPBY brand WITH ROLLUP;
2.2 分组后筛选
// group by后的结果集再筛选, 一般跟在 group by字段之后// 其实就是分组后筛选, 放在group by之后SELECTMAX(price)AS max_price , brand FROM phone GROUPBY brand
HAVING max_price >2000;// 分组前筛选: where, 放在group by 之前SELECTMAX(price)as brand_max_price , brand FROM phone WHERE id <10GROUPBY brand;// 能用分组前筛选的,优先用分组前where
2.3 多条件分组
// 按照多个条件分组,只有后面所有的条件都相同时候,才会归为一组SELECTCOUNT(*)AS nums, country,brand FROM phone GROUPBY country, brand
HAVING nums>1;
# 1. where 后面的: 标量子查询 后面可以跟多个子查询SELECT*FROM phone
where price >(SELECT price FROM phone where brand ='Oppo');# 2. where 后面的: 列子查询. 一般可以通过其他方式替代SELECT*FROM phone
WHERE brand in(SELECT brand FROM phone where country ='us');# 3. where 后面的: 行子查询# 4. 表子查询SELECT a.name FROM(SELECT*FROM phone) a;# 5. EXISTS: 表中存在数据结果为1, 不存在为0SELECTEXISTS(SELECT*FROM phone WHERE id >10);
一、单表查询# 1. 基本检索SELECT * FROM cnip;SELECT name,age FROM cnip;SELECT VERSION(), (2+2) AS sumnum, 'hello worold'; //不涉及表的查询# 2. 条件检索,后面可以跟多个条件检索SELECT * FROM cnip WHERE name = 'lucy' OR age = 20;# 3. NULL值 null值比较,不能用 = != > < 来进行判断SELECT