内容简介

本文介绍并分析了 100 道常见 SQL 面试题,主要分为三个模块:SQL 初级查询、SQL 高级查询以及数据库设计与开发。文章内容结构如下图所示:

本文主要使用三个示例表:员工表(employee)、部门表(department)和职位表(job)。下面是这些示例表的结构图:

部门表(department),包含部门编号(dept_id)和部门名称(dept_name)字段,主键为部门编号。

职位表(job),包含职位编号(job_id)和职位名称(job_title)字段,主键为职位编号。

员工表(employee),包含员工编号(emp_id)、员工姓名(emp_name)、性别(sex)、部门编号(dept_id)、经理编号(manager)、入职日期(hire_date)、职位编号(job_id)、月薪(salary)、奖金(bonus)以及电子邮箱(email)。主键为员工编号,部门编号字段是引用部门表的外键,职位编号字段是引用职位表的外键,经理编号字段是引用员工表自身的外键。

创建示例表和初始化数据的脚本可以从 GitHub 上进行下载。

所有示例都可以在 Oracle 12c 和 MySQL 8.0 中通用,除非另有说明。

SQL 初级查询

1. 什么是 SQL?SQL 有哪些功能?

答案:SQL 代表结构化查询语言,它是访问关系数据库的通用语言,支持数据的各种增删改查操作。SQL 语句可以分为以下子类:

DQL,数据查询语言。这个就是 SELECT 语句,用于查询数据库中的数据和信息。

DML,数据操作语言。包括 INSERT、UPDATE、DELETE 和 MERGE 语句,主要用于数据的增加、修改和删除。

DDL,数据定义语言。主要包括 CREATE、ALTER 和 DROP 语句,用于定义数据库中的对象,例如表和索引。

TCL,事务控制语言;主要包括 COMMIT、ROLLBACK 和 SAVEPOINT 语句,用于管理数据库的事务。

DCL,数据控制语言。主要包括 GRANT 和 REVOKE 语句,用于控制对象的访问权限。

解析:SQL 是一种声明性的编程语言,只需要告诉计算机想要什么内容(what),不需要指定具体怎么实现(how)。通过几个简单的英文单词,例如 SELECT、INSERT、UPDATE、CREATE、DROP 等,就可以完成大部分的数据操作。

2. 如何查看员工表中的姓名和性别?

答案:

SELECT emp_name, sex FROM employee;

解析:SQL 使用 SELECT 和 FROM 查询表中的字段,多个字段使用逗号分隔。

3. 如何查看员工表中的所有字段?

答案:

SELECT * FROM employee;

或者:

SELECT emp_id, emp_name, sex, dept_id, manager, hire_date, job_id, salary, bonus, email

FROM employee;

解析:SQL 查询中的星号(*)表示查询所有字段,可以方便快速查询数据;但是在产品中不推荐使用,因为星号可能带来不确定性。

4. 如何知道每个员工一年的总收入?

答案:

SELECT emp_name, salary * 12 + COALESCE(bonus, 0)

FROM employee;

解析:查询结果中可以使用各种运算、函数以及表达式。COALESCE 函数用于将空值转换为 0。

5. 如何为查询结果指定一个容易理解标题?

答案:

SELECT emp_name AS "姓名", salary * 12 + COALESCE(bonus, 0) "年薪"

FROM employee;

解析:SQL 中的别名可以为查询中的表或结果指定一个临时名称。别名使用关键字 AS 表示,可以省略。

6. 怎么查看女性员工的信息?

答案:

SELECT *

FROM employee

WHERE sex = '女';

解析:SQL 中使用 WHERE 子句指定过滤条件,只有满足条件的数据才会返回。除了等于(=),还可以使用大于(>)、大于等于(>=)、小于()这些比较运算符作为过滤条件。

7. 如何查看月薪范围位于 8000 到 12000 之间的员工?

答案:

SELECT *

FROM employee

WHERE salary BETWEEN 8000 AND 12000;

解析:BETWEEN 用于查找范围值,包含两端的值。

8. 确认员工中有没有叫做“张三”、“李四” 或“张飞”的人,有的话查出他们的信息。

答案:

SELECT *

FROM employee

WHERE emp_name IN ('张三', '李四', '张飞');

解析:IN 用于查找列表中的任意值。

9. 只知道某个员工的姓名里有个“云”字,但不知道具体名字,怎么样查看有哪些这样的员工?

答案:

SELECT *

FROM employee

WHERE emp_name LIKE '%云%';

解析:SQL 中的 LIKE 运算符用于字符串的模式匹配。LIKE 支持两个通配符:% 匹配任意多个字符,_ 匹配单个字符。Oracle 区分大小写,MySQL 不区分大小写。

10. 有些员工有奖金(bonus),另一些没有。怎么查看哪些员工有奖金?

答案:

SELECT emp_name,

bonus

FROM employee

WHERE bonus IS NOT NULL;

