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

本文详细介绍了数据库的基础知识,包括关系型数据库ORDBMS(如Oracle、MySQL)和非关系型数据库NoSQL(如MongoDB、Redis)的特点。深入讲解了SQL语句的四大类别:DDL、DML、DCL和事务控制,并阐述了排序(ORDER BY)、分组(GROUP BY)以及伪列(ROWID、ROWNUM)的使用方法。此外,还涵盖了数据库约束(主键、唯一、默认、检查、外键、非空)和Oracle中的序列。最后,讨论了表联查的不同类型以及DELETE、TRUNCATE、DROP的区别,以及WHERE和HAVING子句的应用。通过实例和实践,帮助读者掌握SQL操作并提升数据库管理技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

在这里插入图片描述

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吧,加油。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员小小刘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值