数据库 *** 作查询作用是什么

数据库 *** 作查询作用是什么,第1张

数据库是用来存储数据的, 查询就是按照你需要的条件找到你需要的数据

比如数据库中有一张students表

id, name, email, age

1,张三,zhangsan@163com, 18

2,李四,lisi@gmailcom,19

3,王五,wangwu@hotmailcom,15

如果你需要找出年龄大于15的,可以用如下语句查询:

select from students where age>15

15-18之间

select   from 表名 where len(身份z号) between 15 and 18

15以下

select   from 表名 where len(身份z号) <15

18以上

select   from 表名 where len(身份z号) >18

在Oracle数据库中,可以利用Create Table语句中嵌套子查询来实现基于已有的表或者视图来创建新表。这个功能可能对于大部分用户来说,不会感到陌生。但是在使用这个语句的过程中,需要遵循哪些限制条件呢对于这一点,可能不少数据库管理员没有一个清晰的认识。

为此,笔者就在这里给大家总结一下,利用查询来创建表时需要遵守的一些限制。

限制条件一:不能够改变数据类型与长度。

在利用子查询来创建新表的时候,数据库管理员可以修改新表中列的名称,但是不能够修改列的数据类型和长度。新表中所有列的数据类型和长度必须与查询列一致。

如数据库管理员从一个员工信息表中获取员工姓名、员工出生日期等信息创建一个新表。如果在员工信息表中员工出生日期是一个日期型的字段,那么在新表中就必须也是日期型的数据类型。在创建新表的过程中,数据库管理员不能够修改数据类型。

那么如果系统管理员需要更改数据类型,如想把日期型的数据调整为字符型的数据,难道就没有其他办法了吗其实,通过一些其他方法,这个需求仍然可以实现。

上面的限制条件说,新表中的数据类型必须与查询列中的数据类型相同,而不是说跟基表中的数据类型相同。为此如果数据库管理员想要把日期型的数据(基表中的数据类型)调整为字符型的数据类型(新表中的数据类型),那么只需要在查询语句中,利用日期字符转换函数,将日期型的数据转换为字符型的数据即可。

在创建新表时,数据类型是以查询列为准,而不是以基表中列的数据类型为准。所以通过在查询语句中使用数据类型转换函数,就可以改变新表中的数据类型。

限制条件二:不能够复制约束条件与列的默认值。

在基表中,可能某些字段有约束条件,如唯一性约束等等。

某些字段也可能设置了默认值,如系统的当前时间等等。但是,如果利用子查询来创建信标的话,那么这些字段的约束条件、默认值等等都不会在新表中体现出来。也就是说,这些内容需要数据库管理员在新表创建后手工重新建立。如果有需要的话,要对照基表的约束条件与默认值,分别在新表的字段中进行定义。

这个没有取巧的方法。至少到限制为止,笔者还没有找到可以利用其他方法来突破这个限制。为此数据库管理员在利用子查询来创建这个新表的时候,要特别注意这个约束条件。特别是默认值,不少管理员在利用这个方法创建新表后,会忘记重新设置相关列的默认值。

限制条件三:不能够为新表指定表空间。

在正常情况下,利用Create创建表的时候,数据库管理员可以为表指定其所属的表空间。如果不指定的话,则其默认情况下采用的是当前用户的默认表空间。但是在使用查询来创建新表的时候,在语句中不能够为新表指定表空间。如使用TableSpace关键字为其指定表空间的话,则系统会提示错误信息:SQL命令未正确结束。

注意这并不是说这个SQL语句哪里有问题,而是指不能够在这种方式下为新表指定表空间。从这里也可以看出,Oracle数据库系统的错误提示还是有模棱两可的地方,还需要改进,即错误信息要能够反映出真实的问题所在。因为不能够为新表指定表空间,此时其所属的表空间就是执行这条语句的用户的默认表空间。

那么数据库管理员就可以通过采用不同的用户来为新表指定所属的表空间。如现在数据库管理员要想把这个新表放置在sales表空间下。那么就可以新建一个用户或者利用原有的用户,先把这个用户的默认表空间设置为sales。然后再利用这个用户来执行这条语句(必要的时候可能需要调整这个用户的权限)。

通过这种方式就可以控制这种形式创建新表所属的表空间。俗话说,条条道路通罗马。既然不能够利用直接的方式来为这新表设定表空间,那么就只能够采取这曲线救国的方法了。只要最终能够达到预计的目的就好。

限制条件四:某些数据类型的数据不能够导入。

如果在查询结果中,带有大对象数据类型或者Long数据类型的数据,则这个语句就会执行不成功。

换句话说,如果采用子查询来创建新表,则在Select语句中就不能够包含大对象数据类型或者Long数据类型。这是Oracle数据库的一种强制性规定。如果确实需要这些数据的话,则可以采用其它的方式来解决。如先不导入这些类型的数据。先利用子查询把表建立起来。

等新表建立完成后。再利用Update关键字结合子查询来更新这些列的数据即可。虽然这么 *** 作比较麻烦一点,但是总比不能够实现要好。

在使用这种方法创建新表时,除了要注意上面这些限制条件之外,最好再掌握下面这些技巧。这有助于提高通过查询来创建新表的利用价值。

技巧一:使用Nologging选项提高建表效率。

