LIKE操作符
%通配符
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE 'jet%';
//%告诉sql接受任意字符 不管多少都接受包括0个
//搜索是可以区分大小写的 %不能匹配NULL
//通配符任意位置使用任意多次
下划线_通配符 和%完全一样 不过只能匹配单个字符
不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据
regexp REGEXP 后面接正则表达式
select pro_name
from products
where prod_name regexp '1000'
order by prod_name;
LIKE //匹配整个串
REGEXP //匹配子串
REGEXP BINARY 区分大小写
1|2|3 //or运算符
[123] //也是or运算符
[^123] //匹配这些字符集之外的其他东西 [a-z]
\\. \\后面加特殊字符 可以查找特殊字符 转义
定位符 ^ 文本开始
$ 文本结尾
[[:<:]] 词的开始 [[:>:]] 词的结尾
字段
计算字段 用来在数据库中直接格式化数据
拼接字段 MySQL用Concat()函数 其他DBMS用 + 或 ||来实现拼接
SELECT Concat(vend_name, ' (' , vend_country , ') ')
FROM vendors
ORDER BY vend_name;
Trim() RTrim() Ltrin() //去掉串左右的空格 只去掉右边 只去掉左边
给新的串 加上别名 用关键字AS
SELECT Concat(vend_name, ' (' , vend_country , ') ') AS vend_title
FROM vendors
ORDER BY vend_name;
还可以执行算术运算
SELECT prod_id,quantity,item_price,quantity*item_price AS expanded_price
FROM orderitems WHERE order_num=20005
expanded_price 作为一个新的字段 可以像使用其他列一样使用
SELECT NOW(); 返回当前时间
函数
大多数sql语句都是可以移植的 函数的可移植性不强
大多数SQL实现支持以下类型的函数。
用于处理文本串(如删除或填充值,转换值为大写或小写)的文
本函数。
用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)
的数值函数。
用于处理日期和时间值并从这些值中提取特定成分(例如,返回
两个日期之差,检查日期有效性等)的日期和时间函数。
返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本
细节)的系统函数。
1.文本处理函数:
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值 // SOUNDEX 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法
SubString() 返回子串的字符
Upper() 将串转换为大写
Soundex() 用法
SELECT cust_name, cust_contact
FROM customers
WHERE Soundex(cust_contact) = Soundex('abs');// 发音相似就可以匹配
常用日期和时间处理函数
函 数 说 明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
SELECT cust_id ,order_num
FROM orders
WHERE Date(order_date) = '2005-09-01';//只返回日期
如果想要检查出来2005年9月的所有数据 可以用BETWEEN
SELECT cust_id, order_num
FROM orders
WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
第二种方法
SELECT cust_id, order_num
FROM orders
WHERE Year(order_date) = 2005 AND Month(order_date) = 9;
常用数值处理函数
函 数 说 明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
聚集函数 //实际需要返回的是汇总信息
😂确定表中行数(或者满足某个条件或包含某个特定值的行数)。
😂 获得表中行组的和。
😂找出表列(或所有行或某些特定的行)的最大值、最小值和平均
值。
SQL聚集函数
函 数 说 明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
AVG() 可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
SELECT AVG(prod_price) AS avg_price
FROM products;
SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id=1003; //返回特定列的平均值