SQL查询数据库表格的完整语法是怎样的?新手看这篇就够了

在数据驱动的时代,数据库已成为存储和管理信息的核心基石,而SQL(Structured Query Language,结构化查询语言)则是与这些数据库进行沟通的桥梁,掌握SQL查询,意味着你拥有了从海量数据中精准提取、筛选、分析和整合信息的能力,本文将系统性地介绍如何使用SQL查询表格数据库,从基础语法到高级应用,助你构建坚实的数据查询技能。

SQL查询数据库表格的完整语法是怎样的?新手看这篇就够了

SQL查询的基础:SELECT语句

几乎所有SQL查询的核心都围绕着一个基本结构:SELECT...FROM...WHERE...,它定义了“要什么”、“从哪里来”以及“需要满足什么条件”。

假设我们有一个名为 employees 的员工信息表,其结构如下:

id name department salary hire_date
1 张三 销售部 9000 2025-01-15
2 李四 技术部 12000 2021-03-22
3 王五 销售部 8500 2025-05-30
4 赵六 人事部 7000 2025-02-10
5 孙七 技术部 15000 2020-11-05

查询所有数据

最简单的查询是获取表中的所有列和所有行,使用星号()作为通配符代表“所有列”。

SELECT * FROM employees;

这条语句会返回 employees 表中的全部内容。

查询特定列

我们并不需要所有数据,只关心特定的几个字段,这时,可以直接在 SELECT 后面列出列名,用逗号分隔。

SELECT name, salary FROM employees;

这条语句只会返回员工姓名和薪资两列。

带条件的查询(WHERE子句)

WHERE 子句是SQL查询的精髓所在,它允许我们根据指定的条件筛选出符合条件的记录。

  • 基本条件: 等于()、大于(>)、小于(<)、不等于(<> 或 )。

    -- 查询薪资大于10000的员工
    SELECT * FROM employees WHERE salary > 10000;
  • 逻辑条件: AND(且)、OR(或)、NOT(非)。

    -- 查询技术部且薪资大于11000的员工
    SELECT * FROM employees WHERE department = '技术部' AND salary > 11000;
    -- 查询销售部或人事部的所有员工
    SELECT * FROM employees WHERE department = '销售部' OR department = '人事部';
  • 范围条件: BETWEEN...AND...

    -- 查询薪资在8000到12000之间的员工(包含边界值)
    SELECT * FROM employees WHERE salary BETWEEN 8000 AND 12000;
  • 列表条件: IN

    SQL查询数据库表格的完整语法是怎样的?新手看这篇就够了

    -- 查询部门为销售部或技术部的员工(效果同上例的OR)
    SELECT * FROM employees WHERE department IN ('销售部', '技术部');
  • 模糊匹配: LIKE,配合通配符 (匹配任意多个字符)和 _(匹配单个字符)。

    -- 查询所有姓“张”的员工
    SELECT * FROM employees WHERE name LIKE '张%';

排序与限制结果

排序(ORDER BY)

获取数据后,我们通常需要按照特定顺序进行展示,例如按薪资从高到低排序。ORDER BY 子句可以实现这个功能,默认是升序(ASC),可以指定为降序(DESC)。

-- 按薪资降序排列
SELECT name, salary FROM employees ORDER BY salary DESC;
-- 先按部门升序,再按薪资降序
SELECT name, department, salary FROM employees ORDER BY department ASC, salary DESC;

限制返回数量(LIMIT)

当只需要查询结果的前几条记录时,可以使用 LIMIT,这在分页或获取“Top N”记录时非常有用。(注意:在SQL Server中使用 TOP N,Oracle中使用 FETCH FIRST N ROWS ONLY)。

-- 获取薪资最高的前两名员工
SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 2;

数据聚合与分组

SQL的强大之处不仅在于查询原始数据,更在于对数据进行分析和汇总,这需要用到聚合函数和 GROUP BY 子句。

常用聚合函数

  • COUNT():计数
  • SUM():求和
  • AVG():求平均值
  • MAX():求最大值
  • MIN():求最小值
-- 计算员工总数
SELECT COUNT(*) FROM employees;
-- 计算所有员工的平均薪资
SELECT AVG(salary) FROM employees;
-- 计算技术部的最高薪资
SELECT MAX(salary) FROM employees WHERE department = '技术部';

分组(GROUP BY)

GROUP BY 子句将具有相同值的行分组,然后聚合函数会作用于每个分组,而不是整个表,这是进行分类统计的基础。

-- 计算每个部门的平均薪资
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;

这里的 AS 关键字用于给计算出的列起一个别名,使结果更具可读性。

分组后筛选(HAVING)

WHERE 子句用于在分组前筛选行,而 HAVING 子句则用于在分组后筛选分组结果。

-- 查询平均薪资大于8000的部门
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 8000;

这条语句的逻辑是:先按 department 分组,然后计算每个组的平均薪资,最后只保留那些平均薪资大于8000的组。

连接查询(JOIN)

在关系型数据库中,数据通常被分散存储在多个表中以减少冗余。JOIN 操作允许我们将这些表中的数据关联起来查询。

SQL查询数据库表格的完整语法是怎样的?新手看这篇就够了

假设我们还有一个部门表 departments

dept_id dept_name location
101 销售部 北京
102 技术部 上海
103 人事部 北京

employees 表中有一个 dept_id 字段与 departments 表关联。

内连接(INNER JOIN)

INNER JOIN 返回两个表中连接键相匹配的行,这是最常用的连接类型。

-- 查询员工姓名及其所在部门的位置
SELECT e.name, d.location
FROM employees AS e
INNER JOIN departments AS d ON e.dept_id = d.dept_id;

这里使用了 AS 为表起别名,简化了书写。ON 子句指定了连接的条件。

左连接(LEFT JOIN)

LEFT JOIN 返回左表(FROM 后的第一个表)的所有行,以及右表中与左表匹配的行,如果右表中没有匹配项,则结果中右表的列将为 NULL

-- 查询所有员工及其部门信息,即使某些员工没有分配部门
SELECT e.name, d.dept_name
FROM employees AS e
LEFT JOIN departments AS d ON e.dept_id = d.dept_id;

通过以上这些核心概念和操作,你已经可以应对绝大多数数据库查询场景,从简单的数据检索到复杂的多表关联和聚合分析,SQL提供了一套强大而灵活的工具集,持续练习和探索更高级的用法,如子查询、窗口函数等,将使你在数据的世界里更加游刃有余。


相关问答FAQs

问题1:WHEREHAVING 有什么区别?

解答: WHEREHAVING 都是用于筛选的子句,但它们作用的阶段不同。WHERE 在数据分组(GROUP BY)之前对原始表的行进行筛选,它不能使用聚合函数,而 HAVING 在数据分组之后对分组结果进行筛选,它通常与聚合函数一起使用。WHERE 筛选行,HAVING 筛选组。

问题2:SQL查询语句中的关键字和表名、列名是否区分大小写?

解答: 这取决于具体的数据库系统及其配置,在大多数情况下(如MySQL, SQL Server的默认配置),SQL关键字(如 SELECT, FROM, WHERE)以及表名、列名是不区分大小写的,这意味着 select * from Employees;SELECT * FROM employees; 是等效的,查询的数据值(字符串)通常是区分大小写的,'张三''张三' 可能是不同的,为了保证代码的可移植性和规范性,建议统一使用大写编写SQL关键字,小写编写表名和列名。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-23 17:05
下一篇 2025-10-23 17:13

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信