Nologging这个可选项相信大部分数据库管理员都知道其作用。但是到真的需要用到这个选项时,很多人就忘记了。这个选项主要是用来控制重做日志的。即在对数据库进行相关的 *** 作时,是否需要日志文件中写入相关的记录。

因为日志文件是一把双刃剑。一方面王日志文件中记录所有的 *** 作,有利于数据库的安全。当出现一些错误的 *** 作时,可以通过恢复事务日志挽回损失。另一方面,由于数据库同时需要更新数据、更新事务日志信息,为此当对数据库进行大批量的 *** 作时,就会降低这个 *** 作的性能,延长时间。

通过查询来创建新表是也遇到了类似的问题。因为在利用子查询创建新表时,如果不采用这个选项的话,则在新表中每插入一条记录都将会产生重做日志信息,这会占用额外的空间与时间。如果插入的记录比较多的话,这会给数据库的正常运行带来很大的负面影响。在大部分情况下,笔者建议使用Nologging选项来节省创建新表的时间。

因为通过子查询来创建新表,基本上不会对基表的内容产生任何不利的影响。所以即使不用重做日志,也不会带来多大的风险。换句话话说,此时投入与产出不成正比。也就是说,此时牺牲性能,来换取所谓的安全,是不值得的。因为不影响其它表的数据,所以风险基本上就谈不上。

在这种情况下,采用Nologging选项,让数据库在创建记录的时候,不往事务日志中记录信息,以缩短创建新表的时间。笔者认为这是非常明智的做法。

技巧二:利用查询来创建表结构,不导入数据。

有时候我们需要复制表的结构,而不需要复制数据。在PL Developer开发工具中,可以直接复制某张表。

但是这么 *** 作的话,除了会复制表的结构外,还会把相关的数据都复制过去。显然,这不符合我们的要求。而表中的纪录比较多的时候,这个复制作业就会占用比较长的时间与数据库服务器的资源,会给数据库的性能带来不利的影响。那么是否有方法,可以只复制表的结构,而不导入任何数据呢

在谈这个解决方案之前,大家先来回顾一下Select语句。

在使用Select语句中,可以带Where条件语句。如果要查询的记录没有一条记录符合Where条件中规定的限制条件时,则在显示窗口,仍然会显示要查询的各个列的名称。但是不会显示任何一条记录。现在要复制表的结构,而不需要导入任何数据,就可以参考这种实现机制来完成。

其实要实现这个需求的话,数据库管理员就可以利用通过查询来创建新表的方法。如先利用Select语句将相关的列等结构查询出来,然后再在Where查询语句中,设置一些根本不存在的条件。如此的话,最终的新表中就只有表的结构,而没有任何基础表中的纪录。

可见,虽然通过子查询来创建新表是一项比较强大的功能,可以实现一些复杂的管理需求。但是在使用这个功能的时候,上面对这些限制条件数据库管理员要铭记在心。否则的话,很可能在使用这项功能的时候,四处碰壁;或者最后竹篮子打水一场空。

1应用程序

2实体完整性

3distince

4

5create Nonclustered index IDX_authors on authors(州名列,城市名列)

6创建表

7select 列名 from 表名

8sum()

9top

10alter procedure

11ltrim()

12declare @变量名 数据类型

13where

14from

15order by

16cast(表达式 as 数据类型)

17count()

18drop procedure 存储过程名

19创建数据库

20价格大于15美元的所有数据

21数据库

22rollback

23

24服务管理器

25

26数据冗余(备份)

273

28数据库

29应用程序

30drop table

33 *** 作系统

权限

1

2是并发控制的单位,是用户定义的一个 *** 作序列,具有原子性,一致性,隔离性,持续性四个特性。

3共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁

获准共享锁的事务只能读数据,不能修改数据。

4

5

1存储过程可以使得程序执行效率更高、安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性问题,如:sql注入

2建立过程不会很耗系统资源,因为过程只是在调用才执行。

6聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。

7

8是并发控制的单位,是用户定义的一个 *** 作序列,具有原子性,一致性,隔离性,持续性四个特性。

BEGIN TRAN [Tran_name]开始事务

COMMIT TRAN [Tran_name]事务完成提交事务

9存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

10增量备份:是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。

12原子性,要么都做,要么不做。

13排它锁若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。

它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。

14分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都有DBMS的一份完整拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的大型数据库。

15

17同2,18同8

19DBMS数据库管理系统,DBA数据库管理员

201对1,一个学生对应一个学号

1对多 一个学生对应多门功课

多对多 商品与厂商

(备注:只能做这么多了,很长时间没看书了,有时间可以看看<数据库系统概论>萨师煊 王珊 高等教育出版社,很不错的一本书哦。上有你要的答案,特别是简答题。)

21

22数据库完整性,对数据库提出的某种约束条件或规则。

分三种:实体完整性,参照完整性,用户自定义完整性

23

24原则如下:

●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by *** 作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。

26。聚集索引确定表中数据的物理顺序。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引)

非聚集索引一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。一个表可以有多个聚集索引

以上就是关于数据库 *** 作查询作用是什么全部的内容,包括:数据库 *** 作查询作用是什么、在数据库查询中,我要用SQL语句查询“字符数大于N”,用where从句该怎么写比如我要查询身份z、数据库建表年龄设置15到50等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9849917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存