数据库基本语法
SELECT语句
SELECT 列名 FROM 表明;
单行检索,多行检索SELECT DATABASE();
显示当前使用数据库- 检索不同的行:
SELECT DISTINCT 列名 FROM 表明;
只返回不同的值 - 限制结果:
SELECT 列名 FROM 表明 LIMIT 限制的行数;
- 指定开始行数和行数:
SELECT 列名 FROM 表明 LIMIT 5,5;
LIMIT 5 OFFSET 5;
- 指定开始行数和行数:
- 使用完全限定的表明:
SELECT products.pro_name FROM 表明;
排序检索数据:使用ORDER BY语句
- 排序数据:
SELECT prod_name FROM products ORDER BY prod_name;
- 按多个列排序:
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;
- 注意:在多行排序中,是按照指定的行书顺序进行排序的,如上,先是以价格排序,然后在价格相同的数据中再以姓名排序。如果价格都不相同则就不会以姓名排序。
- 指定排序方向(DESC关键字):
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;
按照价格以降序的方式排序产品 - ASC是默认升序的关键字
- ORDER BY子句位置:要保证ORDER BY位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。
过滤数据:使用WHERE语句
- 数据根据WHERE子句中指定搜索条件进行过滤,WHERE子句在表明(FROM子句)之后给出:
SELECT prod_name,prod_price FROM products WHERE prod_price=2.50;
- WHERE子句操作符:=,<>,!=,<,<=,>,>=,BETWEEN
- BETWEEN匹配范围中所有的值,包括指定开始值和结束值
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
- BETWEEN匹配范围中所有的值,包括指定开始值和结束值
- 空值检查:
- NULL 无值(no value):
SELECT prod_name FROM products WHERE prod_price IS NULL;
- NULL 无值(no value):
- WHERE子句的位置:在同时只用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则就会产生错误
数据过滤
组合WHERE语句
- AND操作符
- OR操作符
- 注意:当使用AND和OR的联合查询时,要考虑到操作符优先级问题,使用圆括号明确的分组相应操作符
- IN操作符:IN在WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当
- NOT操作符:一般情况下与IN,BETWEEN,EXISTS子句配合使用,相当于否定跟在它后面的条件。
SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
通配符进行过滤
- LIKE操作符:模糊查询
- 百分号(%)通配符:搜索模式中给定位置的0个,1个或多个字符
- 注意:‘%’不能匹配用值NULL作为产品名的行,在匹配时是默认不区分大小写的
- 下划线(_)通配符:只匹配单个字符
- 百分号(%)通配符:搜索模式中给定位置的0个,1个或多个字符
- 注意:不要过度的使用通配符,在确定要使用通配符的时候,除非绝对必要,否则不要将它们用在搜索模式的开始处,将通配符置于搜索模式的开始处,搜索的效率是很慢的
使用正则表达式进行搜索
REGEXP :regesxp
进行OR匹配:搜索两个串之一,使用 ‘ | ’
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
匹配几个字符之一:可以指定一组用[ 和 ]括起来的字符来完成。
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name
- 正则表达式[123] Ton。[123]定义一组字符,其含义是匹配1或2或3。可以理解成[1|2|3] Ton
- 字腹肌和也可以被否定,即,它们将匹配除指定字符外的任何东西。否定一个字符集只需哟在集合开始的地方放置一个 ^ 即可。就比如:[^123] 匹配出这些字符外的任何东西
范围匹配:[0-9],[a-z] 匹配任意数字和字符串,定义一个范围
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
匹配特殊字符:要匹配特殊字符,必须使用
\\转义字符
作为前导。\\-
表示查找 -,\\.
表示查找 .SELECT prod_name FROM products WHERE prod_name REGEXP '\\.' ORDER BY prod_name;
匹配字符类
字符类
| 类 | 说明 |
| :———-: | :————————————————-: |
|[:alnum:]
| 任意字母和数字(同[a-zA-Z0-9]
) |
|[:alpha:]
| 任意字母(同[a-zA-Z]
) |
|[:blank:]
| 空格和制表(同[\\t]
) |
|[:cntrl:]
| ASCⅡ控制符(ASCⅡ 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) |范例:
SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name
- 注意:sticks? 会匹配到stick与sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现)。
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;
- [:digit:] 匹配任意数字,所以会查找到一个数字的集合。{4}表示要求它前面的字符(任意数字)出现4次,所以就会查找到存在4个数字字符的集合,如1000,8563,7354。也可以用
[0-9][0-9][0-9][0-9]
来替代上边的查询语句,其效果是一样的。
- [:digit:] 匹配任意数字,所以会查找到一个数字的集合。{4}表示要求它前面的字符(任意数字)出现4次,所以就会查找到存在4个数字字符的集合,如1000,8563,7354。也可以用
####