MySQL8.0入门:即学即用【第三章】查询操作

文章详细介绍了MySQL中的查询操作,包括select语句的基本用法,如查询一列、多列和所有列,以及如何使用别名增强可读性。还涵盖了条件子句where,讲解了各种比较运算符和逻辑运算符的使用,如等于、大于、小于、in、notin、between...and...等。此外,提到了orderby子句的排序功能和limit子句用于限制查询结果的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:该学习笔记是根据莫振杰老师编写的《从0到1:MySQL即学即用》所学习整理的笔记。

第三章 查询操作

一、select语句简介

1、select语句

在MySQL中,使用select语句来对一个表进行查询操作。

  • 语法结构:
    • select 列名 from 表名
  • 参数说明:
    • select语句由“select子句”和“from子句”两个部分组成。

select语句包含的子句(查询子句)主要有7种:

子句说明
select查询哪些列
from从哪个表查询
where查询条件
group by分组
having分组条件
order by排序
limit限制行数
1)、查询一列
SELECT `name` FROM fruit;

请添加图片描述

2)、查询多列

查询多列数据,需要再select子句中把多个列名列举出来,其中列名之间使用英文半角逗号分隔。

SELECT `name`, type, price FROM fruit;

请添加图片描述

3)、查询所有列

查询所有列,可以使用“*”符号来表示所有列名。但是使用“*”将无法指定列的显示顺序以及查询数据将会变慢。

SELECT * FROM fruit;

请添加图片描述

2、特殊列名

