2021-09数据库的面试题(自我总结)

金九银十的机会好好把握,找一个高薪工资,冲冲冲

在这里插入图片描述

1:数据库的分类
关系型数据库ORDBMS:(oracle、MySQL、SqlServer等)
特点:二维表存储,使用sql语言操作,有事务可以控制数据操作的完整性可以复杂的联查
非关系型数据库nosql:(MongoDB、redis等)
特点:键值对或json存储,弱事务或无事务操作数据效率更高可以用于充当缓存

2:SQL语句分为哪几种?
SQL语句主要可以划分为以下几类:

DDL(DataDefinitionLanguage):数据定义语言,定义对数据库对象(库、表、列、索引)的操作。
  包括:CREATE、DROP、ALTER、RENAME、TRUNCATE等
  DML(DataManipulationLanguage):数据操作语言,定义对数据库记录的操作。
  包括:INSERT、DELETE、UPDATE、SELECT等
  DCL(DataControlLanguage):数据控制语言,定义对数据库、表、字段、用户的访问权限和安全级别。
  包括:GRANT、REVOKE等
  TransactionControl:事务控制
  包括:COMMIT、ROLLBACK、SAVEPOINT等

3:排序
 
关键字:orderby
  使用方法:select*from表名orderby字段排序方式
  Orderby都写在查询语句的最后,如果不加排序方式,默认升序,多个字段排序用逗号分隔

4:分组

关键字:groupby
  使用方法:select*from表名where条件groupby字段orderby字段排序方式
  注意:使用groupby查询时,查询字段只能是分组字段或聚合函数,当查询的条件为非聚合函数时,可以在groupby之前使用where条件判断,如果查询条件为聚合函数,必须在groupby之后使用having进行条件判断,having是在分组之后执行的查询条件,having后跟的查询条件必须是聚合函数或者分组字段。
  groupby多个字段分组,使用逗号分隔,只有分组字段完全相同时,才会正常分租,否则数据全部显示。

5:伪列
Rowid:唯一的物理地址用rowid作为条件查询可以提升查询效率。
  Rownum:查询结果的序号可以用于条件查询,不能用于修改和删除
  (1)id,Rowid,Rownum的区别?
  rowid物理位置的唯一标识。
  而id是逻辑上的唯一标识,所以rowid查找速度要快于id,是目前最快的
  定位一条记录的方式
  rowid和rownum都是"伪数列"
  所谓“伪数列”也就是默认隐藏的一个数列。
  rownum用于标记结果集中结果顺序的一个字段,
  它的特点是按顺序标记,而且是连续的,
  换句话说就是只有有rownum=1的记录,才可能有rownum=2的记录。
  rownum关键字只能和<或者<=直接关联
  如果是>或者=则需要给他0起个别名

6:约束
1.主键约束(PrimayKeyCoustraint)唯一性,非空性;
  altertable表名addconstraint主键名称primarykey(字段名)
  注意:主键字段不能重复(唯一的),不可以为空
  一般使用id作为一张表的主键,主键在创建时,会生成一个索引。
  2.唯一约束(UniqueCounstraint)唯一性,可以空,但只能有一个;
  Altertableaddconstraint约束名unique(字段名)
  3.默认约束(DefaultCounstraint)该数据的默认值;
  4.检查约束(CheckCounstraint)对该列数据的范围、格式的限制(如:年龄、性别等
  Altertable表名addconstraint约束名check(字段名条件)
  5.外键约束(ForeignKeyCounstraint)需要建立两表间的关系;
  Altertable表名addconstraint约束名foreignkey(主表字段名)references外键到的表名(字段名)
  6.非空约束(NotNullCounstraint):设置非空约束,该字段不能为空。
  altertable表名modify字段名[notnull非空|null允许为空]
  注意:该字段存储的数据不能为空,但是可以重复。

7:序列(oracle)
oracle中,是通过使用序列(sequence)来处理自动增长列。
  (1)可以为表中的列自动产生值。
  (2)由用户创建数据库对象,并可由多个用户共享。
  (3)一般用于主键或唯一列。
  (4)可以生成唯一标识
  创建序列基本语法:
  createsequence序列名称
  startwith开始数字
  incrementby增长数字
  minvalue最小值
  maxvalue最大值
  cycle
  nocache
  详细说明:
  startwith开始数字从几开始
  incrementby增长步长,每次增长几个数
  minvalue最小值
  maxvalue最大值可以不设置,不设置应写为nomaxvalue,也就是无穷大
  cycle循环,也就是说当长增长到最大值后,再从最小值开始重新增长
  nocache不设缓存
  序列的使用
  序列当前值:序列名.currval
  根据增量获取序列下一个值:序列名.nextval

8:表联查
根据两张或两张以上表之间的关联关系,进行多张表的同时展示。
  内连接(innerjoin):只会显示两张表中关联字段均不为空的数据
  左连接(leftjoin):会显示连接左侧表的所有数据(左侧表为主表)
  右连接(rightjoin):会显示连接右侧表的所有数据(右侧表为主表)
  全连接(fulljoin):会将两张表所有的数据全部显示
  
9:Delete、truncate、drop都是删除语句,它们有什么区别?
elete属于DML语句,删除数据,保留表结构,需要commit,可以回滚,如果数据量大,很慢。
  truncate属于DDL语句,删除所有数据,保留表结构,自动commit,不可以回滚,一次全部删除所有数据,速度相对较快。
  Drop属于DDL语句,删除数据和表结构,不需要commit,删除速度最快。

10:Where和having都是条件筛选关键字,它们有什么分别?

WHERE是在数据分组前进行条件过滤,HAVING子句是在数据分组后进行条件过滤,WHERE子句中不能使用聚合函数,HAVING子句可以使用聚合函数。

总结

在公司的工作中,可以写sql语句就可以满足工作上的90%的需求了,所以说大家还是多练习下sql吧,加油。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_55604133/article/details/120046427