MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】

全部章节   >>>>


本章目录

4.1 select 选择列表

4.1.1 select 基本结构

4.1.2 选择列表

4.2 MySQL 运算符

4.2.1 MySQL 算术运算符

4.2.2 MySQL 比较运算符

4.2.3 MySQL 逻辑运算符

4.2.4 条件查询中的运算符

4.3 定制显示查询结果

4.3.1 查询结果排序

4.3.2 使用 LIMIT 限制查询结果数量

4.4 模糊查询

4.4.1 LIKE 运算符

4.4.2 IN 运算符

4.4.3 between...and 运算符

总结:


4.1 select 选择列表

4.1.1 select 基本结构

select 查询语句的语法如下:

SELECT 
FROM  [WHERE < 条件表达式 >]
[GROUP BY COLUMN1, COLUMN2, COLUMN3... | HAVING < 条件表达式 >] 
[ORDER BY < COLUMN1, COLUMN2, COLUMN3...> [ASC 或 DESC]]

语法说明:

必须的子句只有 select 子句和 from 子句。

where 子句用于对查询结果进行过滤。

group by 子句根据指定列分组,having 子句对分组后的结果进行过滤。(后续章节学习。)

order by 子句用于对查询结果进行排序。asc 表示升序排序,desc 表示降序排序,默认按 asc 排序。

4.1.2 选择列表

选择所有列

select  *  from  line

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第1张图片

查询部分列

select  lineNo  from  line

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第2张图片

注意:MySQL 针对表名、列名以及关键字,均不区分大小写。如表“line”可写成“LINE”;字段“miles”可写成“MILES”;“select”可写成“SELECT”。

查询出所有线路的线路名、始发站和终点站

select  lineNo, from_station, end_station  from  line

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第3张图片

使用 AS 关键字显示列标题

SELECT 字段名 1 AS 列标题 1,字段名 2 AS 别标题 2... FROM 表名

示例:select lineNo as 线路 , from_station as 始发站 , end_station as 终点站 from line

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第4张图片

使用空格显示列标题名

SELECT 字段名1 列标题1,字段名2 列标题2... FROM 表名

示例:select lineNo  线路 , from_station  始发站 , end_station  终点站 from line

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第5张图片

使用 DISTINCT 关键字过滤重复行

SELECT DISTINCT 字段名 FROM 表名

示例:select model 型号 from vehicle

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第6张图片

示例:select distinct model 型号 from vehicle

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第7张图片

选择列为表达式

示例:公交集团为落实政府的“公交优先” 理念,拟将所有线路的车辆数增加 20%。

select lineNo 线路号 , number 车辆数 , ceil(number*1.2) 调整后车辆数 from line;	

ceil(a) 为 MySQL 中内置数学函数,其功能是对数值型 a 进行向上取整,如 ceil(12.4) 的值为 13。

floor(a) 为 MySQL 中内置数学函数,其功能是对数值型 a 进行向下取整,如 floor(12.7) 的值为 12。

round(a) 为 MySQL 中内置数学函数,其功能是对数值型 a 进行四舍五入,如 round(12.7)

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第8张图片

4.2 MySQL 运算符

4.2.1 MySQL 算术运算符

 运 算 符

含  义

 +

加法运算

 -

减法运算

 *

乘法运算

 /

除法运算,返回商

 %

求余运算,返回余数

示例:

create table tmp1(num int);
insert into tmp1 value(99);
select num, num+1, num-5+1, num*2, num/3, num/7, num%4 from tmp1

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第9张图片

在数学运算时,除数为 0 的时候无意义,因此除法运算中除数不能为 0,如果被 0 除,则返回结果为 null。

例如:select num, num/0, num%0 from tmp1;

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第10张图片

4.2.2 MySQL 比较运算符

 运 算 符

含  义

 =

等于

 <=>

安全等于,可以比较 null

 <> 或 !=

不等于

 >=

大于等于

 <=

小于等于

 >

大于

 <

小于

 IS NULL

判断一个值是否为 null

 IS NOT NULL

判断一个值是否不为 null

示例:

select 1=2, 3=3,'3'=3,1>2, '3'<=>3, 'a'='a', 'a'<=>'a', 2+4=3+3, NULL=NULL, NULL<=>NULL

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第11张图片

MySQL 进行数值比较时规则如下:

(1)若有一个或两个参数为 null,则比较运算的结果为 null。

(2)若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。

(3)若两个参数均为正数则按照整数进行比较。

(4)若一个字符串和一个数字进行相等判断,则 MySQL 可以自动将字符串转换为数字。

4.2.3 MySQL 逻辑运算符

 运 算

含  义

 AND 或者 &&

逻辑与,含义为“并且”。当所有操作数均为非零值且不为 null 时,返回值为 1;当一个或多个操作数为 0 时,返回值为 0;其余情况返回值为 null

 OR 或者 ||

逻辑或,含义为“或者”。当所有操作数均不为 null 且任意一个操作数为非零时,返回值为 1,否则为 0;当有操作数为 null,且存在另一个操作数为非零时,返回值为 1,否则为 null;当所有操作数均为 null 时,返回值为 null

 NOT 或者 !

逻辑非,含义为“取反”。当操作数为 0 时,返回值为 1;当操作数为非零时,返回值为 0;当操作数为 null 时,返回值为 null

 XOR

逻辑异或。当任意一个操作数为 null 时,返回值为 null;对于非 null 的操作数,如果两个操作数都是非零或者都是零,则返回值为 0;如果一个为零,另一个为非零,返回结果为 1

4.2.4 条件查询中的运算符

1、单条件查询

select * from line where miles>20

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第12张图片

select * from line where company=' 公交三公司 '

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第13张图片

select * from line where company<>' 通恒公司 ' 
或 
select * from line where company!=' 通恒公司 '

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第14张图片

