在上一期中,我们学习了如何使用SQL插入语句成功存储数据。接下来,我们将重点学习使用SELECT查询语句来检索数据。
01.
SELECT查询语句格式
在日常工作中,SELECT查询语句是最常用的数据库操作之一。它允许我们从数据库表中检索所需的数据,并能够精确地指定要查询的列和条件,从而获取满足特定需求的结果。无论是进行简单的数据检索任务,还是进行复杂的分析操作,SELECT查询都可以轻松应对,为我们提供准确、高效的数据支持,从而更好地推动日常工作流程的顺利进行。
SELECT语句的基本语法通常如下:
SELECT 列名 FROM 表名 WHERE 条件;
其中:
SELECT:用于指定要查询的列名,我们可以选择单个列,也可以选择多个列,甚至可以选择所有列。
FROM:用于指定我们希望查询的表。
WHERE:用于指定查询的条件。这个关键词后面的条件决定了哪些记录会被包含在查询结果中。
02.
SELECT语句基本使用
假设我们有一个人物表(tb_characters),用于记录用户的ID(id)、姓名(name)、性别(gender)、年龄(age)、门派(sect)和武力值(combat_power)重要信息。我们想要查询整个人物表所有人的信息。以下有2种查询方法。
1. 使用SELECT * 语句
SELECT * FROM tb_characters;
这个查询语句使用通配符*来选择tb_characters表中的所有列。这将返回该表中所有记录的所有信息。
2. 列出要查询的列名
SELECT `id`, `name`, gender, age, sect, combat_power FROM tb_characters;
这个查询语句明确地列出了tb_characters表中所有列的名称,以检索tb_characters表中所有人的信息。在日常工作中,我更推荐使用这种方式来指定具体的列名,而不是使用通配符"*"。这可以帮助我们提高查询性能,减少资源消耗,并确保只获取我们真正需要的数据。
2种方法,查询结果如下:
03.
SELECT语句常见用法
在实际应用中,SELECT查询语句通常需要与其他关键词配合使用,以实现更复杂的查询需求。以下是一些常见的用法:
1. AS:取别名
在SQL中,AS关键字用于为表或列指定别名,AS关键字可以省略。使用AS关键字的主要目的是为了简化查询语句和提高查询的可读性。
为表指定别名
SELECT * FROM tb_characters AS Characters
在这个语句中,tb_characters是我们要查询的表名,使用AS关键字将表名替换为别名Characters,这样可以在后续的查询中更方便地引用该表。
为列指定别名
SELECT `name` AS 姓名, gender AS 性别, sect AS 门派 FROM tb_characters
-- 省略了AS
SELECT `name` 姓名, gender 性别, sect 门派 FROM tb_characters
在这个语句中,我们为列指定一个更具可读性的名称。执行该语句结果如下:
2. WHERE:条件查询
WHERE 语句在 SQL 中用于筛选记录,并根据指定的条件返回查询结果。筛选条件可以是简单的,也可以是复杂的,具体取决于查询的需求。以下是一些使用 WHERE 语句的示例,以展示其灵活性和多样性。
单条件查询
以上述人物表为例,倘若需要查询门派是"六道堂"的人物信息,可以使用以下SQL查询语句:
SELECT * FROM tb_characters WHERE sect = '六道堂';
WHERE sect = '六道堂': 这是筛选条件。它表示只选择"sect"列的值为"六道堂"的记录。查询结果如下:
多条件查询
需要查询门派是"六道堂"且武力值大于等于90的人物信息,可以使用以下SQL查询语句:
SELECT * FROM tb_characters WHERE sect = '六道堂' AND combat_power >=90;
使用AND运算符连接不同的条件,会要求所有这些条件都满足,才能使整个WHERE子句成立。也就是说,只有当"sect"列的值为'六道堂',并且"combat_power"列的值大于或等于90时,相应的行才会被选中。查询结果如下:
与其相反的是OR运算符,使用OR运算符连接不同的条件时,只要其中一个条件满足,整个WHERE子句就成立。也就是说,如果数据表中的某一行在"sect"列的值为'六道堂',或者"combat_power"列的值大于或等于90,那么这一行就会被选出来。其SQL查询语句如下:
SELECT * FROM tb_characters WHERE sect = '六道堂' OR combat_power >=90;
查询结果如下:
然而,当查询需要增加更多条件时,使用OR操作符会使查询语句变得冗长且复杂。此时,IN操作符可以发挥其优势。它是通过使用"()"来定义一个条件范围,并可以包含一个或多个值,值之间使用逗号分隔。只要查询结果在这个范围内,整个条件语句就成立。
例如,我们想在人物表中查询,用户名为'宁远舟'、'任如意'或'于十三'的用户,使用IN操作符的查询语句如下:
SELECT * FROM tb_characters WHERE name IN ('宁远舟','任如意','于十三')
查询结果如下:
倘若我们想要找出所有年龄在16到20岁之间都有哪些人,使用AND、OR或IN操作符可能不太方便。这时,BETWEEN...AND操作符是一个更好的选择。它常用于在一个范围内筛选数据,这个范围包括开始和结束值,这个值可以是数值、日期或时间以及字符数据类型。查询SQL语句如下:
SELECT * FROM tb_characters WHERE age BETWEEN 16 AND 20
3. ORDER BY:排序
在SQL中,ORDER BY语句用于对查询结果进行排序。它允许我们按照一个或多个列对结果集进行升序(ASC)或降序(DESC)排序。其语法如下:
-- 默认升序
SELECT 列名 FROM 表名 ORDER BY 列名
-- 降序:使用DESC关键字
SELECT 列名 FROM 表名 ORDER BY 列名 DESC
按单个字段(单列)排序
举个栗子:我们需要查询人物表中姓名、年龄和门派这3列数据,并按年龄降序排列。
SELECT name, age, sect FROM tb_characters ORDER BY age DESC
查询结果如下:
其实除了ORDER BY age DESC 这种写法外,还可以写成ORDER BY 2 DESC,意思是按第2列降序排列,也就是按age降序排列。
SELECT name, age, sect FROM tb_characters ORDER BY 2 DESC
查询结果图同上,这里为了节约空间,就省略了~
按多个字段(多列)排序
倘若我们需要查询人物表中的姓名、年龄和武力值3列数据,并且要求先按照年龄进行升序排序,然后按照武力值进行降序排序。
SELECT name AS 姓名, age AS 年龄, combat_power AS 武力值
FROM tb_characters s
ORDER BY s.age ASC, s.combat_power DESC;
在这个语句中,我们对age和combat_power指定了不同的排序规则,通常需要把优先排序的字段放在前面,字段之间用逗号分隔。默认情况下,如果没有指定排序规则,数据将按升序排列。查询结果如下:
可以看出,这个查询其实并不符合我们预期,age确实是升序排列,但武力值并没有。
这是因为当使用ORDER BY多字段进行排序时,数据库会先根据第一个字段进行分组排序。如果第一个字段的值不重复,那么后面的排序字段将失效,只按照第一个字段进行排序。
如果第一个字段的值重复,那么数据库会在这些重复的组内,再根据第二个字段进行排序。这意味着在第一个字段重复的组内,第二个字段的值会起作用,帮助确定组内数据的顺序。
如果第一个和第二个字段都重复,那么数据库会在这些重复的组内,再根据第三个字段进行排序。以此类推,如果有更多的排序字段,数据库会在已经排序好的字段的基础上,继续使用下一个排序字段进行排序。
这种分组排序的方式可以帮助我们按照多个字段的优先级进行排序,以便获取符合特定条件的数据。
从结果图中可以看到,age字段的值是有重复的,分别是16跟20,因此在age字段排序完成后,combat_power字段也按照我们指定的DESC进行排序了。
关于SQL基本语法—查询语句的使用方法和技巧,暂时分享到这~
希望这个系列能帮助大家更深入地理解和运用数据库。如果您有任何疑问或建议,请随时告诉我。下期我们将继续学习SQL基本语法,敬请期待!
🌟 更多干货:
☞SQL基本语法|插入语句的使用方法和技巧
☞最爱自传书籍,读完总能收获满满!
☞每天掌握一个Linux命令(20)|vim
发表评论