检索数据
1.检索不重复的行
从 Customers 表中检索所有的 ID
select DISTINCT cust_id
from Customers;
DISTINCT表示去掉重复的行
2.限制结果-分页
SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句。LIMIT 5, 5指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。
排序检索数据
1.常规检索
使用ORDER BY子句对输出进行排序,默认是从小到大(A-Z)(顺序) 使用DESC表示倒序
select cust_name
from Customers
ORDER BY cust_name DESC;
2.按多个列排序且不同列有不同顺序
在需要逆序的列后面加DESC即可
select cust_id,order_num
from Orders
ORDER BY cust_id,order_date DESC;
3. 找最值
使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。
过滤数据
1.WHERE子句
select prod_id,prod_name
from Products
where prod_price=9.49
1.WHERE操作符
示例:
编写 SQL 语句,从 Products 表中检索产品 ID(prod_id)和产品名称(prod_name),只返回价格为 9 美元或更高的产品。
select prod_id,prod_name
from Products
where prod_price>=9
BETWEEN的用法
在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后
select prod_name,prod_price
from Products
where prod_price BETWEEN 3 AND 6
ORDER BY prod_price
2.组合WHERE子句
AND操作符:有多个条件
OR操作符:只满足一个条件
AND与OR组合操作符
示例:
【问题】编写SQL 语句,查找所有订购了数量至少100 个的 BR01、BR02 或BR03 的订单。你需要返回 OrderItems 表的订单号(order_num)、产品 ID(prod_id)和数量(quantity),并按产品 ID 和数量进行过滤
select order_num,prod_id,quantity
from OrderItems
where quantity>=100 && (prod_id= 'BR01' OR prod_id='BR02' OR prod_id='BR03')
IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配
此SELECT语句检索供应商1002和1003制造的所有产品。IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中
NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
上述代码列出除1002和1003之外的所有供应商制造的产品
用通配符进行过滤
%
通配符(wildcard) 用来匹配值的一部分的特殊字符。
最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。为了找出所有以词jet起头的产品,可使用以下SELECT
语句
通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。除了一个或多个字符外,%还能匹配0个字符。%
代表搜索模式中给定位置的0个、1个或多个字符。
注:虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE '%'也不能匹配
用值NULL作为产品名的行。
使用两个LIKE
select prod_name,prod_desc
from Products
where prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%'
_
另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符
用正则表达式进行搜索
基本字符匹配
REGEXP
LIKE只匹配整列值为1000 不会找出内容中有1000的但 REGEXP会
进行OR匹配
匹配几个字符之一
如果你只想匹配特定的字符,可通过指定一组用**[和]**括起来的字符来完成
匹配范围
匹配特殊字符
如果要找出包含.字符的值,怎样搜索