MySQL基础回顾(6-11)
六、过滤数据
1、使用 WHERE 子句:SELECT p_price,p_name FROM products WHERE p_price=2.50;
ORDER BY 位于 WHERE 之后,否则将会产生错误。
2、WHERE 子句操作符:
说明:= 等于;<> 不等于;!= 不等于;< 小于;<= 小于等于;> 大于
;>= 大于等于;BETWEEN 在指定的两个值之间。
3、范围值检查:SELECT p_price,p_name FROM products WHERE p_price BETWEEN 4 AND 6;
4、空值检查:SELECT p_price,p_name FROM products WHERE p_price IS NULL;
七、数据过滤
1、组合 WHERE 子句:以 AND 子句的方式或 OR 子句的方式使用。
2、操作符(operator):用来联结或改变 WHERE 子句中的子句的关键
字。也称为逻辑操作符(logical operator)。
3、AND操作符:SELECT p_id,p_name,p_price FROM products WHERE p_id = 520 AND p_price <= 100;
4、OR 操作符:SELECT p_id,p_name,p_price FROM products WHERE p_id = 520 OR p_price <=1314;
5、计算次序:SELECT p_id,p_name,p_price FROM products WHERE p_id = 520 OR p_id = 1314 AND p_price <=666;
SQL(像多数语言一样)在处理 OR 操作符前,优先处理 AND 操作符。
6、IN 操作符:SELECT p_id,p_name,p_price FROM products WHERE p_id IN (520,1314) ORDER BY p_id;
7、NOT 操作符:SELECT p_id,p_name,p_price FROM products WHERE p_id NOT IN (520,1314) ORDER BY p_id;
八、用通配符进行过滤
1、LIKE 操作符
- 百分号( % )通配符: % 表示任何字符出现任意次数。
SELECT p_name FROM products WHERE p_name LIKE 'jet%';
注意尾空格 尾空格可能会干扰通配符匹配。
- 下划线( _ )通配符:下划线的用途与 % 一样,但下划线只匹配单个字符而不是多个字符。
2、使用通配符的技巧:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。要记住以下技巧。
- 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。
九、用正则表达式进行搜索
1、MySQL仅支持多数正则表达式实现的一个很小的子集。
2、基本字符匹配:SELECT p_name FROM products WHERE p_name REGEXP '1000' ORDER BY p_name;
REGEXP 后所跟的东西作为正则表达式(与文字正文 1000 匹配的一个正则表达式)处理。
3、正则表达式 . :. 是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符。SELECT p_name FROM products WHERE p_name REGEXP '.000' ;
匹配不区分大小写 MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用 BINARY 关键字,如
WHERE prod_name REGEXPBINARY 'JetPack .000';
。
4、进行OR匹配:| 为正则表达式的 OR 操作符。SELECT p_name FROM products WHERE p_name REGEXP 'MAO|LI';
5、匹配几个字符之一:SELECT p_name FROM products WHERE p_name REGEXP '[123] mao';
- [123] 定义一组字符,它的意思是匹配 1 或 2 或 3 ,因此, 1 mao 和 2 mao 都匹配且返回(数据表 3 mao )。
- 正则表达式 [123]Ton为 [1|2|3]Ton 的缩写,也可以使用后者。
6、匹配范围 : [1-5] 定义了一个范围,这个表达式意思是匹配 1 到 5 。
7、匹配特殊字符:了匹配特殊字符,必须用 \ 为前导。 \- 表示查找 - , \. 表示查找 . 。SELECT p_name FROM products WHERE p_name REGEXP '\\.';
\也用来引用元字符(具有特殊含义的字符)
\f 换页
\n 换行
\r 回车
\t 制表
\v 纵向制表
8、匹配字符类:为更方便工作,可以使用预定义的字符集,称为字符类(character class)。
[: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])
9、匹配多个实例:SELECT p_name FROM products WHERE p_name REGEXP '\\([1-9] mao?\\) ORDER BY p_name;'
- \( 匹配 ),[0-9] 匹配任意数字(这个例子中为1和9), mao? 匹配 mao和maos ( s 后的 ? 使 s 可选,因为 ? 匹配它前面的任何字符的0次或1次出现), \) 匹配 ) 。没有 ? ,匹配 stick 和 sticks 会非常困难。
- 正则表达式重复元字符来完成:
* 0个或多个匹配 ;+ 1个或多个匹配(等于{1,});
? 0个或1个匹配(等于{0,1});
{n} 指定数目的匹配;
{n,} 不少于指定数目的匹配;
{n,m} 匹配数目的范围(m不超过255)。
10、定位符:
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
十、创建计算字段
1、拼接字段:SELECT CONCAT(p_name,p_country) FROM products ORDER BY p_name;
输出:毛(中国)
MySQL的不同之处 多数DBMS使用 + 或 || 来实现拼接,MySQL则使用 Concat() 函数来实现。当把SQL语句转换成MySQL语句时一定要把这个区别铭记在心。
2、RTrim() 函数:删除数据右侧多余的空格来整理数据。
SELECT CONCAT(RTRIM(p_name),'(',RTRIM(p_country),')') FROM products;
Trim 函数 MySQL除了支持 RTrim() (正如刚才所见,它去掉串右边的空格),还支持 LTrim() (去掉串左边的空格)以及Trim() (去掉串左右两边的空格)。
3、使用别名:别名用 AS 关键字赋予。SELECTCONCAT(RTRIM(p_name),'(',RTRIM(p_country),')') AS p_title FROM products;
导出列 别名有时也称为导出列(derived column),不管称为什么,它们所代表的都是相同的东西。
4、执行算术计算:SELECT p_price*p_number AS e_price FROM products WHERE p_num=520;
MySQL算术操作符:
+ 加
- 减
* 乘
/ 除
十一、使用数据处理函数
1、函数:函数一般是在数据上执行的,它给数据的转换和处理提供了方便。
2、文本处理函数:SELECT v_name,UPPER(p_name) AS c_name FROM products WHERE p_id=520 ORDER BY v_name;
常用的文本处理函数:
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
3、日期和时间处理函数:
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
无论你什么时候指定一个日期,不管是插入或更新表值还是用 WHERE 子句进行过滤,日期必须为格式yyyy-mm-dd。2005年9月1日,给出为2005-09-01。
应该总是使用4位数字的年份 支持2位数字的年份,MySQL处理00-69为2000-2069,处理70-99为1970-1999。虽然它们可能是打算要的年份,但使用完整的4位数字年份更可靠,因为MySQL不必做出任何假定。
SELECT p_id,p_num FROM products WHERE Date(p_date)='2013-05-20';
Date(order_date) 指示MySQL仅提取列的日期部分。
4、数值处理函数:
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切