检索不同的行
DISTINCT
SELECT DISTINCT vid FROM products
#必须显示在列名前面,应用于所有的列
优先级
AND优先级大于OR
#如果提高优先级用()圈起
SELECT * FROM products WHERE(vid=1002 OR vid=1003) AND price>10
Like
找出以‘s开头e结尾’
SELECT name FROM products WHERE name LIKE ‘s%e’
下划线_的使用
只匹配单个字符而不是多个字符
SELECT * FROM products WHERE name LIKE ‘_ ton anvil’
结果:
1 ton anvil √
2 ton anvil √
.5 ton anvi ×
正则表达式
REGEXP
SELECT * FROM products WHERE name REGEXP ‘此处写表达式’
数据分组group by
- 如果分组列中具有null值,则null将作为一个分组返回。如果列中有多行null值,它们将分为一组。
- group by必须出现在where字句之后,order by子句之前
关键字出现顺序
关键字 | 描述 |
---|---|
select | |
from | |
where | 行级过滤 |
group by | 分组说明 |
having | 组级过滤 |
order by | 输出排序顺序 |
limit | 检索的行数 |
子查询
就是select中嵌套select
一般与 in(select…)、=、!=一起使用
(从内向外处理)
SELECT cid FROM orders WHERE num IN (SELECT num FROM ordertimes WHERE pid=’TNT2’);
组合查询union
使用场景:
- 在单个查询中从不同的表返回类似结构的数据。对单个表执行多个查询,按单个查询返回数据。
- 同时执行多个select查询,并将结果作为单个查询结果集返回。
- 与具有多个where子句条件的单条查询完成工作相同。
- union all全部显示
- order by子句对union整体进行排序
SELECT vid,pid,price FROM products WHERE price<5
UNION
SELECT vid,pid,price FROM products WHERE vid IN (1001,1002);