2.《MySQL必知必会》检索与过滤

注:博客中总结《MySQL必知必会》中的知识点,第4,5,6,7,8,9章的核心内容;

涉及到的操作符: SELECT,FROM,LIMIT,ORDER BY,WHERE,IN,NOT,LIKE,REGEXP;

书中用到的表的介绍及其脚本文件:《Mysql必知必会》中表的介绍

检索数据

1. 检索单个列
SELECT prod_name FROM products;
-- 注:列名不区分大小写;
2. 检索多个列
SELECT prod_id,prod_name,prod_price FROM products;
3. 检索所有列
SELECT * FROM products;
4. 检索不同列
SELECT DISTINCT vend_id FROM products;
-- 注:在使用DISTINCT时,如果想每列都唯一,则应该在每一列前面加上DISTINCT;
5. 限制结果
SELECT prod_name FROM products
LIMIT 5;
-- 注:LIMIT 5,5表示返回从第5行开始后的5行;

排序检索数据

1. 排序数据
SELECT prod_name FROM products
ORDER BY prod_name;
2. 按多个列排序
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price,prod_name;
3. 指定排序方向
-- 默认是ASC(升序); DESC(降序);
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC;
-- 先按产品价格降序,在按产品名升序;
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name;

过滤数据

1. 使用WHERE子句
SELECT prod_name, prod_price
FROM products
WHERE prod_price = 2.50;
SELECT prod_name, prod_price
FROM products
WHERE prod_name = 'fuses';
-- 注:‘fuses’默认是不区分大小写的
2. 不匹配查询
-- 使用 <> 或 !=
SELECT vend_id, prod_name
FROM products
WHERE vend_id <> 1003;
3. 范围值查询
SELECT prod_name, prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;
4. 空值查询
SELECT prod_name
FROM products
WHERE prod_price IS NULL;

数据过滤

1. 组合WHERE子句
1.1 AND操作符
```SQL
SELECT prod_id, prod_price, prod_name
FROM products
WHERE vend_id=1003 AND prod_price<=10;
```
1.2 OR操作符
```SQL
SELECT prod_id, prod_price
FROM products
WHERE vend_id=1002 OR vend_id=1003;
```
1.3 计算次序
```SQL
SELECT prod_name, prod_price
FROM products
WHERE vend_id=1002 OR vend_id=1003 AND prod_price>=10;
```
与下面返回的结果不同,AND操作符优先级高;
```SQL
SELECT prod_name, prod_price
FROM products
WHERE (vend_id=1002 OR vend_id=1003) AND prod_price>=10;
```
2. IN操作符
SELECT prod_name, prod_price
FROM products
WHERE vend_id IN (1002, 1003)
ORDER BY prod_name;
3. NOT操作符
SELECT prod_name, prod_price
FROM products
WHERE vend_id NOT IN (1002, 1003)
ORDER BY prod_name;

用通配符进行过滤

1. LIKE操作符
1.1 百分号(%)通配符
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE 'jet%';
-- % 表示任意字符出现任意次
1.2 下划线(_)通配符
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE '_ ton anvil';
-- % 表示任意单个字符
2. 使用通配符的技巧

通配符搜索的处理一般花费时间较长,要避免过度使用;

用正则表达式进行过滤

正则表达式 - 用REGEXP来匹配文本中特殊的串

1. 基本字符匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;
-- . 正则表达式特殊符号,表示匹配任意一个字符;
2. 进行OR匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;
-- | 正则表达式的OR操作符;
3. 匹配几个字符之一
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
-- [] 定义一直字符,匹配其中一个;[^123]匹配除123之外的任何字符;
4. 匹配范围
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;
-- [0-9],[a-z]表示范围;
5. 匹配特殊字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\.'
ORDER BY prod_name;
-- \\ 转义符, \\r 转页,\\n 换行, \\t 制表符;
6. 匹配字符类
[:alnum:] 任意字母和数字,同[a-zA-Z0-9];
[:alpha:] 任意字符,同[a-zA-Z];
[:blank:] 空格和制表符;
......
7. 匹配多个实例
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9 sticks?]\\)'
ORDER BY prod_name;
重复元素符
 *   0个或多个匹配;
 +   1个或多个匹配;
 ?   0个或1个匹配;
 {n}  制定数目的匹配;
 {n,}  不少于制定数目的匹配;
 {n,m}  匹配数目的范围;
8. 定位符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;
定位元字符
 ^   文本的开始;
 $   文本的结尾;
 [[:<:]]  词的开始;
 [[:<:]]  词的结尾;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值