解析:SQL 中的 NULL 表示空值,意味着缺失或者未知数据。判断空值不能直接使用等于或不等于,而需要使用特殊的 IS NULL 和 IS NOT NULL。

11. 在前面我们知道了如何查询女员工,如何查看 2010 年 1 月 1 日之后入职的女员工呢?

答案:

SELECT emp_name, sex, hire_date

FROM employee

WHERE sex = '女'

AND hire_date > DATE '2010-01-01';

解析:AND、OR 和 NOT 表示逻辑与、逻辑或和逻辑非,可以用于构造复杂的查询条件。

12. 以下查询会不会出错,为什么?

SELECT *

FROM employee

WHERE 1 = 0 AND 1/0 = 1;

答案:不会出错,但是查不到任何数据。

解析:因为 SQL 对于逻辑运算符 AND 和 OR 使用短路运算(short-circuit evaluation)。也就是说,只要前面的表达式能够决定最终的结果,不执行后面的计算。

13. 如何去除查询结果中的重复记录,比返回如员工性别的不同取值?

mysql查找表中员工姓名性别_SQL 常见面试题解析相关推荐

  1. #MySQL#查找表中重复条目、删除重复条目

    -- 查找重复条目 SELECT ID,COUNT(ID) FROM IDrecord GROUP BY ID HAVING COUNT(ID) > 1-- 删除重复条目 DELETE FROM ...

  2. mysql 找表重复数据,mysql 数据表中查找重复记录

    mysql 数据表中查找重复记录 复制代码 代码如下: select user_name,count(*) as count from user_table group by user_name ha ...

  3. MySQL数据表中的数据单表查询

    SELECT语句 使用SELECT语句进行对数据表查询:语法格式为: SELECT [ALL | DISTINCT] * | 列名1 [,列名2,-,列名N] FROM 表名 [ WHERE 条件表达 ...

  4. mysql高效查出重复的手机号_Mysql必读MySQL大表中重复字段的高效率查询方法

    <MysqL必读MysqL大表中重复字段的高效率查询方法>要点: 本文介绍了MysqL必读MysqL大表中重复字段的高效率查询方法,希望对您有用.如果有疑问,可以联系我们.MysqL大表重 ...

  5. mysql根据id删除数据库,MYSQL删除表中的指定ID数据

    MYSQL删除表中的指定ID数据 删除A表中的ID 中的开头以B* 的数据库. 复制代码 代码如下: delete FROM A WHERE id like 'B%' 单独删除 A 表中的ID B 复 ...

  6. opencv cv2.LUT()(使用查找表中的值填充输出数组)

    from cv2.__init__.py def LUT(src, lut, dst=None): # real signature unknown; restored from __doc__&qu ...

  7. 如何更新mysql数据库字段_如何使用MySQL一个表中的字段更新另一个表中字段

    1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多个列 update ...

  8. mysql数据表中取几列_MySQL实现表中取出随机数据

    MySQL是开放源代码,MySQL因为其速度.可靠性和适应性而备受关注.大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择. 那么如何在MySQL实现表中取出随机数据呢? SEL ...

  9. python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...

    本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...

最新文章

  1. 2021年大数据常用语言Scala(十五):基础语法学习 元组  重点掌握
  2. c语言计算坐标三角形面积公式,c语言计算三角形面积代码
  3. 《Python深度学习》第四章的实验结果图汇总
  4. 我看中国软件---技术篇
  5. 如何识别一个人是web前端程序员
  6. sudo apt-get update 与upgrade的用法
  7. docker 进入停止的容器_在Docker中运行一个Ubuntu镜像
  8. Git ignore UserInterfaceState.xcuserstate
  9. 入门排序(冒泡、选择、直接)
  10. 【申博攻略】三.北交计算机学院学术型博士“申请-考核”攻略(经验分享篇)
  11. js 弹窗中写html代码,简单了解JavaScript弹窗实现代码
  12. 555555555 5555555555 55 55555555
  13. ffmpeg ts与mp4互相转换
  14. SDHC卡写单块和读单块
  15. 胡昊—第8次作业--继承
  16. DBeaver 驱动安装
  17. SpringEL 表达式语言(Spring Expression Language)
  18. 矩阵的Jordan分解实例
  19. split()方法,limit参数作用
  20. 淘宝客推广五大实战技巧

热门文章

  1. 量化为技艺,策略为根本,相辅相成,运用之妙,存乎一心
  2. 操作系统学习笔记——北京大学陈向群老师课后及习题答案(7)
  3. 【UML】-- 用例图练习题含答案(订餐系统、远程网络教学系统、交互式网络系统)
  4. 雨量预警广播自动化数据平台BWII 型广播预警监测仪
  5. Jquery--02--案例
  6. 云端竞逐┃2020“智创未来•精彩平度”创新创业大赛深圳赛区鸣锣开赛
  7. Java中整数常量池的概念
  8. MySQL学习笔记-B站动力节点
  9. MATLAB求解方程和多元方程组
  10. 数字电子技术实验作业(9)