摘要: 简介 树是一种非线性结构。树的本质是将一些节点由边连接起来,形成层级的结构。而二叉树是一种特殊的树,使得树每个子节点必须小于等于2.而二叉查找树又是一类特殊的二叉树。使得每一个节点的左节点或左子树的所有节点必须小于这个节点,右节点必须大于这个节点。从而方便高效搜索。 下面来看如何使用C#实现二叉查找树。实现节点 二叉查找树是节点的集合。因此首先要构建节点,如代码1所示。 //二叉查找树的节点定义 public class Node { //节点本身的数据 public int data; //左孩子 public Nod... 阅读全文
posted @ 2013-09-26 10:52 Todd Zhang 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 新技术一直在不断变化,掌握一些基础是未来学习不断更新的技术的坚实基础。近来闲来无事,为了温习一下从前学的数据结构,将数据结构中的排序算法用JS实现了一遍,并在本文末尾处嵌入了DEMO。简单排序冒泡排序 冒泡排序是最简单排序算法,时间复杂度为n的平方,代码如下: function bubbleSort(array) { for (var i = 0; i 0; j--) { if (array[j] "); /* 输出结果结束 */ } }直接插入排序 ... 阅读全文
posted @ 2013-09-26 10:50 Todd Zhang 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 写在前面:本篇文章需要你对索引和SQL中数据的存储方式有一定了解.标题中高级两个字仅仅是因为本篇文章需要我的T-SQL进阶系列文章的一些内容作为基础.简介 在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构(表上没有聚集索引则为堆结构,不在本文讨论之列)如下图: 在聚集索引B树中,只有叶子节点实际存储数据,而其他根节点和中间节点仅仅用于存放查找叶子节点的数据. 每一个叶子节点为一页,每页是不可分割的. 而SQL Server向每个页内存储数据的最小单位是表的行(Row).当叶子节点中新插入的行或更新的行使得叶子节点无法容纳当... 阅读全文
posted @ 2013-09-25 17:24 Todd Zhang 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 简介 分区表是在SQL SERVER2005之后的版本引入的特性。这个特性允许把逻辑上的一个表在物理上分为很多部分。而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个表做union操作. 分区表在逻辑上是一个表,而物理上是多个表.这意味着从用户的角度来看,分区表和普通表是一样的。这个概念可以简单如下图所示: 而对于SQL SERVER2005之前的版本,是没有分区这个概念的,所谓的分区仅仅是分布式视图: 本篇文章所讲述的分区表指的是SQL SERVER2005之后引入的分区表特性.为什么要对表进行分区 在回答标题的问题之前,需要说明的是,表分区这个特性只有.. 阅读全文
posted @ 2013-09-25 17:23 Todd Zhang 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能。但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索引的概念,需要了解大量原理性的知识,包括B树,堆,数据库页,区,填充因子,碎片,文件组等等一系列相关知识,这些知识写一本小书也不为过。所以本文并不会深入讨论这些主题。索引是什么 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 精简来说,索引是一种结构.在SQL Server中,索引和表(这里指的是加了聚集索引的表)的存储结构是一样的,都是B树,B树是一 阅读全文
posted @ 2013-09-25 17:21 Todd Zhang 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 简介 视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata. 视图简单的理解如下: 通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。为什么要使用视图(View) 从而我们不难发现,使用视图将会得到如下好处: 视图隐藏了底层的表结构,简化了数据访问操作 因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全.. 阅读全文
posted @ 2013-09-25 17:19 Todd Zhang 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 引言 在前篇文章中(SQL查询入门(上篇),我对数据库查询的基本概念以及单表查询做了详细的解释,本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路。多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常。 因此,连接(Join)就是一种把多个表连接成一个表的重要手段. 比如简单两个表连接学生表(Student)和班级(Class)表,如图: 进行连接后如图: 笛卡尔积 笛卡尔积在SQL中的实现方式既是交叉连接(Cros. 阅读全文
posted @ 2013-09-25 17:18 Todd Zhang 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 引言 SQL语言是一门简单易学却又功能强大的语言,它能让你快速上手并写出比较复杂的查询语句。但对于大多数开发者来说,使用SQL查询数据库并没有一个抽象的过程和一个合理的步骤,这很可能会使在写一些特定的SQL查询语句来解决特定问题时被”卡”住,本系列文章主要讲述SQL查询时一些基本的理论,以及写查询语句的抽象思路。SQL查询简介 SQL语言起源于1970年E.J.Codd发表的关系数据库理论,所以SQL是为关系数据库服务的。而对于SQL查询,是指从数据库中取得数据的子集,这句话貌似听着有些晦涩是吧,下面通过几张图片简单说明一下: 假如一个数据库中只有一个表,再假如所有数据如下图(取自Advent 阅读全文
posted @ 2013-09-25 17:16 Todd Zhang 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 引言 SQL有着非常强大且灵活的查询方式,而多表连接操作往往也可以用子查询进行替代,本篇文章将会讲述子查询的方方面面。简介 子查询本质上是嵌套进其他SELECT,UPDATE,INSERT,DELETE语句的一个被限制的SELECT语句,在子查询中,只有下面几个子句可以使用SELECT子句(必须)FROM子句(必选)WHERE子句(可选)GROUP BY(可选)HAVING(可选)ORDER BY(只有在TOP关键字被使用时才可用) 子查询也可以嵌套在其他子查询中,这个嵌套最多可达32层。子查询也叫内部查询(Inner query)或者内部选择(Inner Select),而包含子查询的查询语 阅读全文
posted @ 2013-09-25 17:15 Todd Zhang 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 引言 在前两篇文章中,对于单表查询和多表查询的概念做出了详细的介绍,在本篇文章中会主要介绍聚合函数的使用和数据的分组.简介 简单的说,聚合函数是按照一定的规则将多行(Row)数据汇总成一行的函数。对数据进行汇总前,还可以按照特定的列(column)将数据进行分组(Group by)再汇总,然后按照再次给定的条件进行筛选(Having). 聚合函数将多行数据进行汇总的概念可以简单用下图解释: 简单聚合函数 简单聚合函数是那些拥有很直观将多行(Row)汇总为一行(Row)计算规则的函数。这些函数往往从函数名本身就可以猜测出函数的作用,而这些函数的参数都是数字类型的。简单聚合函数包括:Avg,Sum 阅读全文
posted @ 2013-09-25 17:15 Todd Zhang 阅读(165) 评论(0) 推荐(0) 编辑