📜  SQL面试问题(1)

📅  最后修改于: 2023-12-03 15:05:21.092000             🧑  作者: Mango

SQL 面试问题

在进行 SQL 面试时,通常会被问到一些基础知识和技巧,以及一些高级问题和挑战题。下面是一些常见的 SQL 面试问题及其答案。

基础问题
1. 什么是 SQL?

SQL (Structured Query Language)是一种用于管理关系型数据库的计算机语言。它提供了一种结构化的方法来存储、操纵和检索数据。

2. 常见的 SQL 命令有哪些?

常见的 SQL 命令包括 SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER 和 DROP 等。

3. SELECT 语句的作用是什么?

SELECT 语句用于从关系型数据库中检索数据。通过 SELECT 语句,可以指定需要检索的列、表、条件和顺序。

4. 如何在 SQL 中创建表?

使用 CREATE TABLE 命令可以在 SQL 中创建表。例如,下面的命令用于创建一个名为 employees 的表:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    email VARCHAR(50)
);
5. 如何在 SQL 中插入数据?

使用 INSERT INTO 命令可以在 SQL 中插入数据。例如,下面的命令用于向 employees 表中插入一条数据:

INSERT INTO employees (id, name, age, email)
VALUES (1, 'Tom', 30, 'tom@email.com');
高级问题
1. 如何进行连接查询?

连接查询可以将多个表中的数据通过某些列上的相等关系连接起来,以获得更多的信息。在 SQL 中进行连接查询通常使用 JOIN 语句。例如,下面的命令使用 INNER JOIN 进行连接查询:

SELECT *
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
2. 如何使用子查询?

子查询可以嵌套在其他查询语句中,以实现更复杂的查询需求。在 SQL 中使用子查询通常使用 SELECT 子句或 FROM 子句。例如,下面的命令使用子查询查询出比所有其他员工薪资高的经理:

SELECT *
FROM employees
WHERE salary > (
    SELECT MAX(salary)
    FROM employees
    WHERE job_title = 'Manager'
);
3. 如何使用窗口函数?

窗口函数可以在 SQL 中对查询结果进行分组、排序、排名等操作。在 SQL 中使用窗口函数通常使用 OVER 子句。例如,下面的命令使用窗口函数查询出每个部门中薪资排名前三的员工:

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
    FROM employees
) ranked
WHERE rank <= 3;
挑战问题
1. 如何计算平均运行时间?

假设有一个包含运动员 ID、项目、时间的表格 results,如何计算每个项目的平均运行时间?

SELECT project, AVG(time) AS avg_time
FROM results
GROUP BY project;
2. 如何查询出连续签到天数最长的用户?

假设有一个包含用户 ID、签到日期的表格 checkins,如何查询出连续签到天数最长的用户?

SELECT id, MAX(consecutive_days) AS max_days
FROM (
    SELECT id, date, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date) AS rn,
           DATEDIFF(date, LAG(date) OVER (PARTITION BY id ORDER BY date)) AS diff
    FROM checkins
) t
GROUP BY id
HAVING COUNT(*) = MAX(consecutive_days) + 1;