面试(数据库相关)持续更新
2015-03-23 16:09
253 查看
参考《大话数据库》
内连接、外连接、交叉连接和自连接
可以参考这一篇:(http://blog.csdn.net/oracle_microsoft/article/details/4412513),下面是总结和补充。
1.内连接
概念:使用比较运算符进行表间某(些)列数据比较操作,仅将两个表中满足连接条件的行组合起来作为结果集
①等值连接
②自然连接
与等值唯一不同在于,有选择的显示列
③不等连接
连接条件使用除“=”运算符以外的其他运算符:>,>=,!>,<>等。
2.外连接
概念:返回到查询结果集合中的不仅包含符合连接条件的行,而且包含左表(左外连接时)、右表(右外连接时)或两个连接表(完全连接)中的所有数据行。
左外连接
显示坐标的所有数据行,如果右边从表没有与之匹配的数据,则显示NULL。例子:
查询所有同学编号、姓名和所在的“班级编号”与“班级名称”
3.交叉连接
4.自连接
地区表:
id z_zone z_id
4 北京 NULL
6 四川 NULL
7 成都 6
8 锦阳 6
9 北京 4
10 江苏 NULL
11 南京 10
12 苏州 10
13 无锡 10
14 常州 10
该表中,所属地区外键其实也是它自己表中另一行数据的主键。例:
统计每个大地区下面有多少小地区
索引
1.不应该创建索引的列:
①查询中很少使用或者参考的列。
②只有很少数据值的列。(比如人事表的性别,查询结果中,结果集的数据行占了表中很大比例)
这边有个例外(我一个做过数据库的室友说的),如果一张表中的女性很少,是可以对性别为女的做索引的
③那些定义为text、image、bit数据类型的列不应该增加索引。这些列的数据量要么相当大,要么取值很少。
索引对检索数据的效率有帮助,但对维护数据的效率很拖累。
2.聚集索引
①一张表只能有一个聚集索引,因为表中数据的物理顺序只能有一个,聚集索引的顺序就是数据的物理存储顺序。
②聚集索引对于那些经常要搜索范围值的列特别有效。
3.非聚集索引
①数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。
②索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(可由聚集索引规定)
只有当表包含聚集索引时,表中的数据行才按排列顺序存储。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
数据库事务
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。
事务和程序是两个概念。一般地讲,一个程序中包含多个事务。
事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事
务。在SQL语言中,定义事务的语句有三条:
BEGIN TRANSACTION
COMMIT
ROLLBACK
四个基本属性:
①原子性:要么全部执行,要么不执行
②一致性:事务运行并不改变数据库中的数据一致性
③独立性:两个以上的事务不会出现交错执行的状态
④持久性:事务运行成功后,更新是永久的
显示事务被用begin transaction 与 end transaction 标识起来,其中的 update 与 delete 语句或者全部执行或者全部不执行。。如:
begin transaction T1
update student
set name='Tank'
where id=2006010
delete from student
where id=2006011
commit
简单地说,事务是一种机制,用以维护数据库的完整性。
其实现形式就是将普通的SQL语句嵌入到Begin Tran...Commit Tran 中(或完整形式 BeginTransaction...Commit Transaction),当然,必要时还可以使用RollBack Tran 回滚事务,即撤销操作。
利用事务机制,对数据库的操作要么全部执行,要么全部不执行,保证数据库的一致性。需要使用事务的SQL语句通常是更新和删除操作等。
内连接、外连接、交叉连接和自连接
可以参考这一篇:(http://blog.csdn.net/oracle_microsoft/article/details/4412513),下面是总结和补充。
1.内连接
概念:使用比较运算符进行表间某(些)列数据比较操作,仅将两个表中满足连接条件的行组合起来作为结果集
①等值连接
select *from studio inner join class on studio.cl_id=class.cl_id
②自然连接
与等值唯一不同在于,有选择的显示列
select st_id as '编号',st_name as '学生姓名‘,cl_class as '班级名称' from studio inner join class on studio.cl_id=class.cl_id order by st_id
③不等连接
连接条件使用除“=”运算符以外的其他运算符:>,>=,!>,<>等。
2.外连接
概念:返回到查询结果集合中的不仅包含符合连接条件的行,而且包含左表(左外连接时)、右表(右外连接时)或两个连接表(完全连接)中的所有数据行。
左外连接
显示坐标的所有数据行,如果右边从表没有与之匹配的数据,则显示NULL。例子:
查询所有同学编号、姓名和所在的“班级编号”与“班级名称”
select st.st_id as '学生编号',st.st_name as '学生姓名',cl.cl_id as '班级编号',cl.cl_class as '班级名称' from studio as left outer join class as cl on st.cl_id=cl.cl_id右外连接和完全连接和上面原理类似。
3.交叉连接
select st_name,cl_class from studio cross join class where st_id>3返回连接表中所有数据行的笛卡尔积,行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
4.自连接
地区表:
id z_zone z_id
4 北京 NULL
6 四川 NULL
7 成都 6
8 锦阳 6
9 北京 4
10 江苏 NULL
11 南京 10
12 苏州 10
13 无锡 10
14 常州 10
该表中,所属地区外键其实也是它自己表中另一行数据的主键。例:
统计每个大地区下面有多少小地区
select b.z_zone as '地名',count(a.z_id) as '直辖市' from zone as a inner join zone as b on a.z_id=b.id group by b.z_zone
索引
1.不应该创建索引的列:
①查询中很少使用或者参考的列。
②只有很少数据值的列。(比如人事表的性别,查询结果中,结果集的数据行占了表中很大比例)
这边有个例外(我一个做过数据库的室友说的),如果一张表中的女性很少,是可以对性别为女的做索引的
③那些定义为text、image、bit数据类型的列不应该增加索引。这些列的数据量要么相当大,要么取值很少。
索引对检索数据的效率有帮助,但对维护数据的效率很拖累。
2.聚集索引
①一张表只能有一个聚集索引,因为表中数据的物理顺序只能有一个,聚集索引的顺序就是数据的物理存储顺序。
②聚集索引对于那些经常要搜索范围值的列特别有效。
3.非聚集索引
①数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。
②索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(可由聚集索引规定)
只有当表包含聚集索引时,表中的数据行才按排列顺序存储。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
数据库事务
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。
事务和程序是两个概念。一般地讲,一个程序中包含多个事务。
事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按缺省规定自动划分事
务。在SQL语言中,定义事务的语句有三条:
BEGIN TRANSACTION
COMMIT
ROLLBACK
四个基本属性:
①原子性:要么全部执行,要么不执行
②一致性:事务运行并不改变数据库中的数据一致性
③独立性:两个以上的事务不会出现交错执行的状态
④持久性:事务运行成功后,更新是永久的
显示事务被用begin transaction 与 end transaction 标识起来,其中的 update 与 delete 语句或者全部执行或者全部不执行。。如:
begin transaction T1
update student
set name='Tank'
where id=2006010
delete from student
where id=2006011
commit
简单地说,事务是一种机制,用以维护数据库的完整性。
其实现形式就是将普通的SQL语句嵌入到Begin Tran...Commit Tran 中(或完整形式 BeginTransaction...Commit Transaction),当然,必要时还可以使用RollBack Tran 回滚事务,即撤销操作。
利用事务机制,对数据库的操作要么全部执行,要么全部不执行,保证数据库的一致性。需要使用事务的SQL语句通常是更新和删除操作等。
相关文章推荐
- 数据库相关操作-持续更新
- 总结一下:运维工程师面试的经历及面试相关问题(会持续更新) 推荐
- 数据库面试(持续更新)
- 面试常见问题及相关答案整理(持续更新中)
- 数据库优化(持续更新中……)
- 关于面试的一些总结,持续更新
- JAVA相关术语(持续更新中...)
- IPV6相关信息(持续更新)
- QA常见面试问题答与问(持续更新)
- linux 系统相关的一些小知识点(持续更新)
- Silverlight 相关文章汇总(包括Silverlight 2和Silverlight 3,持续更新中)
- QA常见面试问题答与问(持续更新)
- C/C++ 语法相关(持续更新)
- asp.net 数据库连接的几种方式(持续更新中)
- android相关问题、网摘集锦(持续更新中...)
- 收藏一些编程相关的网站(持续更新)
- ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转)
- .Net中通过DataSet直接更新数据库相关问题和解决方法
- 编写测试用例相关解答(持续更新)
- mysql 使用相关 持续更新中...