MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】
全部章节 >>>>
本章目录
4.1 select 选择列表
4.1.1 select 基本结构
select 查询语句的语法如下:
SELECT <COLUMN1, COLUMN2, COLUMN3...>
FROM <table_name> [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

查询部分列
select lineNo from line

注意:MySQL 针对表名、列名以及关键字,均不区分大小写。如表“line”可写成“LINE”;字段“miles”可写成“MILES”;“select”可写成“SELECT”。
查询出所有线路的线路名、始发站和终点站
select lineNo, from_station, end_station from line

使用 AS 关键字显示列标题
SELECT 字段名 1 AS 列标题 1,字段名 2 AS 别标题 2... FROM 表名
示例:select lineNo as 线路 , from_station as 始发站 , end_station as 终点站 from line

使用空格显示列标题名
SELECT 字段名1 列标题1,字段名2 列标题2... FROM 表名
示例:select lineNo 线路 , from_station 始发站 , end_station 终点站 from line

使用 DISTINCT 关键字过滤重复行
SELECT DISTINCT 字段名 FROM 表名
示例:select model 型号 from vehicle

示例:select distinct model 型号 from vehicle

选择列为表达式
示例:公交集团为落实政府的“公交优先” 理念,拟将所有线路的车辆数增加 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)

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

