菜鸟科技网

SQL条件查询命令有哪些语法规则?

基础:WHERE 子句

WHERE 子句的基本语法结构如下:

SQL条件查询命令有哪些语法规则?-图1
(图片来源网络,侵删)
SELECT column1, column2, ...
FROM table_name
WHERE condition;

示例: 假设我们有一个 Students 表:

StudentID FirstName LastName Age City
1 John Doe 18 New York
2 Jane Smith 20 London
3 Peter Jones 18 Paris
4 Mary Williams 21 London

查询年龄大于 19 岁的学生:

SELECT * FROM Students WHERE Age > 19;

结果: | StudentID | FirstName | LastName | Age | City | | :-------- | :-------- | :------- | :-: | :----- | | 2 | Jane | Smith | 20 | London | | 4 | Mary | Williams | 21 | London |


常用条件运算符

WHERE 子句中的 condition 可以使用多种运算符。

SQL条件查询命令有哪些语法规则?-图2
(图片来源网络,侵删)

比较运算符

运算符 描述 示例
等于 WHERE City = 'London'
<> 不等于 WHERE City != 'London'
> 大于 WHERE Age > 19
< 小于 WHERE Age < 19
>= 大于或等于 WHERE Age >= 18
<= 小于或等于 WHERE Age <= 20

逻辑运算符

可以将多个条件组合起来使用。

运算符 描述 示例
AND 如果两个条件都为真,则返回真 WHERE Age > 18 AND City = 'London'
OR 如果其中一个条件为真,则返回真 WHERE City = 'London' OR City = 'Paris'
NOT 如果条件为假,则返回真 WHERE NOT City = 'London'

示例: 查询年龄大于 18 岁且住在伦敦的学生:

SELECT * FROM Students WHERE Age > 18 AND City = 'London';

结果: | StudentID | FirstName | LastName | Age | City | | :-------- | :-------- | :------- | :-: | :----- | | 2 | Jane | Smith | 20 | London | | 4 | Mary | Williams | 21 | London |


高级查询条件

BETWEEN ... AND ... (在...之间)

用于选取介于两个值之间的数据范围(包含边界值)。

SQL条件查询命令有哪些语法规则?-图3
(图片来源网络,侵删)

示例: 查询年龄在 18 到 20 岁之间的学生:

SELECT * FROM Students WHERE Age BETWEEN 18 AND 20;

结果: | StudentID | FirstName | LastName | Age | City | | :-------- | :-------- | :------- | :-: | :------- | | 1 | John | Doe | 18 | New York | | 2 | Jane | Smith | 20 | London | | 3 | Peter | Jones | 18 | Paris |

IN (在列表中)

允许您在 WHERE 子句中指定多个值。

示例: 查询住在伦敦或巴黎的学生:

SELECT * FROM Students WHERE City IN ('London', 'Paris');

结果: | StudentID | FirstName | LastName | Age | City | | :-------- | :-------- | :------- | :-: | :----- | | 2 | Jane | Smith | 20 | London | | 3 | Peter | Jones | 18 | Paris |

LIKE (模糊匹配)

用于在 WHERE 子句中进行搜索模式匹配。 通常与通配符一起使用:

通配符 描述 示例
代表零个、一个或多个字符 WHERE FirstName LIKE 'J%' (以 J 开头)
_ 代表单个字符 WHERE FirstName LIKE 'J_n' (J开头,n结尾,中间一个字符)

示例:

  1. 查找所有名字以 "J" 开头的学生:
    SELECT * FROM Students WHERE FirstName LIKE 'J%';
  2. 查找所有名字以 "s" 结尾的学生:
    SELECT * FROM Students WHERE LastName LIKE '%s';
  3. 查找名字中包含 "a" 的学生:
    SELECT * FROM Students WHERE FirstName LIKE '%a%';

IS NULL / IS NOT NULL (查询空值)

用于查找值为 NULL(空值)或非 NULL 的记录。

示例: 假设 Email 列可能为空:

-- 查询没有邮箱的学生
SELECT * FROM Students WHERE Email IS NULL;
-- 查询有邮箱的学生
SELECT * FROM Students WHERE Email IS NOT NULL;

排序和限制结果

查询结果通常需要排序和限制数量。

ORDER BY (排序)

对结果集进行排序,默认为升序 (ASC)。

语法:

SELECT column_list
FROM table_name
WHERE condition
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];

示例: 按年龄升序排列学生:

SELECT * FROM Students ORDER BY Age ASC;
-- 或者省略 ASC,因为它是默认值
SELECT * FROM Students ORDER BY Age;

按年龄降序排列学生:

SELECT * FROM Students ORDER BY Age DESC;

先按城市升序,再按年龄降序排列:

SELECT * FROM Students ORDER BY City ASC, Age DESC;

LIMIT (限制结果数量)

用于限制返回的记录数,在 SQL Server 中,使用 TOP 关键字。

MySQL / PostgreSQL / SQLite 语法:

SELECT * FROM table_name WHERE condition LIMIT number;

示例: 查询年龄最大的 2 名学生:

SELECT * FROM Students ORDER BY Age DESC LIMIT 2;

SQL Server 语法:

SELECT TOP number column_list FROM table_name WHERE condition;

示例:

SELECT TOP 2 * FROM Students ORDER BY Age DESC;

聚合函数与分组 (GROUP BY)

当需要对数据进行分组统计时,会用到 GROUP BY 和聚合函数。

常用聚合函数:

函数 描述
COUNT(column_name) 返回指定列的值的数目
SUM(column_name) 返回指定列的总和
AVG(column_name) 返回指定列的平均值
MAX(column_name) 返回指定列的最大值
MIN(column_name) 返回指定列的最小值

示例: 统计每个城市的学生人数:

SELECT City, COUNT(*) AS NumberOfStudents
FROM Students
GROUP BY City;

结果: | City | NumberOfStudents | | :------- | :--------------- | | New York | 1 | | London | 2 | | Paris | 1 |

HAVING 子句

WHERE 过滤的是行数据,而 HAVING 过滤的是分组后的数据(聚合结果)。

示例: 统计每个城市的学生人数,并只显示人数大于 1 的城市:

SELECT City, COUNT(*) AS NumberOfStudents
FROM Students
GROUP BY City
HAVING COUNT(*) > 1;

结果: | City | NumberOfStudents | | :----- | :--------------- | | London | 2 |


子句/关键字 功能 示例
WHERE 过滤行,基于列值 WHERE Age > 18
AND / OR / NOT 组合条件 WHERE Age > 18 AND City = 'London'
BETWEEN 范围查询 WHERE Age BETWEEN 18 AND 20
IN 列表查询 WHERE City IN ('London', 'Paris')
LIKE 模糊查询 WHERE FirstName LIKE 'J%'
IS NULL 查询空值 WHERE Email IS NULL
ORDER BY 排序结果 ORDER BY Age DESC
LIMIT / TOP 限制结果数 LIMIT 2TOP 2
GROUP BY 分组数据 GROUP BY City
HAVING 过滤分组 HAVING COUNT(*) > 1
COUNT() / SUM() / AVG() 聚合计算 COUNT(*)

掌握这些命令的组合使用,你就可以完成绝大多数的数据查询需求了。

分享:
扫描分享到社交APP
上一篇
下一篇