读《程序员的SQL金典》

来源:互联网 发布:解防沉迷软件 编辑:程序博客网 时间:2024/05/16 19:30

【程序员与DBA】

DBA需要花很多时间在数据库的备份、授权、调优、修复、监控等内容上,而程序员则应该去掌握SQL语句的使用,而且为了简化系统开发难度,应该学会使用数据库函数、子查询、表联接、开窗函数等高级的SQL特性。

【数据库的引入】

在数据库出现以前,处理数据,开发人员需要熟悉操作磁盘文件的函数、编写复杂的搜寻算法才能快速的把数据从文件中检索出来,当数据格式发生变化的时候要编写复杂的文件格式升级程序、很难控制并发修改。

数据库可以将我们从复杂的数据处理事务中解脱出来,从而专注于业务。

【数据库】

数据库:存储数据的仓库。

数据库能够帮助我们存储、组织和检索数据。

【数据库管理系统】

数据库管理系统DBMS,是一种操纵和管理数据库的系统软件,用于建立、使用和维护数据库。用户通过DBMS访问数据库中的数据,DBA也通过DBMS进行数据库的维护工作。

主流数据库管理系统有:DB2、Oracle、Microsoft SQL Server、Sybase SQL Server、Informix、MySQL等。

1、  DB2

应用程序可以通过使用微软的ODBC接口、Java的JDBC接口或者CORBA接口代理来访问DB2数据库。另外,DB2被称为“最难用的数据库系统”。

2、  Oracle

Oracle在功能、性能、可用性都非常好。

3、  Microsoft SQL Server

Microsoft SQL Server的可用性做的非常好,提供了很多外围工具来帮助用户对数据库进行管理,用户甚至无需直接执行任何SQL语句就可以完成数据库的创建、数据表的创建、数据的备份/恢复等工作。但它只能运行于Windows操作系统之上,而且在大数据量和大交易量的环境中的表现都是不尽人意的,当企业的业务量达到一个水平后就要考虑升级到Oracle或者DB2了。

4、  MySQL

一个小型关系型数据库管理系统。目前Internet上流行的网站架构方式时LAMP(linux+Apach+MySQL+PHP)。MySQL在国内没有足够的技术支持力量。

【基础概念】

1、  Catalog(Database)

数据库既然是一个数据的仓库,就要对不同类别的数据分类存储,如HR数据库、核心业务数据库BIZ。不同的数据就叫做Catalog或Database。

2、  表Table

区别了不同的类别,还要区别不同的类型。如核心业务中的客户资料、商品资料、销售员资料等。不同类型的资料应放到不同的区域中,称为“表”Table。

3、  列Column

也叫“字段”Field,每个列描述了数据的一个特性。

4、  数据类型DataType

规定了一个列中能填写什么类型的数据。

5、  记录Record

又称为行Row,它是数据表中的一行数据。表是由行和列组成的一张二维表,这就是关系数据库中最基本的数据模型。

6、  主键PrimaryKey

如员工表中的每一行代表一个员工,而名字可能是重复的,这时需要为每个员工分配一个唯一的工号,来唯一的标示员工,大多数DBMS中并没有强制规定一个表必须有主键,但是为一个数据表指定一个主键是一个非常好的习惯。

7、  表关联

为了避免表中的重复信息,将两张表通过字段关联起来的方式称为“表关联”,关联到其他表主键的字段被称为“外键”。

8、  索引

可以把索引想象成汉语字典的按笔画查找,如将笔画为5的汉字列出来,将笔画为18的汉字列出来等。索引可以提高数据查询的速度,但它占据了一定的磁盘空间,减慢了数据插入和删除的速度,因为每次插入和删除的时候都需要更新索引,一个表拥有的索引越多,则写操作的平均性能下降就越大。

【数据库语言SQL】

SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。使用SQL,只要发出“做什么”的命令,“怎么做”是不用使用者考虑的。

SQL全称是Structured QueryLanguage,SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作,SQL语句可以嵌套使用。

SQL语句具有4个主要功能:

1、  创建数据库并定义表的结构;

2、  查询需要的数据;

3、  更新或者删除指定的数据;

4、  控制数据库的安全。

我们可以通过三种方式执行SQL:

1、  在工具中执行

如:各个DBMS几乎都提供了工具用于执行SQL语句,比如MicrosoftSQL Server的Management Studio、DB2的命令中心、Oracle的SqlPlus或者MySQL的QueryBrowser。

2、  以编译的方式嵌入到语言中

把SQL直接写到代码中,在编译的时候由编译器来决定和数据库的交互方式。

3、  以字符串的形式嵌入到语言中。

写到代码中,由代码将其提交到DBMS,并且分析返回的结果。

【增删改查】

插入

Insert into Table () values ();

删除

Delete from Table where parameter=xx;

更新

Update Table set parameter=xx;

查询

Select * from Table;

 

为列指定别名

select FName AS Name, FAge AS Age,FSalaryAS Salary from [master].[dbo].[T_Employee]

【数据汇总】

SQL中提供了聚合函数来完成计算统计结果集条数、某个字段的最大值、某个字段的最小值、某个字段的平均值以及某个字段的合计值等数据统计的功能。SQL标准中规定了下面几种聚合函数:

函数名

说明

MAX

计算字段最大值

MIN

计算字段最小值

AVG

计算字段平均值

SUM

计算字段合计值

COUNT

统计数据条数

【高级数据过滤】

1、  通配符过滤:SQL中的通配符过滤使用LIKE关键字

1.1  单通配符过滤:使用半角下划线“_”

1.2  多字符匹配:使用半角百分号“%”

1.3  集合匹配:使用“[]”,还可以使用否定符“^”来对集合取反。如“[^bt]%”代表,匹配第一个字符不为b或者t、长度不限的字符串。

集合匹配只在MSSQLServer上提供支持,不过在其他数据库中我们可以通过变通手段来实现相同的效果。

通配符过滤是一个非常强大的功能,不过在使用通配符过滤进行检索的时候,数据库系统会对全表进行扫描,所以执行速度非常慢。

2、  多值检测

使用方法为“IN (值1,值2,值3)”

3、  数据分组

数据分组用啦将数据分为多个逻辑组,从而可以对每个组进行聚合运算。SQL语句中使用GROUP BY子句进行分组。

4、  HAVING语句

有的时候需要对部分分组进行过滤,HAVING语句能够使用的语法和where几乎是一样的。

【限制结果集行数】

如:MSSQLServer 2000中提供了TOP关键字用来返回结果集中的前N条记录。

【数据库分页】

在进行信息检索的时候,检索结果的数量通常会非常多,达到成百上千条。甚至更多,这么多的检索结果同时显示在同一个界面中,不仅查看起来非常麻烦,而且过多的数据显示在界面上也会造成占用过多的系统资源。解决这个问题的最常用方案就是数据库分页。

【抑制数据重复】

DISTINCT关键字是用来进行重复数据抑制的最简单的功能,而且所有的数据库系统都支持DISTINCT,DISTINCT的使用也非常简单,只要在SELECT之后增加DISTINCT即可。


待续。

原创粉丝点击