- 下列关于视图的说法错误的是( C )
A. 视图是从一个或多个基本表导出的表,它是虚表
B. 某一用户可以定义若干个视图
C. 视图一经定义就可以和基本表一样被查询,删除和更新
D. 视图可以用来定义新的视图
解:视图的数据是不能删除的,只能查询
- 下列sql语句中哪条语句可为用户zhangsan分配数据库userdb表userinfo的查询和插入数据权限( A )
A. <pre class="none">grant select,insert on userdb.userinfo to'zhangsan'@'localhost'</pre>
B. <pre class="none">grant'zhangsan'@'localhost'to select,insert for userdb.userinfo</pre>
C. <pre class="none">grant select,insert on userdb.userinfo for'zhangsan'@'localhost'</pre>
D. <pre class="none">grant'zhangsan'@'localhost'to userdb.userinfo on select,insert</pre>
解:格式应该是:grant [权限] on [table] to 'username'@'localhost';
GRANT 权限 ON 数据库名.表名 TO 用户
- 若事务T对数据R已经加了X锁,则其他事务对数据R( D )
A.可以加S锁不能加X锁
B.不能加S锁可以加X锁
C.可以加S锁也可以加X锁
D.不能加任何锁
解:当一个事务欲对某个数据对象操作,可以对该对象加锁,取得对数据的一定控制,同时限制其他事务对该对象进行操作。加了排他锁就不能再加任何锁。
- 若事务T对数据对象A加上X(eXclusive)锁,则只允许其他事务对数据对象A加S(Share)锁,而不能加X锁,直到T释放A上的锁。( B )
A. 正确
B. 错误
解:
S锁(又称共享锁)
又称读锁,若事务T对数据对象加上S锁,则事务T可以读A但不能修改A,其他事务只能对A加S锁,而不能加X锁,直到T释放A上的S锁,这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改;
X锁(又称排他锁)
又称写锁,若事务T对数据对象A加上X锁,事务T既可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在释放A上的锁之前不能再读取和修改A
- SQL语言具有数据定义、数据操纵和数据控制的功能,它的一次查询的结果是一个( A )
A.表
B.记录
C.元组
D.数据项
解:sql 的查询结果是一张临时表,可供二次查询使用
例如:select xx from (select xx from xxx)
- 数据库物理设计完成后,进入数据库实施阶段,下列各项中不属于实施阶段的工作的是( B )。
A. 建立库结构
B. 扩充功能
C. 加载数据
D. 系统调试
解:按照规范设计,我们将数据库的设计过程分为六个阶段:
-
系统需求分析阶段
1:调查分析用户活动;
2:收集和分析需求数据,确定系统边界信息需求,处理需求,安全性和完整性需求;
3:编写系统分析报告 -
概念结构设计阶段
1:需求分析数据;
2:局部E-R模型;
3:全局E-R模型 -
逻辑结构设计阶段
1:初始关系模式设计;
2:关系模式规范化:
3:模式评价 -
物理结构设计阶段
1:确定物理结构;
2:评价物理结构 -
数据库实施阶段
1:建立实际数据库结构;
2:装入数据;
3:数据库试运行;
4:应用程序编码与调试;
5:整理文档 -
数据库运行与维护阶段
1:维护数据库的安全性和完整性;
2:监测并改善数据库性能;
3:重新组织和构造数据库
- 对于满足SQL92标准的SQL语句:
select foo,count(foo)
from pokes
where foo > 10
group by foo
having count (*) > 5
order by foo
其执行顺序应该是?( A )
A. FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
B. FROM->GROUP BY->WHERE->HAVING->SELECT->ORDER BY
C. FROM->WHERE->GROUP BY->HAVING->ORDER BY->SELECT
D. FROM->WHERE->ORDER BY->GROUP BY->HAVING->SELECT
解:
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、select计算所有的表达式;
7、使用order by对结果集进行排序。
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。
每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。
下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑步骤的简单描述。
( 8 ) SELECT ( 9 ) DISTINCT ( 11 ) < Top Num > < select list >
( 1 ) FROM [ left_table ] ( 3 ) < join_type > JOIN < right_table >
( 2 ) ON < join_condition > ( 4 ) WHERE < where_condition >
( 5 ) GROUP BY < group_by_list > ( 6 ) WITH < CUBE | RollUP >
( 7 ) HAVING < having_condition > ( 10 ) ORDER BY < order_by_list >
逻辑查询处理阶段简介
- FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
- ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
- OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
- WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
- GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
- CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
- HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
- SELECT:处理SELECT列表,产生VT8.
- DISTINCT:将重复的行从VT8中移除,产生VT9.
- ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
- TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。
注:步骤10,按ORDER BY子句中的列列表排序上步返回的行,返回游标VC10.这一步是第一步也是唯一一步可以使用SELECT列表中的列别名的步骤。这一步不同于其它步骤的 是,它不返回有效的表,而是返回一个游标。SQL是基于集合理论的。集合不会预先对它的行排序,它只是成员的逻辑集合,成员的顺序无关紧要。对表进行排序 的查询可以返回一个对象,包含按特定物理顺序组织的行。ANSI把这种对象称为游标。理解这一步是正确理解SQL的基础。
-
数据库系统的核心是( B )
A. 数据库
B. 数据库管理系统
C. 数据模型
D .软件工具 -
下列四组SQL命令,全部属于数据定义语句的命令是( A )
A. CREATE,DROP,ALTER
B. CREATE,DROP,UPDATE
C. CREATE,DROP,GRANT
D. CREATE,DROP,SELECT -
对关系R进行投影运算后,得到关系S,则( C )
A. 关系R的元组数等于关系S的元组数
B. 关系R的元组数小于关系S的元组数
C. 关系R的元组数大于或等于关系S的元组数
D. 关系R的元组数大于关系S的元组数
解:关系R是的投影是从关系R中选择出若干属性列组成新的关系。
分为两步:
(1)选择出指定的属性,形成一个可能含有重复行的表。
(2)删除重复行,形成新的关系。
并:属性不变,元组可能增加(集合相等时不增加)
交:属性不变,元组可能减少(集合相等时不减少)
投影:属性可能减少(全投影时不减少),元组可能减少(投影后无重复项时不减少)
笛卡尔积:属性增加,元组可能增加(只有1个元组时不增加)
网友评论