1、选择列的显示内容并执行SELECT
1.1、准备表tb
如图:
1.2、改变列的显示顺序
操作命令:
SELECT sales,empid FROM tb;
演示:
1.3、使用别名(alias)
格式:
SELECT 列名 AS 别名 FROM 表名;
演示:
2、计算列值或处理字符串之后显示列
2.1、使用列值进行计算并显示
操作命令:
SELECT sales*10000 as 销售额 FROM tb;
演示:
2.2、使用函数进行计算
SELECT平均值
操作命令:
SELECT AVG(sales) FROM tb;
演示:
使用AVG()应该注意:
(1)AVG()只能用于单个列,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。
(2)AVG()函数忽略列值为NULL的行。
SELECT总和
操作命令:
SELECT SUM(sales) FROM tb;
演示:
注意:SUM()函数忽略列值为NULL的行。
SELECT统计个数
操作命令:
SELECT COUNT(sales) FROM tb;
演示:
COUNT()函数有两种使用方式:
- 使用COUNT(*)对表中的数目进行计算,不管表列中包含的是空值(NULL)还是非空值。
- 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
注意:
(1)如果指定列名,则COUNT()函数会忽略指定列的值为NULL的行,但如果COUNT()函数中用的是星号(*),则不忽略。
(2)如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(*)。类似地,DISTINCT必须使用列名,不能用于计算或表达式。
2.3、用于显示各种信息的函数
- 显示MySQL服务器版本:
SELECT VERSION();
演示:
- 返回圆周率:
SELECT PI();
演示:
- 显示当前使用的数据库:
SELECT DATABASE();
演示:
- 显示当前用户:
SELECT USER();
演示:
- 显示由参数指定的字符的字符编码:
SELECT CHARSET('测试');
演示:
2.4、使用CONCAT()连接字符串
在连接字符串的时候,可以使用CONCAT函数。CONCAT中指定的字符串列需要使用“,”进行分隔。
格式:
CONCAT(列名1,列名2,字符串)
演示:
2.5、字符串操作中常使用的函数
从右取出:RIGHT函数
下面的命令用于显示empid最后边的2个字符。
SELECT RIGHT(empid,2) FROM tb1;
演示:
从左取出:LEFT函数
下面的命令用于显示列empid最左边的2个字符。
SELECT LEFT(empid,2) FROM tb1;
演示:
从第x个字符开始截取n个字符:SUBSTRING()函数
下面的命令用于从列empid的第2个字符开始连续显示3个字符。
SELECT SUBSTRING(empid,2,3) FROM tb1;
演示:
重复显示:REPEAT函数
下面的命令用于重复显示字符“.”,其重复次数为列age的值。
SELECT REPEAT('.',age) FROM tb1;
演示:
反转显示:REVERSE函数
下面的命令把列name中的字符串倒着显示出来。
SELECT REVERSE(name) FROM tb1;
演示:
2.6、日期和时间函数
NOW是用于返回当前日期和时间的函数。如果想自动设置执行处理的日期和实际,可以使用NOW()。NOW()会返回日期和时间,所以最好将输入设置为datetime类型。
操作命令:
CREATE TABLE t_now (a INT AUTO_INCREMENT PRIMARY KEY,b DATETIME);
INSERT INTO t_now (b) VALUES(NOW());
演示:
3、设置条件进行SELECT
3.1、确定记录数并显示
格式:
SELECT 列名 FROM 表名 LIMIT 显示的记录数;
演示:
3.2、使用WHERE提取记录
格式:
SELECT 列名 FROM 表名 WHERE 条件;
演示:
3.3、比较运算符
以下是常用的比较运算符。
3.4、使用字符串作为查询条件
3.4.1、LIKE:模糊查询
格式:
SELECT 列名 FROM 表名 WHERE 列名 LIKE ‘字符串’;
演示:
这里必须强调一点:当百分号(%)通配符出现在字符串或者单词后面时,表示搜索匹配以%通配符前的字符串为开头的数据;当%通配符出现在字符串或者单词前面时,表示搜索匹配以%通配符后的字符串为结尾的数据;当%通配符出现在字符串前后两端时,表示搜索匹配包含%通配符之间的子字符串的数据,不论子字符串出现在什么位置。
3.4.2、提取不包含指定字符的记录
格式:
SELECT 列名 FROM 表名 WHERE 列名 NOT LIKE ‘字符串’;
演示:
4、去重查询:使用DISTINCT
格式:
SELECT DISTINCT 列名1, 列名2, FROM 表名;
演示:
需要注意的是:
- 如果查询多列数据时使用DISTINCT,不能部分列使用DISTINCT。DISTINCT关键字作用于所有列,而不仅仅是跟在其后的那一列。
- DISTINCT不能用于COUNT(*)。如果指定列名,则DISTINCT只用用于COUNT()。类似地,DISTINCT必须使用列名,不能用于计算或者表达式。
5、指定多个条件进行SELECT
5.1、使用AND
操作命令:
SELECT * FROM tb WHERE empid LIKE '%1' AND month=4;
演示:
5.2、使用OR
操作命令:
SELECT * FROM tb WHERE sales<50 OR sales>200;
演示:
5.3、使用多个AND或OR
请记住下面的规则:
- 当AND和OR混合使用时,会优先处理AND。
- 当想要优先处理OR的部分时,我们需要用()把想要优先处理的内容括起来。()括号的优先级最高,其次是AND,再其次才是OR。
5.4、使用CASE WHEN
格式:
CASE
WHEN 条件1 THEN 显示的值
WHEN 条件2 THEN 显示的值
WHEN 条件3 THEN 显示的值
...
ELSE 不满足所有条件时的值
END
例如:使用销售信息表tb对销售额进行如下评价。
当销售额(sales)大于等于100时为“高”,大于等于50小于100时为“中等”,否则为“低”。
演示:
6、排序
6.1、按升序排序并显示
格式:
SELECT 列名 FROM 表名 ORDER BY 作为键的列 ASC;
演示:
我们看到排序列后有关键字ASC和没有时的显示结果一样。其实,MySQL中如果默认的排序方式就是升序排序,所以需要将数据升序排序时可以省略关键字ASC。
6.2、按降序排序并显示
按降序排序的时候,需要给命令加上DESC。需要注意的是,DESC和ASC需要写在“ORDER BY 列名”的后面。
操作命令:
SELECT * FROM tb ORDER BY sales DESC LIMIT 5;
演示:
6.3、指定记录的显示范围
格式:
SELECT 列名 FROM 表名 LIMIT 显示的记录数 OFFSET 开始显示的记录的移位数;
演示:
“开始显示记录的移位数”是指“移动多少位后开始显示记录”的数字。如果设置为OFFSET 3,则表示“从第1条记录开始移动3位后,从第4位记录开始显示”。
7、分组查询
7.1、分组显示
格式:
SELECT 列名 FROM 表名 GROUP BY 用于分组的列名;
演示:
7.2、分组统计
操作命令:
SELECT COUNT(*) FROM tb GROUP BY empid;
演示:
7.3、显示各组的总和以及平均值
总和操作命令:
SELECT
empid,SUM(sales) AS 合计
FROM tb
GROUP BY empid;
演示:
平均值操作命令:
SELECT
empid,AVG(sales)
FROM tb
GROUP BY empid;
演示:
7.4、GROUP BY的使用规则
- GROUP BY子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组。
- 如果在GROUP BY子句中嵌套了分组,数据将最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
- GROUP BY子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
- MySQL允许GROUP BY列带有长度可变的数据类型(如VARCHAR类型)。
- 除聚集计算外,SELECT语句中的每一列都必须在GROUP BY子句中给出。
- 如果分组列中包含具有NULL值的行,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
- GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
8、条件分组查询
8.1、使用HAVING
格式:
SELECT 统计列 FROM 表名 GROUP BY 分组列 HAVING 条件;
演示:
8.2、关于HAVING和WHERE
HAVING和WHERE的差别:
- WHERE过滤行,而HAVING过滤分组。
- WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
- 如图:
8.3、分组和排序
一般在使用GROUP BY子句时,应该也给出ORDER BY子句。
操作命令:
SELECT
empid,AVG(sales)
FROM tb
GROUP BY empid
ORDER BY AVG(sales)
DESC;
演示:
9、SELECT子句顺序
SELECT子句及其顺序: