mysql数据检索和过滤

SELECT操作符

# 获取products表中最贵的商品价格
# DESC 表示降序,ASC表示升序(默认值)
SELECT prod_name, prod_price
FROM products
ORDER BY prod_name 
DESC LIMIT 1;

WHERE操作符

#检索价格小于等于10美元的所有产品
SELECT prod_name, prod_price
FROM products
WHERE prod_price <= 10;

#如果将值与字符串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号.
#检索名字为fuces的商品
SELECT prod_name, prod_price
FROM products
WHERE prod_name = 'fuses';

# 检索价格在5美元和10美元之间或日期在指 定的开始日期和结束日期之间的所有产品
SELECT prod_name, prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;

# 空值检测。SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。 这个WHERE子句就是IS NULL子句。
# 返回没有价格(空prod_price字段,不是价格为0)的所有产品
SELECT prod_name, prod_price
FROM products
WHERE prod_price IS NULL;

OR AND IN操作符

# 检索由1002或者1003供应商制造的所有产品的产品名和价格
SELECT prod_name, prod_price
FROM products
WHERE vend_id = 1002 OR vend_id = 1003;


# 选择由供应商1002或1003制造的且价格都在10美元(含)以上的任何产品
SELECT prod_name, prod_price
FROM products
WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;


# 检索供应商1002和1003制造的所有产品(IN取合法值的由逗号分隔的清单,全都括在圆括号中)
SELECT prod_name, prod_price
FROM products
WHERE vend_id IN (1002, 1003)
OEDER BY prod_name;

NOT操作符

WHERE子句中用来否定后跟条件的关键字

# 列出除1002和1003之外的所有供应 商制造的产品
SELECT prod_name, prod_price
FROM products
WHERE vend_id NOT IN (1002, 1003)
OEDER BY prod_name;

LIKE操作符

百分号通配符

匹配给定位置的0个、1个或多个字符

# 找出所有以词jet起头的产品
SELECT prod_name, prod_price
FROM products
WHERE prod_name LIKE 'jet%';

# 匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符
SELECT prod_name, prod_price
FROM products
WHERE prod_name LIKE '%anvil%';

注意:尾空格可能会干扰通配符匹配。例如,在保存词anvil 时 , 如果它后面有一个或多个空格 ,则子句 WHERE prod_name LIKE '%anvil'将不会匹配它们,因为在最后的l后有多余的字符。解决这个问题的一个简单的办法是在搜索模式最后附加一个%。

注意:%不能匹配null值,即WHERE prod_name LIKE '%'不能匹配用值NULL作为产品名的行

下划线通配符

下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

SELECT prod_name, prod_price
FROM products
WHERE prod_name LIKE '_ ton anvil';

可以匹配 prod_name为 1 ton anvil,2 ton anvil的商品, 不能匹配为12 ton anvil的商品。

正则匹配

正则匹配模式没有完全实现REGEXP的语法,他支持下面这几种匹配方式

# 匹配连在一起的4位数字
SELECT prod_name, prod_price
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}';

# \\表示转义字符,mysql要用两个斜杠,一个被用于mysql的解释器,一个用于REGEXP的解释器
SELECT prod_name, prod_price
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;

# TNT (1 stick)
# TNT (2 sticks)

计算字段

计算字段类似mongodb中的虚拟字段,后段把拼装好的字段供前端消费。mysql使用Concat函数拼接字段

# Concat中多个字符串之间用逗号分隔
SELECT Concat(vend_name, '(', vend_country, ')' AS vend_title
FROM vendors
ORDER BY vend_name;
#  结果:Jet Set(USA)

算术计算

SQL支持加减乘除运算

# 输出中显示的 expanded_price 列为一个计算字段, 此计算为 quantity*item_price
SELECT prod_id, item_price, quantity, quantity*item_price AS expanded_price
FROM orderitems
WHERE order_num = 20005;
posted @ 2021-10-07 10:20  wmui  阅读(50)  评论(0编辑  收藏  举报