Lang:简体中文

sql语句面试题汇总

日期:2025-09-08 / 来源:面试宝典

涵盖各类场景的sql面试题解析

在sql面试中,不同类型的题目能考察出求职者对sql不同方面的掌握程度。以下是一些常见类型的sql语句面试题汇总。

基础查询语句

基础查询是sql的基石,这类题目主要考察对select、from、where等基本关键字的使用。例如,有一个学生表(student),包含字段id、name、age、gender,要求查询出年龄大于20岁的男生信息。对应的sql语句为:select * from student where age > 20 and gender = '男'。

再比如,要从商品表(product)中选择价格在50到100之间的商品名称和价格,sql语句是:select name, price from product where price between 50 and 100。

排序与分组

排序和分组操作在实际数据处理中非常常见。排序使用order by关键字,分组使用group by关键字。例如,在员工表(employee)中,包含字段id、name、department、salary,要按照部门分组,统计每个部门的员工数量,并按照员工数量降序排列。sql语句如下:select department, count(*) as employee_count from employee group by department order by employee_count desc。

若要查询每个部门中工资最高的员工信息,可以使用子查询和分组结合的方式。先按部门分组找出每个部门的最高工资,再通过子查询筛选出对应员工信息。

连接查询

连接查询用于从多个表中获取相关数据。常见的连接类型有内连接(inner join)、左连接(left join)、右连接(right join)等。例如,有订单表(orders)和客户表(customers),订单表包含字段order_id、customer_id、order_date,客户表包含字段customer_id、customer_name。要查询每个订单对应的客户名称和订单日期,使用内连接的sql语句为:select customers.customer_name, orders.order_date from orders inner join customers on orders.customer_id = customers.customer_id。

左连接会返回左表中的所有记录以及右表中匹配的记录,若右表中没有匹配项则用null填充。例如,要查询所有客户的信息以及他们的订单信息(即使客户没有订单),可以使用左连接:select customers.*, orders.* from customers left join orders on customers.customer_id = orders.customer_id。

函数使用

sql提供了丰富的函数,如聚合函数(sum、avg、count等)、字符串函数(substring、concat等)、日期函数(date_format、datediff等)。例如,在销售表(sales)中,包含字段product_id、quantity、price,要计算每种产品的销售总额,使用sum函数:select product_id, sum(quantity * price) as total_sales from sales group by product_id。

若要从日期字段中提取年份,可以使用date_format函数。假设日期字段为order_date,提取年份的sql语句是:select date_format(order_date, '%y') as order_year from orders。

高级操作

高级操作包括子查询、视图、存储过程等。子查询可以嵌套在其他查询中,用于提供更复杂的查询条件。例如,要查询工资高于平均工资的员工信息,可以使用子查询:select * from employee where salary > (select avg(salary) from employee)。

视图是虚拟表,它基于sql查询结果。创建视图可以简化复杂的查询。例如,创建一个包含每个部门平均工资的视图:create view department_avg_salary as select department, avg(salary) as avg_salary from employee group by department。

存储过程是一组预编译的sql语句,可重复使用。例如,创建一个存储过程来插入新的员工记录:delimiter // create procedure insert_employee(in p_name varchar(50), in p_department varchar(50), in p_salary decimal(10, 2)) begin insert into employee(name, department, salary) values(p_name, p_department, p_salary); end // delimiter ;

以下为推荐内容

微信二维码