一、 检索数据
DISTINCT 此关键字指示MySQL只返回不同的值。
SELECT DISTINCT vend_id
FROM products;
SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。
为了返回第一行或前几行,可使用LIMIT子句。
SELECT prod_name
FROM products
LIMIT 5;
SELECT prod_name
FROM product
LIMIT 5,5;
LIMIT 5,5指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数位要检索的行数。
为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。
为了进行降序排序,必须指定DESC关键字。
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name;
二、过滤数据
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
SELECT product_name,product
FROM products
WHERE product_price=2.50;
为了检查某个范围的值,可使用BETWEEN操作符。其语法与其他WHERE子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。
SELECT prod_name,prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
SELECT prod_name,prod_price
FROM products
WHERE vend_id IN(1002,1003)
ORDER BY prod_name;
此SELECT语句检索供应商1002和1003制造的所有产品。
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
SELECT prod_name,prod_price
FROM products
WHERE vend_id NOT IN(1002,1003)
ORDER BY prod_name;
最常使用的通配符是百分号%。在搜索串中,%表示任何字符出现任意次数。例如,为了找出所有以词jet起头的产品,可使用以下SELECT语句:
SELECT prod_id,prod_name
FROM products
WHERE prod_name LIKE 'jet%';
下划线 _ 通配符,下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。
三、用正则表达式进行搜索
基本字符匹配:
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
检索列prod_name包含文本1000的所有行。
.点是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符。| 是搜索两个串之一。[]是匹配几个字符之一。[a-z]匹配任意字母字符。
为了匹配特殊字符,必须用\为前导。\-表示查找,\.表示查找.为了匹配反斜杠\字符本身,需要使用\\。多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用字符本身,但MySQL要求两个反斜杠。
匹配连在一起的4位数字:
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;
[:digit:]匹配任意数字,{4}确切地要求它前面的字符出现4次。
定位符
LIKE和REGEXP的不同在于,LIKE匹配整个串而REGEXP匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用与LIKE一样。
四、使用函数
Concat()拼接串,即把多个串连接起来形成一个较长的串。Concat()需要一个或多个指定的串,各个串之间用逗号分隔。别名(alias)是一个字段或值的替换名。
大多数SQL实现支持以下类型的函数。
- 用于处理文本串(如删除或填充值,转换值为大写或小写)的文本函数。
- 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)。
- 用于处理日期和时间值并从这些值中提取特定成分(例如,返回两个日期之差,检查日期有效性)的日期和时间函数。
- 返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数。
SELECT cust_id,order_num
FROM orders
WHERE Date(order_date)='2005-09-01';
仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。
检索2005年9月下的所有订单。
五、汇总数据,分组数据,使用子查询
创建分组
分组是在SELECT语句的GROUP BY子句中建立的。
过滤分组
WHERE和HAVING的区别
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
GROUP BY和ORDER BY的区别
SELECT子句顺序
子查询
六、联结表,组合查询
可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。
SELECT语句的输出用ORDER BY子句排序。在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。
七、创建表和操纵表
指定默认值
CREATE TABLE orderitems
(
order_num int NOT NULL,
quantity int NOT NULL DEFAULT1,
PRIMARY KEY(order_num)
)ENGINE=InnoDB;
引擎类型
- InnoDB是一个可靠的事务处理引擎。
- MEMORY在功能等同于MyISAM,但由于数据存储在内存中,速度很快。
- MyyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。