MySQL备忘之查询篇
来源:互联网 发布:vr开发用什么编程语言 编辑:程序博客网 时间:2024/04/27 21:12
最好的教材当然是官方文档:
https://dev.mysql.com/doc/refman/5.7/en/
作为一个至今依然被选修英文的英文盲觉得文档写得还是很通俗易懂,只要你够耐心。
参考:《MySQL必知必会》
distinct
DISTINCT关键字应用于所有列而不仅仅是它的前置列。
SELECT DISTINCT vend_id,prod_price from product.products# 返回vend_id,prod_price组合不同的值SELECT DISTINCT vend_id,DISTINCT prod_price from product.products# 错误的语法,也是不符合逻辑的,比如对于(‘aa’,1),(‘aa’,2),'('bb',1),(‘bb’,2)倘若该句得以执行的话,那么('aa',1),('bb',2)或(‘aa’,2),(‘bb’,1),那就具有二义性了
limit
限定返回的结果的数目
limit n 返回前n行
limit m,n 返回从行m开始的n行数据
limit n offset m 返回从行m开始的n行数据
desc
如果想在多个列上均进行降序排列,对每列都需要指定DESC。
SELECT * FROM products ORDER BY prod_price DESC,prod_name# 返回结果按照按prod_price降序排列,prod_price相同时按prod_name升序(默认是ASC)排列SELECT * FROM products ORDER BY prod_price DESC,prod_name DESC# 返回结果按照按prod_price降序排列,prod_price相同时按prod_name降序排列
where
where子句操作符
=, <>/!=, <, <=, >, >=, between……and……,IS NULL
组合where子句
AND, OR, IN, NOT
select * from products where vend_id != 1003;# select * from products where vend_id != '1003'; # 单引号用来限定字符串。如果将值与串类型的列进行比较,则需要限定引号。select * from products where vend_id != 1003 and prod_name='fuse';
in嵌套子查询
select cust_name,cust_contact from customers where cust_id IN (select cust_id from orders where order_num IN (select order_num from orderitems where prod_id ='TNT2'));
tips
复杂性随着嵌套程度的深入而增加,因此:
首先,建立和测试內层查询
然后,用硬编码数据建立和测试外层查询
接着,确认正确后嵌入子查询中仔测试这个嵌套子查询正确性
最后,每增加一个子查询都重复上述步骤直到构建完毕。
NULL
- null查询是 IS NULL,而不是=NULL或=’NULL’
- 因为NULL具有特殊含义,数据库不知道它们是否匹配(比如,where,通配符”%”),所以在匹配过滤或不匹配过滤时不返回它们。
因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行。 - 如果分组(group by)列中具有NULL值,则将NULL值作为一个分组返回。如果表中具有多行NULL值,将它们分为一组。
like vs. regexp
products表
- like匹配整个列,regexp在列值内匹配
select * from products where prod_name like '1000';#没有返回结果select * from products where prod_name REGEXP '1000';#返回结果见下图
- regexp可以匹配列值,使用^和$定位符即可
select * from products where prod_name REGEXP '1000$';select * from products where prod_name LIKE '%1000';#返回结果同样select * from products where prod_name REGEXP '^1000';select * from products where prod_name LIKE '1000%';#返回结果同样
- 不要过度使用like或者regexp
- 如果其他操作符能够达到相同的目的,应该使用其他操作符
- 不要将其置于搜索模式的开始处,会降低搜索速度
union 组合查询
规则
- union中每个查询必须包含相同的列,表达式或聚集函数,各个列不需要以相同的顺序出现
- 列数据类型必须兼容,类型不必完全相同,但必须是DBMS能够隐含地转换的类型
select子句的顺序
0 0
- MySQL备忘之查询篇
- mysql查询in排序(备忘)
- 总结mysql查询综合练习--个人备忘
- mysql中子查询limit用法备忘
- MySQL备忘之数据更新篇(INSERT, UPDATE, DELETE)
- mysql优化之explain备忘笔记
- MySQL备忘之表联结(JOIN)
- 总结mysql查询综合练习1--个人备忘
- mysql备忘
- Mysql 备忘
- mysql备忘
- MYSQL 备忘
- mysql备忘
- mysql备忘
- mysql备忘
- mysql备忘
- mysql备忘
- mysql备忘
- 涂色I练习题
- 设计模式之责任链
- 关于IIC总线
- Android活动生命周期
- 简单的编程试水c++ 2-27
- MySQL备忘之查询篇
- Windows 7 如何锁定键盘
- 统计学习方法——感知机模型
- 垃圾收集器与内存分配策略
- 使用ABAP指针来计算账龄
- python3 爬虫学习——2
- Codeforces Round #302 (Div. 2) D
- 经典视觉跟踪算法TLD的剖析与展示
- 基于hadoop2.7.3搭建多机环境(YARN+HA)