最好的教材当然是官方文档: https://dev.MySQL.com/doc/refman/5.7/en/ 作为一个至今依然被选修英文的英文盲觉得文档写得还是很通俗易懂,只要你够耐心。 参考:《MySQL必知必会》
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 n 返回前n行 limit m,n 返回从行m开始的n行数据 limit n offset m 返回从行m开始的n行数据
如果想在多个列上均进行降序排列,对每列都需要指定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降序排列=, <>/!=, <, <=, >, >=, between……and……,IS NULL
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';tips 复杂性随着嵌套程度的深入而增加,因此: 首先,建立和测试內层查询 然后,用硬编码数据建立和测试外层查询 接着,确认正确后嵌入子查询中仔测试这个嵌套子查询正确性 最后,每增加一个子查询都重复上述步骤直到构建完毕。
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 如果其他操作符能够达到相同的目的,应该使用其他操作符不要将其置于搜索模式的开始处,会降低搜索速度子句 | 说明 | 是否必须使用 |
---|---|---|
select | 返回的列或者表达式 | Yes |
from | 检索的表 | 仅从表选择数据时使用 |
where | 行级过滤 | No |
group by | 分组 | No |
having | 组级过滤 | No |
order by | 排序顺序 | No |
Limit | 限制检索的行数 | No |
新闻热点
疑难解答