六、MySQL使用各种条件进行SELECT

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()函数有两种使用方式:

  1. 使用COUNT(*)对表中的数目进行计算,不管表列中包含的是空值(NULL)还是非空值。
  2. 使用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 表名;

演示:

需要注意的是:

  1. 如果查询多列数据时使用DISTINCT,不能部分列使用DISTINCT。DISTINCT关键字作用于所有列,而不仅仅是跟在其后的那一列。
  2. 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

请记住下面的规则:

  1. 当AND和OR混合使用时,会优先处理AND。
  2. 当想要优先处理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的使用规则

  1. GROUP BY子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组。
  2. 如果在GROUP BY子句中嵌套了分组,数据将最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
  3. GROUP BY子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
  4. MySQL允许GROUP BY列带有长度可变的数据类型(如VARCHAR类型)。
  5. 除聚集计算外,SELECT语句中的每一列都必须在GROUP BY子句中给出。
  6. 如果分组列中包含具有NULL值的行,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
  7. GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

8、条件分组查询

8.1、使用HAVING

格式:

SELECT 统计列 FROM 表名 GROUP BY 分组列 HAVING 条件;

演示:

8.2、关于HAVING和WHERE

HAVING和WHERE的差别:

  1. WHERE过滤行,而HAVING过滤分组。
  2. WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
  3. 如图:

8.3、分组和排序

一般在使用GROUP BY子句时,应该也给出ORDER BY子句。

操作命令:

SELECT 
    empid,AVG(sales)
FROM tb
    GROUP BY empid
ORDER BY AVG(sales)
    DESC;

演示:

9、SELECT子句顺序

SELECT子句及其顺序:

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值