对于包含特殊符号或者关键字的列名,需要使用反引号( ` )将其引起来。

3、换行说明

一般情况下,一个子句占据一行。需要注意的是,行与行之间不允许出现空行,否则就会报错。

如果SQL语句比较短,则只在一行写就可以了。如果SQL语句比较长,则可以使用以”子句“位单位进行换行的方式书写。

二、使用别名:as

1、as关键字

在使用SQL语句查询数据时,可使用as关键字给一个列起别名。起别名的作用:增强代码和查询结果的可读性。

注意:别名只在当前的查询结果中显示,真实表中的列名并不会改变。

  • 语法结构:
    • select 列名 as 别名
    • from 表名;
  • 使用场景:
    • 列名比较长或可读性较差。
    • 使用内置函数。
    • 用于多表查询。
    • 需要把两个或更多列放在一起。
1)、英文别名
-- 方式1
SELECT `name` as fruit_name
FROM fruit;

-- 方式2
SELECT `name` fruit_name
FROM fruit;

请添加图片描述

2)、中文别名
SELECT `name` as 名称
FROM fruit;

请添加图片描述

3)、为多个列指定别名

指定多列别名时,可写在一行,也可分行来写。

-- 方式1
SELECT `name` AS 名称, type AS 类型, price AS 售价
FROM fruit;

-- 方式2
SELECT
	`name` AS 名称,
	type AS 类型,
	price AS 售价 
FROM
	fruit;

请添加图片描述

2、特殊别名

在使用as关键字起别名时,如果别名中包含了保留字或者特殊字符,如空格、加号、减号等,则别名必须使用英文半角引号引起来。

建议:使用英文半角双引号,一般单引号是表示字符串的。

1)、包含空格
SELECT
	`name` AS "水果 名称"
FROM
	fruit;

请添加图片描述

2)、包含“-”
SELECT
	`name` AS "水果-名称" 
FROM
	fruit;

请添加图片描述

三、条件子句:where

在MySQL中,使用where子句来指定查询的条件。一般是配合select子句来使用。

  • 语法结构:
    • select 列名
    • from 表名
    • where 条件;
  • 使用场景:
    • 比较运算符
    • 逻辑运算符
    • 其他运算符

1、比较运算符

对于MySQL中的运算符,需要清楚一下3点:

  • 对于“等于”,MySQL使用的是“=”,而不是“==”,这一点与其他编程语言不同。
  • 对于“不等于,MySQL有两种表达方式:”!=“和”<>“。
  • 只有MySQL中才有“<=>”运算符,其他没有。
运算符说明
>大于
<小于
=等于
>=大于等于
<=小于等于
!>不大于(相当于<=)
!<不小于(相当于>=)
!=或<>不等于
<=>安全等于
1)、等于(数值)
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	price = 27.3;

请添加图片描述

2)、等于(字符串)
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	`name` = '柿子';

请添加图片描述

3)、大于
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	price > 10;

请添加图片描述

4)、日期时间

当比较运算符用于日期时间类型的数据时,应当知道以下3点:

  • 小于某个日期时间,指的是在该日期时间之前。
  • 大于某个日期时间,指的是在该日期时间之后。
  • 等于某个日期时间,指的是处于该日期时间。
SELECT
	`name`,
	date
FROM
	fruit 
WHERE
	date <= '2022-09-01'

请添加图片描述

2、逻辑运算符

在where子句中,如果需要同时指定多个查询条件,就需要使用逻辑运算符。MySQL的逻辑运算符有两种写法:一种是“关键字”、一种是“符号”。

关键字运算符说明
and&&
or||
not!
1)、与运算
SELECT
	`name`,
	price
FROM
	fruit 
WHERE
	price > 10 AND price < 20;

请添加图片描述

2)、或运算
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	price < 10 OR price > 20;

请添加图片描述

3)、非运算
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	NOT price > 10;

请添加图片描述

3、其他运算符

运算符说明
is null或isnull是否为null值
is not null是否部位null值
in是否为列表中的值
not in是否不为列表中的值
between A and B是否处于A和B之间
not between A and B是否不处于A和B之间
1)、is null和is not null

当某一个字段(某一列)没有数据(为空)时,该字段的值就是null。需要特别注意的是null代表该字段没有值,而不是代表该字段的值为0或者’'(空字符串)。

创建一个名为“fruit_miss”的表,用来测试is null和is not null运算符。

fruit_miss表的结构:
请添加图片描述

fruit_miss表的数据:
请添加图片描述

(1)is null的使用

判断某一列的值是否为null,不允许使用“=”或者“!=”这样的比较运算符,而必须使用is null或者is not null运算符。

SELECT
	* 
FROM
	`fruit_miss` 
WHERE
	price IS NULL;

请添加图片描述

(2)is not null的使用
SELECT
	* 
FROM
	`fruit_miss` 
WHERE
	price IS NOT NULL;

请添加图片描述

2)、in和not in

使用in运算符来判断列表中是否“存在”某个值,也可以使用not in运算符来判断列表中是否“不存在”某个值。对于多个值的判断,则需要使用“( )”将其扩起来,并且使用英文半角的逗号分隔。

(1)in的使用
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	`name` IN ( '葡萄', '柿子', '橘子' );

请添加图片描述

(2)not in的使用
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	`name` NOT IN ( '葡萄', '柿子', '橘子' );

请添加图片描述

3)、between…and…和not between…and…

判断某一列的值是否在某个范围之内,则可以使用between…and…运算符来实现。

(1)between…and…的运用
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	price BETWEEN 10 AND 20;

请添加图片描述

(2)not between…and…的运用
SELECT
	`name`,
	date
FROM
	fruit 
WHERE
	date NOT BETWEEN '2022-09-10' AND '2022-12-01';

请添加图片描述

4、运算符优先级

  • MySQL运算符优先级规则:
    • 优先级高的先运算,优先级低的后运算;优先级相同的,从左到右进行运算。
    • 在算术运算中,“乘、除”的优先级比“加、减”的优先级高。
    • 在逻辑运算中,优先级由高到低为:非(not)、与(and)、或(or)。
    • 使用“( )”进行框选的部分,视为一个整体,会先进行括号内的运算。
SELECT
	`name`,
	season,
	price
FROM
	fruit 
WHERE
	season = '夏' AND price < 10 OR price > 20;

请添加图片描述

四、排序子句:order by

注意:
在order by子句中,不管是使用原列名还是别名,得到的结果是一样的。
在order by子句中,中文别名一定不能加上引号,否则MySQL将无法正确识别。
如果存在null值,null值将会是最小值。
结合where子句使用时,order by子句必须放在where子句的后面。

1、order by子句

使用order by子句来对某一列进行排序。order by子句是作为select语句的一部分来使用的。

  • 语法结构:
    • select 列名
    • from 表名
    • order by 列名 asc或desc;
  • 参数说明:
    • asc:表示升序排列,默认值。
    • desc:表示降序。
1)、升序排列
SELECT
	`name`,
	price 
FROM
	fruit 
ORDER BY
	price ASC;

请添加图片描述

2)、降序排列
SELECT
	`name`,
	price 
FROM
	fruit 
ORDER BY
	price DESC;

请添加图片描述

3)、对多列排序
SELECT
	`name`,
	price,
	date
FROM
	fruit 
ORDER BY
	price DESC, date DESC;

请添加图片描述

4)、使用别名
SELECT
	`name` AS 名称,
	price AS 售价 
FROM
	fruit 
ORDER BY
	售价 DESC;

请添加图片描述

5)、对日期时间排序
SELECT
	`name`,
	date 
FROM
	fruit 
ORDER BY
	date DESC;

请添加图片描述

6)、结合where子句
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	price < 10 
ORDER BY
	price DESC;

请添加图片描述

2、中文排序

想要按照中文拼音顺序来进行排序,则需要借助convert( )函数来实现。

  • 语法结构:
    • order by convet(列名 using gbk);
  • 参数说明:
    • 表示强制该列使用gbk字符集。
SELECT
	`name`,
	price 
FROM
	fruit 
ORDER BY
	CONVERT ( `name` USING gbk );

请添加图片描述

五、限制行数:limit

1、limit子句

使用limit关键字来获取前n条记录。

  • 语法结构:
    • select 列名
    • from 表名
    • limit n;
  • 使用场景说明:
    • 如果select语句由where子句或order by子句时,则limit子句需放在最后。
1)、获取前n条记录
SELECT
	`name`,
	price 
FROM
	fruit 
	LIMIT 5;

请添加图片描述

2)、结合where子句
SELECT
	`name`,
	price 
FROM
	fruit 
WHERE
	price > 10 
	LIMIT 5;

请添加图片描述

3)、结合order by子句
SELECT
	`name`,
	price 
FROM
	fruit 
ORDER BY
	price DESC 
	LIMIT 5;

请添加图片描述

4)、获取前n~m条记录
SELECT
	`name`,
	price 
FROM
	fruit 
ORDER BY
	price DESC 
	LIMIT 1, 4;

请添加图片描述

六、去重处理:distinct

使用distinct关键字来实现数据的去重。所谓的数据去重,指的是去除多个重复行,只保留其中一行。
distinct关键字用于select子句中,它总是在select关键字知乎,并且位于第一个列名之前。此外distinct关键字作用于整个字段列表的所有列,而不是单独的某一列。
null值被视为一类数据。如果存在多个null值,则只会保留一个null值。

1、用于一列

SELECT DISTINCT
	type 
FROM
	fruit;

请添加图片描述

2、对于null值

SELECT DISTINCT
	type 
FROM
	fruit_miss;

请添加图片描述

3、用于多列

SELECT DISTINCT
	type,
	season
FROM
	fruit;

请添加图片描述

七、实践练习

下面有一张student表,请写出相关操作对应的SQL语句。

idnamesexgradebirthdaymajor
1张欣欣862000-03-02计算机科学
2李伟达922001-06-13网络工程
3杨璐璐722000-05-01软件工程
4王明刚802002-10-17电子商务
5张伟652001-11-09人工智能

1、查询成绩在80值100之间的学生基本信息

SELECT
	* 
FROM
	student 
WHERE
	grade >= 80 AND grade <= 100;

请添加图片描述

2、查询所有学生的基本信息,并按照成绩从高到低进行排序

SELECT
	* 
FROM
	student 
ORDER BY
	grade DESC;

请添加图片描述

3、查询成绩前3名的学生的基本信息

SELECT
	* 
FROM
	student 
ORDER BY
	grade DESC 
	LIMIT 3;

请添加图片描述

4、查询所有学生的name、grade、major这3列的信息

SELECT
	`name`,
	grade,
	major 
FROM
	student;

请添加图片描述

5、查询所有学生的name、grade这两列的信息,并且给name列起一个别名“姓名”,给grade列起一个别名“成绩”

SELECT
	`name` AS 姓名,
	grade AS 成绩 
FROM
	student;

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MeJonKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值