如何查看员工表中的所有字段?
如何查看员工表中的姓名和性别?
如何知道每个员工一年的总收入?
怎么查看女员工的信息?
如何查看月薪范围位于 8000 到 12000 之间的员工?
查询员工中叫做“张三”、“李四” 或“张飞”的信息。
查询员工的姓名里有个“云”字的员工信息?
有些员工有奖金(bonus),另一些没有。怎么查看哪些员工有奖金?
如何查看 2010 年 1 月 1 日之后入职的女员工呢?
查看员工信息的时候,按照薪水从高到低显示?
薪水一样多的员工,希望再按照奖金的多少进行排序?
薪水最高的 3 位员工都有谁
如何统计员工的数量、平均月薪、最高月薪、最低月薪以及月薪的总和?
统计每个部门的员工的数量、平均月薪?
如果只想查看平均月薪大于 10000 的部门,怎么实现? 通过内连接查询员工名称及其所在的部门名称
什么是数据库规范化,有哪些常见的数据库范式?
答案:数据库规范化是一种数据库设计的方法,用于有效地组织数据,减少数据的冗余和相互之间的依赖,增加数据的一致性。由于非规范化的数据库存在冗余,可能导致数据的插入、删除、修改异常等问题,因此引入了规范化过程。
数据库规范化的程度被称为范式(Normal Form),目前已经存在第一范式到第六范式,每个范式都是基于前面范式的增强。
- 第一范式(First Normal Form),表中的每个属性都是单值属性,每个记录都唯一,也就是需要主键。举例来说,如果员工存在工作邮箱和个人邮箱,不能都放到一个字段,而需要拆分成两个字段;
- 第二范式(Second Normal Form),首先需要满足第一范式,且不包含任何部分依赖关系。举例来说,如果将学生信息和选课信息放在一起,学号和课程编号可以作为复合主键;但此时学生的其他信息依赖于学号,即主键的一部分。通常使用单列主键可以解决部分依赖问题;
- 第三范式(Third Normal Form),首先需要满足第二范式,并且不存在传递依赖关系。举例来说,如果将部门信息存储在每个员工记录的后面,那么部门名称依赖部门编号,部门编号又依赖员工编号,这就是传递依赖。解决的方法就是将部门信息单独存储到一个表中;
- 更高的范式包括 Boyce-Codd 范式、第四范式、第五范式以及第六范式等,不过很少使用到这些高级范式。对于大多数系统而言,满足第三范式即可。
另外,反规范化(Denormalization)是在完成规范化之后执行的相反过程。反规范化通过增加冗余信息,减少 SQL 连接查询的次数,从而减少磁盘 IO 来提高查询时的性能。但是反规范化会导致数据的重复,需要更多的磁盘空间,并且增加了数据维护的复杂性。
数据库的设计是一个复杂的权衡过程,需要综合考虑各方面的因素