MySQL学习笔记(二)

在MySQL学习笔记(二)中讲了MySQL的基础知识,现在说说MySQL的核心的部分,查询:SELECT语句。

1. 查询所有字段: SELECT * FROM <表名>;

2. 查询指定字段: SELECT <line1,line2,...> FROM <表名>;

3. 指定记录查询: SELECT <line1,line2,...> FROM <表名> WHERE <查询条件>;

WHERE条件判断符有以下这些:

=,<>、!=,<,<=,>,=>,BETWEEN

4. 带IN关键词的查询,就是在查询条件中使用IN关键词。

例如:SELECT line1,line2 FROM tab1 WHERE line1 IN(100,200);

当然,也可以在IN前面加上NOT进行相反的条件查询。

5. 带BETWEEN AND的范围查询,就是在查询条件中使用BETWEEN AND关键词。

例如:SELECT line1,line2 FROM tab1 WHERE line1 BETWEEN 100 AND 200;

相似的,也可以在BETWEEN前面加上NOT进行相反的条件查询。

6. 带LIKE的字符匹配查询:(1)匹配任意长度的字符使用‘%’,当然也包括零字符。

例如,需要查找在tab1中所有以‘a’开头的line1,SQL语句如下:

SELECT line1 FROM tab1 WHERE line1 LIKE ‘a%’;

需要查找在tab1中所有包含‘b’的line1记录,SQL语句如下:

SELECT line1 FROM tab1 WHERE line1 LIKE ‘%b%’;

(2)匹配一个长度的任意字符,使用下划线‘_’,例如:

SELECT line1 FROM tab1 WHERE line1 LIKE ‘_c%’;

7. 空值查询(IS NULL 或者 IS NOT NULL):SELECT line1 FROM tab1 WHERE line1 IS NULL;

8. 多条件查询。

(1)AND关键词:SELECT <line1,line2,...> FROM <表名> WHERE <查询条件1> AND <查询条件2> [AND ...];

(2)OR关键词:SELECT <line1,line2,...> FROM <表名> WHERE <查询条件1> OR <查询条件2> [AND ...];

这两个关键词是可以一起使用的,但是AND的优先级要比OR高,使用时要确保逻辑正确。

9. 去重条件查询:SELECT DISTINCT <字段名> FROM <表名>;

10. 对查询结果排序:使用ORDER BY子句。例如:

(1)对line1进行排序:SELECT line1 FROM tab1 ORDER BY line1;

(2)先按line1排序,再按line2排序:SELECT * FROM tab1 ORDER BY line1,line2;

   另外,也可以指定排序,如ASC(升序,默认排序方式),(DESC)降序。

   例如需对line1降序,对line2升序:SELECT * FROM tab1 ORDER BY line1 DESC, line2;

11. 分组查询。使用GROUP BY关键词,语法为:[GROUP BY 字段] [HAVING <条件表达式>]

(1) 与集合函数一起使用时,如MAX( )、MIN( )、COUNT( )、SUM( )、AVG( )等。可以加上AS关键词,给这些集合函数取一个别名,如MAX(line1) AS max

   例如以line1分组并统计分组中的数量:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1;

   如果需要详细的显示出分组中的各字段的名字,可以使用GROUP_CONCAT()关键词。

使用如:SELECT line1,GROUP_CONCAT(line2),COUNT(*) AS Total FROM tab1 GROUP BY line1;

   当然也可以使用多个字段分组,形如GROUP BY line1,line2;

(2)使用HAVING关键词过滤分组。

例如:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1 HAVING COUNT(line1)>100;

(3)使用WITH ROLLUP统计数量,它会在分组的最后一列加一条统计上面记录总和的记录。

例如:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1 WITH ROLLUP;

(4)使用LIMIT限制查询结果,语法:LIMIT [位置偏移量, ] <行数>;

例如,返回前3条记录:SELECT * FROM tab1 LIMIT 3;

从第5条记录起,返回接下来的2条记录: SELECT * FROM tab1 LIMIT 4,2;

12. 子查询。子查询是指一个查询语句中嵌套在另一个查询语句内部的查询。在SELECT语句中,先查询子句的结果,将其作为外层的查询的过滤条件。常用的操作符有ANY(SOME)、ALL、IN、EXISTS。当然,子查询中可以添加到SELECT、UPDATE、DELETE语句中。

(1)带ANY、SOME关键词(即满足其中任一条件)的子查询:

SELECT line1 FROM tab1 WHERE line1 > ANY(SELECT line2 FROM tab2);

(2)带ALL关键词(满足内层的所有条件)的子查询:

SELECT line1 FROM tab1 WHERE line1 > ALL(SELECT line2 FROM tab2);

(3)带(NOT) EXISTS关键字(系统对子查询进行运算以判断是否返回行,EXISTS是一个布尔型值,如果为false则不再对外层语句进行查询)的子查询。

例如:SELECT * FROM tab1 WHERE EXISTS (SELECT lin1 FROM tab2 WHERE lin1>10);

(4)带(NOT)IN关键词的子查询:

SELECT line1 FROM tab1 WHERE line2 IN (SELECT lin1 FROM tab2 WHERE lin2> 10);

(5)使用比较运算符的子查询:

SELECT line1 FROM tab1 WHERE line1=(SELECT lin1 FROM tab2 WHERE lin2= 'one');

13. UNION合并查询的结果。合并的前提是这些表的列数与数据类型必须相同,其返回的行都是唯一不重复的。当使用UNION ALL时,允许有重复的结果,其查询效率相对较高。

语法: SELECT line1,...  FROM tab1 UNION [ALL]  SELECT line1,...  FROM tab1;

14. 使用正则表达式查询。MySQL中使用REGEXP关键词指定字符的匹配模式。关于正则表达式,请看另一篇博文《正则表达式的使用》,这里只举几个例子说明:

(1)查询特定字符(这里以‘s’为例)开头的记录:

SELECT * FROM tab1 WHERE line1 REGEXP '^s';

(2)查询指定字符之外(这里以查询‘a-o’之外的字符为例)的字符:

SELECT * FROM tab1 WHERE line1 REGEXP '[^a-o]';

posted @ 2015-04-06 11:57  lingerhk  阅读(319)  评论(0编辑  收藏  举报
So long as men can breathe or eyes can see,So long lives this and this gives to thee.