SQL面试题及答案

SQL是结构化查询语言,用于数据库管理。它包括DDL(创建表)、DML(插入数据)、DCL和TCL。创建表格使用`CREATETABLE`语句,插入数据用`INSERTINTO`。选择特定表格和数据行涉及`SELECT`和`WHERE`子句。`JOIN`用于多表操作,`GROUPBY`和`HAVING`用于数据分组和过滤,`ORDERBY`和`LIMIT`用于排序和限制结果数。视图是虚拟表格,`UNION`合并查询结果,`DISTINCT`去除重复行。

问题

  1. 什么是SQL? SQL分为哪几种类型?

  1. 如何创建表格? 如何在表格中插入数据?

  1. 如何选择一个特定的表格? 如何使用“Where”子句选择特定的数据行?

  1. 如何同时选择多个表格? 如何进行表格连接?

  1. 如何使用“Group By”合并数据? 如何使用“Having”筛选分组数据?

  1. 如何使用“Order By”对数据进行排序? 如何将结果中的前几条数据筛选出来?

  1. 什么是视图? 如何创建并使用视图?

  1. 什么是子查询? 如何使用子查询?

  1. 如何使用“Union”操作符合并两个查询的结果?

  1. 如何使用“Distinct”关键字去除重复数据行?

答案

  1. SQL是结构化查询语言的缩写。它有四种类型:Data Definition Language(DDL,数据定义语言),Data Manipulation Language(DML,数据操作语言),Data Control Language(DCL,数据控制语言)和Transaction Control Language(TCL,事务控制语言)。

  1. 要创建表,您可以使用“Create Table”语句。例如:CREATE TABLE employees (id INT, name VARCHAR(50), age INT, salary INT); 要在表中插入数据,您可以使用如下的语句:INSERT INTO employees (id, name, age, salary) VALUES (1, 'John Smith', 25, 50000);

  1. 要选择一个特定的表,您可以使用“Select”语句。例如:SELECT * FROM employees; 要使用“Where”子句选择特定的数据行,您可以使用如下的语句:SELECT * FROM employees WHERE age > 30;

  1. 要同时选择多个表,您可以使用“Join”操作符。例如:SELECT employees.name, departments.department_name FROM employees JOIN departments ON employees.department_id = departments.id;

  1. 要使用“Group By”合并数据,您可以使用如下的语句:SELECT department_id, COUNT() FROM employees GROUP BY department_id; 要使用“Having”筛选分组数据,您可以使用如下的语句:SELECT department_id, COUNT() FROM employees GROUP BY department_id HAVING COUNT(*) > 10;

  1. 要使用“Order By”对数据进行排序,您可以使用如下的语句:SELECT * FROM employees ORDER BY salary DESC; 要将结果中的前几条数据筛选出来,您可以使用“Limit”子句。例如:SELECT * FROM employees ORDER BY salary DESC LIMIT 10;

  1. 视图是一种虚拟的表格,其内容是根据查询定义的。可以使用“Create View”语句创建视图。例如:CREATE VIEW employee_details AS SELECT employees.name, employees.age, departments.department_name FROM employees JOIN departments ON employees.department_id = departments.id; 要使用视图,只需要使用其名称来替代基本表的名称即可。例如:SELECT * FROM employee_details;

  1. 子查询是一种嵌套查询,可以在主查询中使用。例如:SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE department_name = 'Sales');

  1. 使用“Union”操作符合并两个查询的结果,例如:SELECT name, age FROM employees UNION SELECT name, age FROM customers;

  1. 使用“Distinct”关键字去除重复数据行,例如:SELECT DISTINCT department_id FROM employees;

希望这一些基本的SQL技术问题的答案能对您的面试有所帮助。

以下是一些常见的 SQL 面试题答案: ### 统计每天的胜负数量 需求:统计`info`表中每天的胜负数量。 答案: ```sql -- 方法一 select date, sum(case when result = "win" then 1 else 0 end) as "win", sum(case when result = "lose" then 1 else 0 end) as "lose" from info group by date; -- 方法二 select a.date, a.result as win, b.result as lose from (select date, count(result) as result from info where result = "win" group by date) as a join (select date, count(result) as result from info where result = "lose" group by date) as b on a.date = b.date; ``` ### 列值比较选择 需求:表中有`A`、`B`、`C`三列,当`A`列大于`B`列时选择`A`列否则选择`B`列,当`B`列大于`C`列时选择`B`列否则选择`C`列。 答案: ```sql select (case when a > b then a else b end), (case when b > c then b else c end) from table; ``` ### 查询当天记录 需求:取出`tb_send`表中日期(`SendTime`字段)为当天的所有记录(`SendTime`字段为`datetime`型,包含日期与时间)。 答案: ```sql select * from tb where datediff(dd,SendTime,getdate())=0 ``` ### 多表连接查询高分记录 需求:查询成绩大于 70 分的学生信息及课程信息。 答案: ```sql select distinct s.sid,s.sname,sc.cid,sc.score from sc left join student s on sc.sid = s.sid left join course c on sc.cid = c.cid where sc.score>70; ``` ### SQL 方言 需求:请列举 SQL 的不同版本。 答案SQL 包括多种免费或付费的版本,这些不同的版本都被称为 SQL 方言。如 Microsoft SQL Server、PostgreSQL、MySQLSQLite、T-SQL、Oracle 等 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dumpling90

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值