1、 通配符
SELECT
FROM products;
2、 DISTINCT 筛选非重复项目
SELECT DISTINCT pro_id
FROM products;
3、 LIMIT 限制返回行数
SELECT pro_id
FROM products
LIMIT 5;
SELECT pro_id
FROM products
LIMIT 3,5;
//返回第4行起的5行
// 行0 检索出来的第一行为行0 而非行1
//另一种写法
SELECT pro_id
FROM products
LIMIT 5 OFFSET 3;
4、ORDER BY
SELECT pro_name
FROM products
ORDER BY pro_name;
//对单个结果排序
SELECT pro_name,pro_id,pro_price
FROM products
ORDER BY pro_price,pro_name;
//筛选多列,并按照先规则1,再规则2排序
DESC/ASC
SELECT pro_id,pro_price
FROM products
ORDER BY pro_id DESC,pro_price;
//倒序和正序
SELECT pro_price
FROM products
ORDER BY pro_price DESC
LIMIT 1;
//综合使用,找到谷值和峰值
//LIMIT ORDER 需要位于FROM后
5、WHERE
SELECT pro_name,pro_price
FROM products
WHERE pro_price = 2.5;
//ORDER BY 需放在WHERE 之后
//= 等于 、<> 不等于、!=不等于、< 小于、<= 小于等于、BETWEEN 介于(包含起终值)
WHERE pro_name= ‘kitty’;
// 不区分大小写 kitty和Kitty
// ‘’单引号用来限定字符串
WHERE pro_price BETWEEN 5 AND 10;
//意思为[5,10] 之间
WHERE pro_price IS NULL;
//空值
//在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤 或不匹配过滤时不返回它们。
6、WHERE 操作符
AND:
SELECT pro_id,pro_price,pro_name
FROM products
WHERE ven_id = 1003 AND pro_price<10;
//且的筛选条件,支持添加多个AND
OR
SELECT pro_id,pro_price,pro_name
FROM products
WHERE ven_id = 1002 OR ven_id = 1003;
//或的筛选条件,满足任一条件即返回
()括号的使用
//OR与AN优先处理AND操作符
WHERE ven_id = 1002 OR ven_id = 1003 AND pro_price<10;
//返回供应商=1002 的全量与供应商=1003且价格<10 的并集
WHERE (ven_id =1002 OR ven_id = 1003) AND pro_price<10;
//返回供应商=1002且价格<10与供应商=1003且价格<10 的并集
IN
WHERE ven_id IN (1002,1003)
//都好分隔,结果与OR一致
//执行比 OR快
NOT
WHERE ven_id NOT IN(1002,1003)
//否定,支持对IN、BETWEEN、EXISTS取反
7、通配符过滤
LIKE
% 任意字符出现的任意次数
SELECT pro_id,pro_name
FROM products
WHERE pro_name LIKE ‘jet%’;
//jet之后的任意字符;如果区分大小写,jet 和Jetpack 就无法匹配
// 可在任意位置使用’%jet%’
//如果词后有空格,’%jet’无法匹配,可以使用’%jet%’
//无法匹配到NULL
单一字符匹配
WHERE pro_name LIKE ‘_jet’
WHERE pro_name LIKE ‘%jet’
//‘ jet’匹配不到.5jet,’%jet’可以
//不要过度使用,搜索时长长
//不要置于搜索开始处
8、正则表达式
//匹配文本
REGEXP
SELET pro_name
FROM products
WHERE pro_name REGEXP ‘1000’
ORDER BY pro_name;
//这里等同于LIKE
WHERE pro_name REGEXP ‘.000’
// . 表示匹配任意一个字符,可以返回2000、1000
//LIKE匹配整个列。如果被匹配的文本在列值 中出现,LIKE将不会找到它,相应的行也不被返回(除非使用 通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在 列值中出现,REGEXP将会找到它,相应的行将被返回。这是一 个非常重要的差别。
//BINARY区分大小写
OR
WHERE pro_name REGEXP ‘100|200|300’
//匹配特定字符
WHERE pro_name REGEXP ‘[123]Ton’
返回:
1 ton anvil
2 ton anvil
//为[1|2|3]ton的缩写
//注意 REGEXP ‘1|2|3 ton’ 匹配的是1或2或3ton,必须放在把字符 | 括在一个集合中,否则将应用于整个串
//否定字符合集 [^123]
匹配范围
[0-9]等同于[0123456789]
[a-z]
WHERE pro_name REGEXP ‘[1-5] ton’
返回:
.5 ton
1 ton
2 ton
//满足匹配 5 ton ,所以返回. 5 ton
特殊字符匹配\
WHERE pro_name REGEXP ‘\. ‘
//匹配反斜杠为“///”
匹配字符类
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
匹配多个实例
* 0个或多个匹配
+ 1个或多个匹配(等于{1,})
? 0个或1个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
WHERE pro_name REGEXP ‘\([0-9] sticks?\)’
// “\(“ 用来匹配(,[0-9]匹配数0到9的数字,sticks?用来匹配stick或sticks,?号前的任何字符可以0次或1次出现。
WHERE pro_name REGEXP ‘[[:digit]]{4}’
//[:digit:]用来匹配任意数字,{4}要求前面字符的出现次数
——————————————-Page 59—————————————————-
—————————————-page 63——————-
9、Concat
//多数DBMS使用+或者||实现拼接,Mysql使用Concat实现拼接,各个串之间使用逗号分隔
SELECT Concat(ven_id,’(‘,ven_country,’)’)
FROM vendors
ORDER BY ven_name;
//去掉左右空格,使用RTrim或者LTrim、Trim
10、AS
赋予列名字,新增字段名
SELECT Concat(ven_id,’(‘,ven_country,’)’) AS ven_title
11、算术计算
// + - * /
SELECT pro_id,quantity,quantity*item_price AS expanded_price
FROM orderitems
WHERE order_num=2005;
12、函数
Upper 、Lower//使其大、小写
Length//长度
Locate//串的子串
Left、Right//返回左边右边字符串
Soundex//发音相似
WHERE Soundex(cust_contact) = Soundex(‘Y Lie’)
返回:
Y Lee
13、日期和时间
AddDate()//增加日期 Addtime//增加时间 CurDate//返回当前日期 CurTime//返回当前时间
Date()//日期时间的日期部分 DateDiff()//计算两个日期之差 Date_Add()//日期运算函数
Date_Format()//格式化的日期或时间串
//日期格式必须为yyyy-mm-dd
检索日期
WHERE Date(order_date)=’2005-09-01’;//因为如果数据中带有时分秒,直接检索date=’2005-09-01’匹配失败
检索区间
WHERE Date(order_date) BETWEEN ‘2005-09-01’ AND ‘2005-09-30’;
检索月份
WHERE Year(order_date) =2005 AND Month(order_date)=9;
14、数值处理函数
Abs绝对值、Exp 指数值 Mod 余数 其他三角函数
15、聚集函数
AVG() 忽略NULL
COUNT()计算行数 COUNT(*)计算包括空值和非空值 COUNT(column)计算具体值,忽略NULL
MAX() 如果用于文本数据,返回最后一行,忽略NULL
MIN() 如果用于文本,返回最开始的行,忽略NULL
SUM() 忽略NULL
DISTINCT 只包含不同的值
SELECT AVG(DISTINCT pro_price) AS avg_price
FROM products
WHERE ven_id =1003;
//统计商品价格不同的产品的均值
// DISTINCT 必须使用列名,不允许使用COUNT(DISTINCT)
SELECT COUNT(*) AS num_items,
MIN(pro_price) AS price_min,
MAX(pro_price)AS price_max,
AVG(pro_price)AS price_avg
FROM products;