在数学运算时,除数为 0 的时候无意义,因此除法运算中除数不能为 0,如果被 0 除,则返回结果为 null。
例如:select num, num/0, num%0 from tmp1;

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 进行数值比较时规则如下:
(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

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

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

2、多条件查询
select * from line where company=' 公交二公司 ' and miles>=20
或
select * from line where company=' 公交二公司 ' && miles>=20

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

示例:使用多条件查询所有属于公交三公司和公交四公司且营运里程数大于 25 千米的线路信息
分析:
条件一:线路所属公司为公交三公司或者公交四公司,使用“or”运算符实现“或者”条件。
条件二:线路营运里程数大于 25 千米。
条件一与条件二作为查询的并列条件之一,需使用“and”实现。
select * from line where (company=' 公交三公司 ' or company=' 公交四公司 ') and miles>25

示例:查询地址为空的驾驶员信息。
select * from driver where phone IS NULL

select * from vehicle where driverID IS NOT NULL

4.3 定制显示查询结果
4.3.1 查询结果排序
1、单列排序
select * from line order by miles asc
或
select * from line order by miles

select lineNo 线路号 ,company 所属公司 , from_station 起始站 , end_station 终点站 , miles 里程数 , number 车辆数 from line order by number desc
可用字段别名“车辆数”替换“number”

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

4.3.2 使用 LIMIT 限制查询结果数量
LIMIT 子句可以被用于强制 select 语句返回指定的记录数,具体语法如下:
偏移量为 0,省略
语法说明:
参数 offset 和 rows 必须为整数,offset 可以省略。
offset 指定第一个返回记录行的偏移量。注意:初始记录行的偏移量是 0,而不是 1。
rows 指定返回记录行的最大数目。
查询营运里程数在第三至第五之间的线路信息。
select * from line order by miles desc limit 2, 3

查询营运里程数排名最高的前 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 到多个任意字符。
查找所有“张”姓司机的姓名和电话信息:
select name, phone from driver where name like ' 张 %';

查找所有姓名以“宇”字结尾的司机的姓名和电话信息:
select name, phone from driver where name like '% 宇 ';

查询所有姓名以“陈”字开头、“辉”字结束的司机的姓名和电话信息:
select name, phone from driver where name like ' 陈 % 辉 ';

查询所有姓名含“一”字的司机的姓名和电话信息:
select name, phone from driver where name like '% 一 %';

“_”通配符的功能与“%”类似,其仅匹配任意一个字符。如需匹配两个字符,则使用“_ _”。
查询姓名以“林”字开头,“一”字结束且姓名为 3 个字的司机的电话信息:
select name, phone from driver where name like ' 林 _ 一 ';

匹配多个字符。查询姓名以“徐”字开头且姓名为 3 个字的司机的电话信息:
select name, phone from driver where name like ' 徐 _ _';

使用模糊查询时,有时需综合“_”与“%”才能完成。
查询姓名中第二个字符为“重”的司机信息:
select name, phone from driver where name like '_ 重 %';

4.4.2 IN 运算符
IN 运算符也称为“成员条件运算符”,用于判断一个值是否在一个指定的数据集合之内。
显示公交一公司和公交三公司线路站点信息:
select lineNo 线路号 , from_station 起始站 , end_station 终点站from line where company in(' 公交一公司 ',' 公交三公司 ');

等价语句:
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;

查询出生日期在 1970-01-01 到 1980-01-01 之间的员工信息:
select * from employee where birthday between '1970-01-01' and '1980-01-01';

总结:
- select 查询语句中必须的子句是:
select 子句和 from 子句。
- 多列字段排序的原则是:
依照排序列从左至右的次序确定优先级别。
- LIKE 运算符常见的通配符:
通配符包括“%”“_”和“[]”。
“%”含义:匹配 0 到多个任意字符。“_”含义:匹配任意一个字符。
“[]”含义:用于指定一个字符集合。
MySQL数据操作与查询笔记 • 【第4章 SELECT 数据查询】的更多相关文章
- ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据
ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...
- 《SQL CookBook 》笔记-第三章-多表查询
目录 3.1 叠加两个行集 3.2 合并相关行 3.3 查找两个表中相同的行 3.4 查找只存在于一个表中的数据 3.5 从一个表检索与另一个表不相关的行 3.6 新增连接查询而不影响其他连接查询 3 ...
- Mysql高手系列 - 第7篇:玩转select条件查询,避免踩坑
这是Mysql系列第7篇. 环境:mysql5.7.25,cmd命令中进行演示. 电商中:我们想查看某个用户所有的订单,或者想查看某个用户在某个时间段内所有的订单,此时我们需要对订单表数据进行筛选,按 ...
- WPF中ListBox ListView数据翻页浏览笔记(强调:是数据翻页,非翻页动画)
ListBox和ListView在应用中,常常有需求关于每页显示固定数量的数据,然后通过Timer自动或者手动翻页操作,本文介绍到的就是该动作的实现. 一.重点 对于ListBox和ListView来 ...
- C++ primer plus读书笔记——第3章 处理数据
第3章 处理数据 1. C++对于变量名称的长度没有限制,ANSI C只保证名称中的前63个字符有意义(前63个字符相同的名称被认为是相同的,即使第64个字符不同). 2. 对类型名(int)使用si ...
- SQL笔记-第四章,数据的检索
一.select的简单用法 1.简单的数据检索 SELECT * FROM T_Employee; 2.检索出需要的列 SELECT FNumber,FName,FAge FROM T_Employe ...
- 《SQL CookBook 》笔记-第三章-多表查询-连接查询
目录 1 内连接(inner join) 1.1 隐式的内连接 1.2 显式的内连接 2 外连接(outer join) 2.1 左连接(left outer join) 2.2 右连接(right ...
- SQL笔记-第三章,数据的增删改
1.数据的插入 简单的INSERT语句 INSERT INTO T_Person(FName,FAge,FRemark) VALUES(‘Tom’,18,’USA’) 简化的INSERT语句(只对部分 ...
随机推荐
- Oracle—数据库名、数据库实例名、数据库域名、数据库服务名的区别
Oracle-数据库名.数据库实例名.数据库域名.数据库服务名的区别 一.数据库名 1.什么是数据库名 数据库名就是一个数据库的标识,就像人的身份证号一样.他用参数DB_NAME表示,如果 ...
- C++ 写出这个数
题目如下: 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内 ...
- Linux学习 - 变量测试与内容替换
变量置换方式 变量y没有设置 变量y为空 变量y有值 x=${y-新值} x=新值 x空 x=$y x=${y:-新值} x=新值 x=新值 x=$y x=${y+新值} x空 x=新值 x=新值 x ...
- android 调用相机拍照及相册
调用系统相机拍照: private Button btnDyxj; private ImageView img1; private File tempFile; btnDyxj = (Button) ...
- 监控Linux服务器网站状态的SHELL脚本
1,监控httpd状态码的shell脚本代码. #!/bin/sh #site: www.jquerycn.cn # website[0]=www.jquerycn.cn/chuzu/' #网站1 m ...
- Restful、SOAP、RPC、SOA、微服务之间的区别
什么是Restful Restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构,而满足这些约束条件和原则的应用程序或设计就是 Restful架构或服务. 主要的设计原则: 资源与URI ...
- Map集合的认识和理解
java.util.Map(k,v)集合* Map的特点:* 1.Map集合是一个双列集合,一个元素包含两个值(一个是key,一个是Value)* 2.Map集合中的元素,key和value的类型可以 ...
- Mysql配置文件 扩展详细配置
目录 配置文件中有些特定参数 扩展配置 max_connections connect_timeout interactive_timeout|wait_timeout net_retry_count ...
- Mysql配置文件 16c64g优化
目录 一.说明 二.配置 一.说明 以下配置适合16核64G及以上的配置,会让性能稍微提高1/3左右. 二.配置 my.cnf [client] port = 3306 socket = /usr/l ...
- Python pyecharts绘制柱状图
本文摘抄至https://05x-docs.pyecharts.org/#/zh-cn/charts_base?id=bar%ef%bc%88%e6%9f%b1%e7%8a%b6%e5%9b%be%e ...