查找表中不重复的列
三个范式是什么
首先要明确的是:满足着第三范式,那么就一定满足第二范式、满足着第二范式就一定满足第一范式
第一范式:字段是最小的的单元不可再分
第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而非部分主键。
第三范式:满足第二范式,非主键外的所有字段必须互不依赖
参考链接:juejin.cn/post/684490…
select distinct 列 from 表SQL中所遇到的语句
整体都是
SELECT COLUMN FROM TABLE
明确索要查询得到的结果
Column=各种条件,不同值类型转换,截取,判断
SQL中几个主要的知识点
- 游标(不会)
- 索引(不会)
- 约束(知道)
- 视图(不会)
- 事务处理(不会)
- 存储过程(会一点,能看不会写)
- 数据库安全(不会)
6.什么是存储过程?有哪些优缺点?
数据库中的数据等于是“水”
Selecte语句是“吸管”
那么存储过程就是“抽水管道”
存储过程的优点:
- 存储过程就像我们编程语言中的函数一样,封装了我们的代码。(做好的管子用来取水,比较有针对性。筛出多余和无效的数据)
- 能够将代码封装起来(多次调用,不用重复写)
- 保存在数据库之中(同数据库一起,方便查询修改)
- 让编程语言进行调用(在不同的场景中可以被使用,例如winfrom和网站)
- 存储过程是一个预编译的代码块,执行效率比较高(整体性,效率高)
- 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率(同上)
存储过程的缺点:
- 每个数据库的存储过程语法因为不通用,十分难以维护
- 业务逻辑放在数据库上,难以迭代
4.什么是视图?以及视图的使用场景有哪些?
什么是视图?
视图是一种基于数据表的一种虚表(可以参考数据库中的临时表)
- (1)视图是一种虚表
- (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
- (3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句
- (4)视图向用户提供基表数据的另一种表现形式
- (5)视图没有存储真正的数据,真正的数据还是存储在基表中
- (6)程序员虽然操作的是视图,但最终视图还会转成操作基表
- (7)一个基表可以有0个或多个视图
有的时候,我们可能只关系一张数据表中的某些字段,而另外的一些人只关系同一张数据表的某些字段...
我们应该做到:
他们想要看什么数据,我们就给他们什么数据
一方面就能够让他们只关注自己的数据
另一方面,确保一些保密的数据不会泄露出来
视图就是基于查询的一种虚表,也就是说,视图可以将查询出来的数据进行封装,那么我们在使用的时候就会变得非常方便。
值得注意的是:使用视图专注于逻辑,但不提高查询效率
临时表和视图的区别
存在方式:
临时存在于 服务器内存中
视图 无存在形式
生命周期:
临时表 Sql服务关闭就消失
视图 你不删它就不会消失
用途
临时表 经常作为 中间转接层
视图 作为物理表的窗口
效率
临时表因为在缓存中,所以执行效率比较高{不知道大数据量时如何??}
视图 一般吧?如果是嵌套了别的视图效率可是最低了{希望高手再说说}
在存储过程使用时:
临时表,效率很高{可能是数据量少,再加上临时表是在缓存中,所以执行效率高}
视图 好象一般(听说2005中有索引视图,但听说它缺点不少?
三个范式是什么
- 学生信息组成学生信息表,有年龄、性别、学号等信息组成。这些字段都不可再分,所以它是满足第一范式的
- 其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的
- 学号为1024的同学,姓名为Java3y,年龄是22岁。姓名和年龄字段都依赖着学号主键。
- 就是数据只在一个地方存储,不重复出现在多张表中,可以认为就是消除传递依赖
- 比如,我们大学分了很多系(中文系、英语系、计算机系……),这个系别管理表信息有以下字段组成:系编号,系主任,系简介,系架构。那我们能不能在学生信息表添加系编号,系主任,系简介,系架构字段呢?不行的,因为这样就冗余了,非主键外的字段形成了依赖关系(依赖到学生信息表了)!正确的做法是:学生表就只能增加一个系编号字段。
参考链接:juejin.cn/post/684490…
drop、delete与truncate分别怎么使用?
不同的要求执行
单表删除,用drop
-
清除所有数据,保留表,用truncate
删除部分数据,用delete,并且带上where子句(加条件判断怎么删除)