SQL 操作中遇到的操作语句

245 阅读5分钟
查找表中不重复的列

select distinct 列 from  表


SQL中所遇到的语句

整体都是

SELECT COLUMN FROM TABLE

明确索要查询得到的结果

Column=各种条件,不同值类型转换,截取,判断


SQL中几个主要的知识点

  1. 游标(不会)
  2. 索引(不会)
  3. 约束(知道)
  4. 视图(不会)
  5. 事务处理(不会)
  6. 存储过程(会一点,能看不会写)
  7. 数据库安全(不会)



6.什么是存储过程?有哪些优缺点?

数据库中的数据等于是“水”

Selecte语句是“吸管”

那么存储过程就是“抽水管道”

存储过程的优点:

  1. 存储过程就像我们编程语言中的函数一样,封装了我们的代码。(做好的管子用来取水,比较有针对性。筛出多余和无效的数据)
  2. 能够将代码封装起来(多次调用,不用重复写)
  3. 保存在数据库之中(同数据库一起,方便查询修改)
  4. 让编程语言进行调用(在不同的场景中可以被使用,例如winfrom和网站)
  5. 存储过程是一个预编译的代码块,执行效率比较高(整体性,效率高)
  6. 一个存储过程替代大量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子句(加条件判断怎么删除)