2、多条件查询

select * from line where company=' 公交二公司 ' and miles>=20 
或
select * from line where company=' 公交二公司 ' && miles>=20

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第15张图片

select * from line where company=' 公交三公司 ' or company=' 公交四公司 ' 
或 
select * from line where company=' 公交三公司 ' || company=' 公交四公司 '

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第16张图片

示例:使用多条件查询所有属于公交三公司和公交四公司且营运里程数大于 25 千米的线路信息

分析:

条件一:线路所属公司为公交三公司或者公交四公司,使用“or”运算符实现“或者”条件。

条件二:线路营运里程数大于 25 千米。

条件一与条件二作为查询的并列条件之一,需使用“and”实现。

select * from line where (company=' 公交三公司 ' or company=' 公交四公司 ') and miles>25

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第17张图片

示例:查询地址为空的驾驶员信息。

select * from driver where phone IS NULL

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第18张图片

select * from vehicle where driverID IS NOT NULL

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第19张图片

4.3 定制显示查询结果

4.3.1 查询结果排序

1、单列排序

select * from line order by miles asc
或
select * from line order by miles

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第20张图片

select lineNo 线路号 ,company 所属公司 , from_station 起始站 , end_station 终点站 , miles 里程数 , number 车辆数 from line order by number desc

可用字段别名“车辆数”替换“number”

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第21张图片

2、多列排序

select lineNo 线路号 ,company 所属公司 , from_station 起始站 , end_station 终点站 , miles 里程数 , number 车辆数 from line 
order by miles, number desc

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第22张图片

4.3.2 使用 LIMIT 限制查询结果数量

LIMIT 子句可以被用于强制 select 语句返回指定的记录数,具体语法如下:

偏移量为 0,省略

语法说明:

参数 offset 和 rows 必须为整数,offset 可以省略。

offset 指定第一个返回记录行的偏移量。注意:初始记录行的偏移量是 0,而不是 1。

rows 指定返回记录行的最大数目。

查询营运里程数在第三至第五之间的线路信息。

select * from line order by miles desc limit 2, 3

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第23张图片

查询营运里程数排名最高的前 5 条线路信息。

select * from line order by miles desc limit 0, 5
或
select * from line order by miles desc limit 5

limit 5 偏移量为 0,省略0

4.4 模糊查询

4.4.1 LIKE 运算符

模糊查询是利用数据的部分信息进行查找的一种查询方式。如果数据库用户在进行数据查询时,不知道查询实体的全部具体信息,仅知道其部分信息,此时即可使用 LIKE 运算符进行模糊查询。

在 MySQL 中,使用通配符实现 LIKE 运算。通配符是一种在 WHERE 子句中拥有特殊意义的字符,通配符包括 “%”“_”和“[]”。

注意:只有字符类型的数据才能使用 LIKE 运算符和通配符。

“%”通配符可以匹配 0 到多个任意字符。

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第24张图片查找所有“张”姓司机的姓名和电话信息:

select name, phone from driver where name like ' 张 %';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第25张图片

查找所有姓名以“宇”字结尾的司机的姓名和电话信息:

select name, phone from driver where name like '% 宇 ';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第26张图片

查询所有姓名以“陈”字开头、“辉”字结束的司机的姓名和电话信息

select name, phone from driver where name like ' 陈 % 辉 ';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第27张图片

查询所有姓名含“一”字的司机的姓名和电话信息

select name, phone from driver where name like '% 一 %';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第28张图片

“_”通配符的功能与“%”类似,其仅匹配任意一个字符。如需匹配两个字符,则使用“_ _”。

查询姓名以“林”字开头,“一”字结束且姓名为 3 个字的司机的电话信息

select name, phone from driver where name like ' 林 _ 一 ';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第29张图片

匹配多个字符。查询姓名以“徐”字开头且姓名为 3 个字的司机的电话信息

select name, phone from driver where name like ' 徐 _ _';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第30张图片

使用模糊查询时,有时需综合“_”与“%”才能完成。

查询姓名中第二个字符为“重”的司机信息

select name, phone from driver where name like '_ 重 %';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第31张图片

4.4.2 IN 运算符

IN 运算符也称为“成员条件运算符”,用于判断一个值是否在一个指定的数据集合之内。

显示公交一公司和公交三公司线路站点信息

select lineNo 线路号 , from_station 起始站 , end_station 终点站from line where company in(' 公交一公司 ',' 公交三公司 ');

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第32张图片

等价语句:

select lineNo 线路号 , from_station 起始站 , end_station 终点站

from line where company=' 公交一公司 ' or company=' 公交三公司 ';

IN 运算符与 OR 运算符相比,其优点是:当选择条件很多时,采用 IN 运算符运行效率更高。

4.4.3 between...and 运算符

在 WHERE 子句中,可以采用 between...and 运算符选取介于两个值之间的数据,这些值可以是数字和日期类型(取值范围包括边界值)。

查询长度为 20 ~ 25 千米的线路信息

select lineNo 线路号 , from_station 起始站 , end_station 终点站 , miles 公里里程 from line where miles between 20 and 25;

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第33张图片

查询出生日期在 1970-01-01 到 1980-01-01 之间的员工信息

select * from employee where birthday between '1970-01-01' and '1980-01-01';

MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】_第34张图片

总结:

  • select 查询语句中必须的子句是

select 子句和 from 子句。

  • 多列字段排序的原则是:

依照排序列从左至右的次序确定优先级别。

  • LIKE 运算符常见的通配符:

通配符包括“%”“_”和“[]”。

“%”含义:匹配 0 到多个任意字符。“_”含义:匹配任意一个字符。

“[]”含义:用于指定一个字符集合。

你可能感兴趣的:(#)