SQL(Structured Query Language)是数据库管理中不可或缺的一部分,因此在技术面试中经常会被问到与 SQL 相关的问题。以下是一些常见的 SQL 面试题及其答案。
基础概念
-  什么是 SQL? - SQL 是一种用于管理和处理关系型数据库的标准语言。它用于查询、更新、插入和删除数据库记录。
 
-  SQL 的主要命令类型有哪些? - DDL(Data Definition Language):用于定义数据库结构,如 CREATE,ALTER,DROP。
- DML(Data Manipulation Language):用于操作数据库中的数据,如 SELECT,INSERT,UPDATE,DELETE。
- DCL(Data Control Language):用于控制权限和访问,如 GRANT,REVOKE。
- TCL(Transaction Control Language):用于管理事务,如 COMMIT,ROLLBACK,SAVEPOINT。
 
- DDL(Data Definition Language):用于定义数据库结构,如 
-  什么是主键和外键? - 主键(Primary Key):唯一标识表中每一行的字段,不允许为空且必须唯一。
- 外键(Foreign Key):用于建立和加强两个表数据之间的链接,通常引用另一个表的主键。
 
常见查询
-  如何查询表中的所有记录? SELECT * FROM table_name;
-  如何查询表中的特定列? SELECT column1, column2 FROM table_name;
-  如何对查询结果进行排序? SELECT * FROM table_name ORDER BY column1 ASC; -- 升序 SELECT * FROM table_name ORDER BY column1 DESC; -- 降序
-  如何使用条件查询? SELECT * FROM table_name WHERE condition;
-  如何使用 LIKE进行模糊查询?SELECT * FROM table_name WHERE column LIKE '%pattern%';
聚合函数
-  常见的聚合函数有哪些? - COUNT(): 计算行数。
- SUM(): 计算总和。
- AVG(): 计算平均值。
- MAX(): 返回最大值。
- MIN(): 返回最小值。
 
-  如何使用 GROUP BY和HAVING?SELECT department, COUNT(*) AS num_employees FROM employees GROUP BY department HAVING COUNT(*) > 5;
子查询
-  什么是子查询? - 子查询是在另一个查询语句内部的查询语句。子查询可以嵌套在 SELECT,INSERT,UPDATE,DELETE语句中。
 
- 子查询是在另一个查询语句内部的查询语句。子查询可以嵌套在 
-  如何使用子查询? SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
连接(JOIN)
-  常见的连接类型有哪些? - 内连接(INNER JOIN):返回两个表中匹配的记录。
- 左连接(LEFT JOIN):返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,则返回 NULL。
- 右连接(RIGHT JOIN):返回右表中的所有记录,以及左表中匹配的记录。如果左表中没有匹配的记录,则返回 NULL。
- 全连接(FULL JOIN):返回两个表中的所有记录,如果没有匹配的记录,则返回 NULL。
 
-  如何使用 INNER JOIN? SELECT * FROM employees INNER JOIN departments ON employees.department_id = departments.department_id;
-  如何使用 LEFT JOIN? SELECT * FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;
索引
-  什么是索引? - 索引是一种数据库结构,用于加快数据检索的速度。索引可以基于一个或多个列创建。
 
-  如何创建索引? CREATE INDEX index_name ON table_name (column1, column2);
事务
-  什么是事务? - 事务是一组 SQL 语句,作为一个整体一起执行。事务具有 ACID 特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
 
-  如何使用事务? BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; COMMIT;
视图
-  什么是视图? - 视图是一个虚拟表,其内容由查询定义。视图可以简化复杂的查询,提高数据的安全性。
 
-  如何创建视图? CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE condition;
高级查询
-  如何使用 UNION合并查询结果?SELECT column1 FROM table1 UNION SELECT column1 FROM table2;
-  如何使用 CASE语句进行条件判断?SELECT column1, CASE WHEN column2 > 10 THEN 'High' WHEN column2 <= 10 THEN 'Low' ELSE 'Unknown' END AS status FROM table_name;
示例问题
-  如何查询每个部门的员工数量? SELECT department, COUNT(*) AS num_employees FROM employees GROUP BY department;
-  如何查询工资最高的前 5 名员工? SELECT * FROM employees ORDER BY salary DESC LIMIT 5;
-  如何查询每个部门的平均工资? SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department;










