全部章节   >>>>


本章目录

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 <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 数据查询】的更多相关文章

  1. 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 ...

  2. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)

    Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...

  3. 《SQL CookBook 》笔记-第三章-多表查询

    目录 3.1 叠加两个行集 3.2 合并相关行 3.3 查找两个表中相同的行 3.4 查找只存在于一个表中的数据 3.5 从一个表检索与另一个表不相关的行 3.6 新增连接查询而不影响其他连接查询 3 ...

  4. Mysql高手系列 - 第7篇:玩转select条件查询,避免踩坑

    这是Mysql系列第7篇. 环境:mysql5.7.25,cmd命令中进行演示. 电商中:我们想查看某个用户所有的订单,或者想查看某个用户在某个时间段内所有的订单,此时我们需要对订单表数据进行筛选,按 ...

  5. WPF中ListBox ListView数据翻页浏览笔记(强调:是数据翻页,非翻页动画)

    ListBox和ListView在应用中,常常有需求关于每页显示固定数量的数据,然后通过Timer自动或者手动翻页操作,本文介绍到的就是该动作的实现. 一.重点 对于ListBox和ListView来 ...

  6. C++ primer plus读书笔记——第3章 处理数据

    第3章 处理数据 1. C++对于变量名称的长度没有限制,ANSI C只保证名称中的前63个字符有意义(前63个字符相同的名称被认为是相同的,即使第64个字符不同). 2. 对类型名(int)使用si ...

  7. SQL笔记-第四章,数据的检索

    一.select的简单用法 1.简单的数据检索 SELECT * FROM T_Employee; 2.检索出需要的列 SELECT FNumber,FName,FAge FROM T_Employe ...

  8. 《SQL CookBook 》笔记-第三章-多表查询-连接查询

    目录 1 内连接(inner join) 1.1 隐式的内连接 1.2 显式的内连接 2 外连接(outer join) 2.1 左连接(left outer join) 2.2 右连接(right ...

  9. SQL笔记-第三章,数据的增删改

    1.数据的插入 简单的INSERT语句 INSERT INTO T_Person(FName,FAge,FRemark) VALUES(‘Tom’,18,’USA’) 简化的INSERT语句(只对部分 ...

随机推荐

  1. SpringBoot 整合 spring security oauth2 jwt完整示例 附源码

    废话不说直接进入主题(假设您已对spring security.oauth2.jwt技术的了解,不懂的自行搜索了解) 依赖版本 springboot 2.1.5.RELEASE spring-secu ...

  2. Spring事务隔离级别和传播特性(转)

    相信每个人都被问过无数次Spring声明式事务的隔离级别和传播机制吧!今天我也来说说这两个东西. 加入一个小插曲,一天电话里有人问我声明式事务隔离级别有哪几种,我就回答了7种,他问我Spring的版本 ...

  3. java 对 final 关键字 深度理解

    基础理解 : 1.修饰类 当用final去修饰一个类的时候,表示这个类不能被继承.处于安全,在JDK中,被设计为final类的有String.System等,这些类不能被继承 .注意:被修饰的类的成员 ...

  4. 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    参考文献:https://www.cnblogs.com/sddai/p/5728195.html 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush ...

  5. python的随机森林模型调参

    一.一般的模型调参原则 1.调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调.但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合 ...

  6. 摘要任务工期计算(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 先说一个好消息:摘要工期是可以自动计算的. 比如A1.A2.A3.A4四个任务,工期如下图安排: 而他们的摘要任务,就不再 ...

  7. Python 的切片为什么不会索引越界?

    切片(slice)是 Python 中一种很有特色的特性,在正式开始之前,我们先来复习一下关于切片的知识吧. 切片主要用于序列对象中,按照索引区间截取出一段索引的内容. 切片的书写形式:[i : i+ ...

  8. 韩顺平JDBC学习笔记

    第一节 JDBC概述 1.1 JDBC原理图 Java不可能具体地去操作数据库,因为数据库有许多种,直接操作数据库是一种很低效且复杂的过程. 因此,Java引入JDBC,规定一套操作数据库的接口规范, ...

  9. CF1166A Silent Classroom 题解

    Content 现在有 \(n\) 名学生,我们需要将这些学生分到两个班上.对于两名在同一班级的学生,如果他们的名字首字母相同,他们就会聊天. 现在给定这些学生的名字,问最少有多少对学生会在一起聊天. ...

  10. CF1132B Discounts 题解

    Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\).有 \(q\) 次询问,每次询问给定一个数 \(x\).对于每次询问,求出数组中去掉一个第 \(x\) ...