上一篇
按要求查询数据库
- 行业动态
- 2025-05-16
- 1
已连接数据库,执行SELECT语句,返回32字结果:”系统检索成功,数据匹配,简答生成完毕
数据库查询基础操作与示例
基本查询语法
SELECT语句结构
SELECT 列名1, 列名2, ... FROM 表名 [WHERE 条件] [ORDER BY 列名] [LIMIT 数量];
- 列名:需查询的字段,表示所有字段。
- 表名:数据来源的表。
- WHERE:过滤条件,支持 ,
>
,<
,LIKE
等操作符。 - ORDER BY:按指定列排序(
ASC
升序/DESC
降序)。 - LIMIT:限制返回行数(MySQL/PostgreSQL),或
TOP
(SQL Server)。
示例:查询员工表中姓名和工资
SELECT name, salary FROM employees WHERE department = 'IT' ORDER BY salary DESC LIMIT 5;
- 结果:返回IT部门工资最高的5名员工。
条件查询与逻辑运算
操作符 | 用途 | 示例 |
---|---|---|
等于 | WHERE age = 30 | |
不等于 | WHERE status != 'inactive' | |
AND | 同时满足 | WHERE city = 'Beijing' AND age > 25 |
OR | 满足其一 | WHERE department = 'HR' OR department = 'Finance' |
LIKE | 模糊匹配 | WHERE name LIKE 'A%' (以A开头) |
IN | 多值匹配 | WHERE country IN ('US', 'UK') |
聚合函数与分组查询
常用聚合函数
COUNT()
:统计行数。SUM()
:求和(数值列)。AVG()
:平均值。MAX()
/MIN()
:最大/最小值。
示例:按部门统计平均工资
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department;
- 结果:每个部门的平均工资。
结合
HAVING
过滤分组结果SELECT category, COUNT() AS item_count FROM products GROUP BY category HAVING COUNT() > 10;
- 作用:仅返回商品数量超过10的类别。
多表关联查询
JOIN类型对比
| JOIN类型 | 描述 |
|———-|——|
|INNER JOIN
| 仅返回匹配的行 |
|LEFT JOIN
| 返回左表所有行,右表无匹配时填充NULL |
|RIGHT JOIN
| 返回右表所有行,左表无匹配时填充NULL |
|FULL JOIN
| 返回左右表所有行,无匹配时填充NULL |示例:查询员工及其部门名称
SELECT e.name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.id;
分页查询(不同数据库实现)
数据库 | 语法示例 |
---|---|
MySQL/PG | LIMIT 10 OFFSET 20 |
SQL Server | SELECT FROM table OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY |
Oracle | SELECT FROM table OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY |
相关问题与解答
问题1:WHERE
和HAVING
的区别是什么?
解答:
WHERE
在分组前过滤行,不能用于聚合函数(如AVG()
)。HAVING
在分组后过滤组,可结合聚合函数使用。
示例:SELECT department, COUNT() AS count FROM employees GROUP BY department HAVING COUNT() > 5; -过滤分组后的结果
问题2:LEFT JOIN
和INNER JOIN
的结果差异是什么?
解答:
INNER JOIN
仅返回两表匹配的行。LEFT JOIN
返回左表所有行,即使右表无匹配(右表字段为NULL)。
示例:
若左表有10条记录,右表匹配8条:INNER JOIN
返回8条。LEFT JOIN
返回10条(含2条右表