百度
360搜索
搜狗搜索

sql快速入门,SQL实战新手入门:交叉联接(CROSS JOIN)详细介绍

本文目录一览: SQLServer2008从入门到精通的目录

第一篇SQLServer2008快速入门第1章SQLServer2008简介1.1数据库基础知识1.1.1数据库概述1.1.2数据库模型1.2关系数据库1.2.1关系数据库概述1.2.2关系数据库术语1.2.3完整性规则1.3范式理论SNE.R模型1.3.1范式理论1.3.2E.R模型1.4SQLServer2008概述1.5SQLServer2008新增功能与特性1.5.1报表服务1.5.2集成服务1.5.3LINQ语言1.5.4增强XML功能1.5.5增强Transact.SQL语言1.5.6新增日期数据类型1.5.7新增Hierarchyld类型1.6安装与配置1.6.1安装SQLServer20081.6.2配置SQLServer20081.7SQLServer2008管理工具1.7.1BusinessIntelligenceDevelopmentStudi01.7.2SQLServerManagementStudi01.7.3SOLServerProfiler1.7.4SQLServer配置管理器1.7.5ReportingServices配置管理器1.7.6数据库引擎优化顾问1.7.7命令提示实用工具第2章管理SQLServer2008安全2.1安全机制2.1.1SOLServer2008安全简介2.1.2SQLServer2008安全等级2.2SQLServer2008验证模式2.2.1Windows身份验证2.2.2混合安全2.2.3配置身份验证模式2.3SQLServer2008登录2.3.1系统登录2.3.2创建SQLServer登录2.3.3创建Windows登录2.4权限2.4.1权限概述2.4.2权限类型2.4.3操作权限2.5数据库用户2.5.1数据库用户2.5.2创建数据库用户2.6管理角色2.6.1服务器角色2.6.2数据库角色2.7管理服务器角色2.7.1将登录指派到角色2.7.2指派角色到多个登录2.8管理数据库角色2.8.1将登录指派到角色2.8.2标准数据库角色2.8.3应用程序角色第3章SQLServer2008数据库管理3.1数据库文件和日志3.2数据库管理基础3.2.1系统数据库3.2.2常用数据库对象3.2.3数据库快照简介3.3创建示例数据库3.3.1使用管理工具3.32使用语句3.4数据库操作3.4.1修改数据库3.4.2删除数据库3.4.3查看数据库状态3.5其他数据库操作3.5.1分离数据库3.5.2附加数据库3.5.3收缩数据库3.5.4复制和移动数据库3.5.5优化数据库3.6管理数据库快照第4章管理表4.1表概述4.1.1什么是表4.1.2临时表和系统表.4.1.3创建表4.2列数据类型4.2.1精确数字数据类型4.2.2近似数字数据类型4.2.3Unicode字符数据类型4.2.4二进制数据类型4.2.5时间和日期数据类型4.2.6字符串数据类型4.2.7其他数据类型4.2.8创建自己的数据类型4.3列的其他属性4.3.1NULL与NoTNULL4.3.21DENTTY的应用4.4维护数据表4.4.1修改表4.4.2修改列属性4.4.3添加/删除表列4.5数据库完整性4.5.1使用约束维护数据完整性4.5.2使用默认值维护数据完整性.4.5.3使用规则维护数据完整性4.6表关系图第二篇Transact-SQL语言第5章数据查询和管理5.1SELECT获取简单数据5.1.1SELECT语法5.1.2FROM子句5.1.3WHERE子句5.1.4ORDERBY子句5.1.5GROUPBY子句5.1.6HAVING子句5.2SELECT操作多表数据5.2.1JOIN连接5.2.2内连接5.2.3外连接5.2.4交叉连接5.2.5自连接5.2.6联合查询5.2.7使用子查询5.3插入SQL数据5.3.1INSERT…VALUES语句语法5.3.2使用INSERT…SELECT语句.5.3.3使用SELECTINTO语句创建表5.4更新SQL数据5.4.1根据表中数据更新行5.4.2根据其他表更新行5.4.3使用TOP表达式5.5删除SOL数据5.5.1使用DELETE语句5.5.2使用TRUNCATETABLE语句5.5.3删除基于其他表中的行第6章使用XML查询技术6.1XML查询基础6.1.IXML数据类型6.1.2XML据类型方法6.1.3XQuery简介6.2FORXML子句6.2.1FORXMLRAW6.2.2FORXMLAUTO6.2.3FORXMLEXPLICIT6.2.4FORXMLPATH6.25TYPE命令6.2.6嵌套查询6.3其他XML技术6.3.1XML索引6.3.2OPENXML函数第7章使用Transact-SQL编程7.ITransact-SQL概述7.1.1Transact-SOL简介7.1.2Transact-sOL的特点7.1.3Transact-SOL的语法规范7.2Transact-SOL的语言基础7.2.1常量与变量7.2.2表达式7.23运算符7.2.4控制语句7.3常用函数7.3.1字符串函数7.3.2数学函数7.3.3聚合函数7.3.4数据类型转换函数7.3.5日期和时间函数7.4高级操作7.4.1锁7.4.2游标第三篇SQLServer2008数据库开发第8章存储过程与触发器8.1存储过程概述8.1.1什么是存储过程8.1.2存储过程的特点8.1.3设计存储过程8.2使用存储过程8.2.1创建存储过程8.2.2使用存储过程参数8.2.3执行存储过程8.2.4管理存储过程8.3触发器概述8.3.1触发器定义8.3.2触发器的分类8.4创建触发器8.4.1XML触发器8.4.2DDL触发器8.4.3嵌套触发器8.4.4递归触发器8.5管理触发器第9章操作架构、索引和视图9.1使用架构9.1.1创建架构9.1.2修改架构91.3移动对象到新的架构9.1.4删除架构9.2使用视图管理表9.2.1视图概述9.2.2创建视图9.2.3使用视图连接表9.3视图修改数据9.3.1插入数据9.3.2更新数据9.3.3删除数据9.4索引9.4.1索引概述9.4.2聚集索引9.4.3非聚集索引9.4.4XML索引9.4.5确定索引列9.5操作索引9.5.1创建索引9.5.2管理索引9.5.3查看索引9.5.4使用数据库引擎优化顾问.第10章事务lO.1事务10.l.l事务概述10.1.2ACID属性10.1.3事务分类10.1.4管理事务10.2SQLServer2008本地事务支持10.2.1自动提交事务模式10.2.2显式事务模式10.2.3隐式事务模式10.2.4批范围的事务10.3隔离级别10.3.1SQLServel-2008中的隔离级别10.3.2自定义事务隔离级别10.4分布式事务10.4.1Transact-SQL分布式事务104.2MSDTC分布式事务10.4.3分布式查询和分布式事务10.5高级事务主题lO.5.1嵌套事务10.5.2事务保存点10.5.3使用绑定会话IO.5.4调整事务隔离级别10.5.5在存储过程和触发器中回滚和提交10.5.6事务中禁用的Transact-SQL语句lO.5.7编写有效的事务10.5.8管理长时间运行的事务第四篇SQLServer2008数据库管理第11章备份与恢复数据库11.1备份概述11.1.1了解备份111.2数据库备份和恢复体系结构及特性11.1.3备份设备11.2备份数据ll.2.1创建备份设备11.2.2管理备份设备11.2.3完整备份11.2.4差异备份112.5事务日志备份11.2.6文件组备份11.2.7备份到多个设备11.2.8备份压缩11.3恢复数据11.3.1标准恢复11.3.2时间点恢复11.4复制数据库第12章SQLserver2008数据库自动化12.1SQLServer2008自动化概述12.2配置SOLServet代理12.2.1SOLServer代理概述12.2.2启用SQLServer代理服务12.2.3SQLSefiver代理服务安全性12.3操作员12.4作业12.4.1作业概述12.4.2创建作业12.5警报12.5.l警报概述12.5.2事件警报12.5.3性能警报12.5.4WMI警报12.6数据库邮件……第五篇综合实例……

求sql语法

这个还是找点资料详细看看的好些,这样一句两句话也说不清楚的说。。
这个的专门搞本sql的书了,不是几句话就能说清楚的
常用的
select
insert
delete
update
create
drop
其他
where
group by
order by desc
AS
having
limit
SQL语言快速入门(一)
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。
SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create, 及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下SQL语言的基本知识。
数据库表格
一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库
中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有
自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型
,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个
名为天气的数据库表格的实例。
城市 最高气温 最低气温
北京 10 5
上海 15 8
天津 8 2
重庆 20 13
该表格中“城市”,“最高气温”和“最低气温”就是三个不同的列
,而表格中的每一行则包含了具体的表格数据。
数据查询

在众多的SQL命令中,select语句应该算是使用最频繁的。Select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句的语法格式如下:
select column1 [, column2,etc] from tablename
[where condition];
([] 表示可选项)
Select语句中位于Select关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。
Select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目
标表格。
Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在where条件从句中可以使用以下一些运算符来设定查询标准:
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。
LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:
Select firstname, lastname, city
from employee
where firstname LIKE ‘E%’;
(注意,字符串必须被包含在单括号内)
上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句:
Select * from employee
where firstname = ‘May’;
查询所有名称为May的行。
SQL语言快速入门(二)

创建表格
SQL语言中的create table语句被用来建立新的数据库表格。Create table
语句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);

如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件
选项:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);
举例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));
简单来说,创建新表格时,在关键词create table后面加入所要建立的表格
的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件
等。注意,所有的SQL语句在结尾处都要使用“;”符号。
使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面
可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在
称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或
列的名称。
数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采
用的数据类型,而不能使用number的数据类型。
SQL语言中较为常用的数据类型为:

char(size):固定长度字符串,其中括号中的size用来设定字符串的最大
度。Char类型的最大长度为255字节。
varchar(size):可变长度字符串,最大长度由size设定。
number(size):数字类型,其中数字的最大位数由size设定。
Date:日期类型。
number(size,d):数字类型,size决定该数字总的最大位数,而d则用于
设定该数字在小数点后的位数。
最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限
制条件就是当向特定列输入数据时所必须遵守的规则。
例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有
记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件
还包括not, null和primary key等。Not null用来规定表格中某一列的值
不能为空.Primary key则为表格中的所有记录规定了唯一的标识符。
向表格中插入数据
SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语
句的使用格式如下:
insert into tablename
(first_column,...last_column)
values (first_value,...last_value);
例如:
insert into employee
(firstname, lastname, age, address, city)
values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”);

简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输
入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后
,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的
记录值。
更新记录
SQL语言使用update语句更新或修改满足规定条件的现有记录。
Update语句的格式为:
update tablename
set columnname = newvalue [, nextcolumn = newvalue2...]
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
update employee
set age = age+1
where first_name= ‘Mary’and last_name= ‘Williams’;
使用update语句时,关键一点就是要设定好用于进行判断的where条件
从句。
删除记录
SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的
格式为:
delete from tablename
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
delete from employee
where lastname = May;

简单来说,当需要删除某一行或某个记录时,在delete from关键词之
后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,
如果用户在使用delete语句时不设定where从句,则表格中的所有记录将
全部被删除。
删除数据库表格
在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记
录。Drop table命令的使用格式为:
drop table tablename;
例如:
drop table employee;
如果用户希望将某个数据库表格完全删除,只需要在drop table命令后
输入希望删除的表格名称即可。Drop table命令的作用与删除表格中的所有
记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列
的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息
全部删除。
以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。
SQL语言快速入门(三)
我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息。下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作。
SELECT…FROM
为方便讲解,我们在数据库中创建名为Store_Information的如下数据表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000
SQL语言中用于数据库查询的最简单的命令就是SELECT…FROM,语法格
式为:
SELECT \"column_name\" FROM \"table_name\"
例如,如果我们希望查询Store_Information数据表中所有的商店名称时,可
以使用如下命令:
SELECT store_name FROM Store_Information
查询结果显示为:
Store_Name
Los Angeles
San Diego
Los Angeles
Boston
如果用户希望一次查询多个字段,可以将所要查询的字段名称依次加入
SELECT关键字之后,中间用“,”隔开即可。
DISTINCT
SELECT关键字支持用户查询数据表中指定字段的所有数据,但是这样有时
就会不可避免的出现重复信息。如果用户希望只查询那些具有不同记录值的信
息的话,可以使用SQL语言的DISTINCT关键字。语法格式如下:
SELECT DISTINCT \"column_name\"
FROM \"table_name\"
例如,我们可以使用以下命令查询Store_Information数据表具有不同记录值
的所有记录。
SELECT DISTINCT Store_Name FROM Store_Information
查询结果如下:
Store_Name
Los Angeles
San Diego
Boston

WHERE
除了选择具有不同记录值的记录之外,有时我们可能还会需要根据某些条
件对数据库中的数据进行查询。例如,我们可能需要查询Store_Information数
据表中销售额超过1000美圆的商店。为此,我们可以使用SQL语言的WHERE
关键字设定查询条件。语法格式如下:
SELECT \"column_name\"
FROM \"table_name\"
WHERE \"condition\"
由此,我们可以使用如下命令查询销售额超过1000美圆的商店信息:
SELECT store_name FROM Store_Information WHERE Sales > 1000
查询结果显示为:
store_name
Los Angeles
运算函数
现在,我们已经了解到在使用SQL语言进行数据库查询操作时可以通过对
数值的判断设定灵活的查询条件。为了增强对运算的支持能力,SQL提供了众
多实用的运算函数供广大用户使用。例如,我们可以直接在SQL命令中调用
SUM或AVG这两个分别用于计算总数和平均数的函数。语法格式如下:
SELECT \"function type\"(\"column_name\")
FROM \"table_name\"
如果我们希望查询Store_Information数据表中所有商店的总销售额的话,可
以使用如下命令:
SELECT SUM(Sales) FROM Store_Information
查询结果显示为:
SUM(Sales)
50
COUNT
除了SUM和AVG函数之外,COUNT函数是SQL语言中另一个较为常用
的运算函数。COUNT函数可以用来计算数据表中指定字段所包含的记录数目。
语法格式为:
SELECT COUNT(\"column_name\")
FROM \"table_name\"
例如,如果我们希望查询Store_Information数据表中的有关商店的记录条数
时,可以使用如下命令:
SELECT COUNT(store_name)
FROM Store_Information
查询结果显示为:
Count(store_name)
4
COUNT函数可以和DISTINCT关键字一起使用从而可以查询数据表中指定
字段中所有具有不同记录值的记录数目.例如,如果我们希望查询Store_Information
数据表中不同商店的数目时,可以使用如下命令:
SELECT COUNT(DISTINCT store_name)
FROM Store_Information
查询结果显示为:
Count(DISTINCT store_name)
3

GROUP BY
下面我们来进一步看一下SQL语言中的集合函数。上文中,我们曾使用
SUM函数计算所有商店的销售总额,如果我们希望计算每一家商店各自的总销
售额时该怎么办呢?要实现这一目的我们需要做两件事:首先,我们需要查询
商店名称和销售额两个字段;然后,我们使用SQL语言的GROUP BY命令将
销售额按照不同的商店进行分组,从而计算出不同商店的销售总额。GROUP
BY命令的语法格式为:
SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"
我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
查询结果显示为:
store_name SUM(Sales)
Los Angeles 00
San Diego 0
Boston 0
小注:
GROUP BY关键字一般应用于同时查询多个字段并对字段进行算术运
算的SQL命令中。
HAVING
用户在使用SQL语言的过程中可能希望解决的另一个问题就是对由sum或
其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到Store_
Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使
用HAVING从句。语法格式为:
SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"
HAVING (arithematic function condition)
(GROUP BY从句可选)

由此,我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500
查询结果显示为:
store_name SUM(Sales)
Los Angeles 00
小注:
SQL语言中设定集合函数的查询条件时使用HAVING从句而不是
WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。
ALIAS
下面,我们重点介绍一下如何在SQL命令中设定别名。SQL语言中一般使
用两种类型的别名,分别为字段别名和数据表别名。简单的说,使用字段别名
可以帮助我们有效的组织查询的输出结果。例如,上文所列举的多个实例中,
当我们计算商店销售总额时,显示结果中就会出现SUM(sales)。虽然SUM(sales)
并不会对我们理解查询结果带来不便,但是如果我们需要在查询中使用多项复
杂运算时,显示结果就不会这么直观了。如果这时我们使用字段别名就会极大
的提高查询结果的可读性。
对于数据表别名,我们可以通过将别名直接放置在FROM从句中数据表名
称的后面设定。数据表别名在我们下面将要讲述的连接多个数据表进行查询的
操作中极为有用。
字段和数据表别名的语法格式如下:
SELECT \"table_alias\".\"column_name1\" \"column_alias\"
FROM \"table_name\" \"table_alias\"
即别名都直接放置在各自对应名称的后面,中间用空格分开。
以Store_Information数据表为例,我们可以在GROUP BY一节中所使用的
SQL命令中设置如下字段和数据表别名:
SELECT A1.store_name \ "Store\", SUM(Sales) \"Total Sales\"
FROM Store_Information A1
GROUP BY A1.store_name
查询结果显示为:
Store Total Sales
Los Angeles 00
San Diego 0
Boston 0
连接多个数据表
最后,我们来看一下如果使用SQL语言连接多个数据表,实现对多个数据
表的查询。为方便讲解,我们在数据库中分别创建了两个名为Store_Information
和Region的数据表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000

阅读更多 >>>  sqlserver是什么,SQL Server是什么意思

Region
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego
下面,我们就来看一下通过数据表的连接实现按不同区域查询销售额。
我们注意到在名为Region的数据表中包含区域和商店两个字段信息,而在名为
Store_Information的数据表中则包含每一家商店的销售信息。因此,为了得到按
区域划分的销售信息,我们需要将两个不同数据表的信息结合在一起进行查询.
通过对上述两个数据表的分析,我们发现每个数据表中都包含一个名为
Store_Name的字段,因此,我们可以使用如下命令实现查询目的:
SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Region A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
查询结果显示为:
REGION SALES
East 0
West 50
说明:
上述查询命令的前两行用于指定所要查询的目标字段,分别为Region数据
表中的Region_Name字段和Store_Information数据表中Sales字段的记录值总
数。这里,我们设定两个字段的别名分别为REGION和SALES,两个数据表的
别名分别为A1和A2。如果我们只使用字段别名而不设定数据表别名的话,上
述SQL命令的第一行就变成如下形式:
SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES
由此我们可以看出有效的使用数据表别名,可以极大的简化对多个数据表
进行操作的SQL命令。
上述查询命令的第3行为WHERE从句,正是该从句设定了两个数据表的
连接条件。因为我们希望确保Region数据表中的Store_Name字段能够与
Store_Information数据表中的同名字段相对应,所以我们规定两个字段的记录
值应当相等。在连接多个数据表时,一定要准确设定数据表的连接条件,如果
WHERE从句设定不正确,则可能导致查询结果中出现众多不相关的数据 .

SQL实战新手入门:关系型数据库管理系统

   关系型数据库管理系统
  本书是讲述SQL的 它是一种关系型数据库或者关系型数据库管理系统(RDBMS)的语言 自从Codd博士在 世纪 年代奠定关系型数据库的理论基础以来 已经产生了相当多的关系型数据库实现 一些新的关系型数据库实现也不断出现
  很多人将DB 视为所有数据库的鼻祖 IBM的研究员Edgar Frank Codd博士在 年的一份IBM的研究报告中发表他的论文 Derivability Redundancy and Consistency of Relations Stored inLarge Data Banks 时 给这种数据库理论定义了一个非常恰当的术语 关系型 关系型数据库被其他两种技术竞争 一种是Honeywell Information Systems在 年销售的Multics RelationalData Store 另一种是密歇根大学从 年起作为实验性设计的Micro DBMS(它开创了Codd博士两年之后提出的规范化理论) Micro DBMS的最后一个产品已经于 年退役 这两种技术演变成了 年发布的Oracle V 商业数据库 在通往RDBMS的道路上 包含了很多其他公司的产品所树立的里程碑(当然偶尔也有墓碑) 这些产品包括 IBM PRTV( ) IBM SQL/DS( ) QBE( ) Informix( ) Sybase( ) Teradata( ) Ingres 一个给其他很多成功的系统带来灵感的开源项目 例如PostgreSQL( ) Nonstop SQL( )和MicrosoftSQL Server( )等 这些系统使用了原始SQL的不同方言 SEQUEL QUEL Informix SQL等 直到 年 人们才第一次试图为SQL语言制定标准 毫无疑问 各个厂商关于SQL语言的战争仍在继续
  当前的RDBMS市场已经被几个重量级的专有关系型数据库瓜分 Oracle( %) IBM( %)和Microsoft( %) 更小的专有数据库系统Teradata和Sybase 每种不到 %的市场份额 其他数据库厂商 包括开源数据库 大约占有 %的市场份额
  对于大型企业来说 选择一个数据库产品作为应用程序的基础并不是一个简单的任务 这不仅仅是因为数据库系统软件需要花费好几万美元的许可证费用 几十万美金的维护和技术支持费 而且在于与其他软件 硬件和人力资源投资相比 数据库软件的投资还是一个决定整个企业架构的关键要素 尽管近年来从一个RDBMS迁移到另一个RDBMS变得更加容易 但考虑选择哪一种数据库依然会给CFO带来噩梦

   IBM DB LUW
  从带有MVS系列操作系统的大型机到z/OS 以及后来的UNIX和Windows系统 IBM在RDBMS领域都是一个长期的领跑者 IBM数据库的当前版本是IBM DB LUW(Linux UNIX和Windows)
  IBM DB 在事务处理速度上保持了绝对领先的记录(更多信息请参见第 章) 它具有多个不同的版本 从Advanced Server Enterprise版本到免费的DB Express C版本(尽管功能上有限制) 免费的DB Express C版本可用于运行本书中的示例
  直到DB 的 版本 依然遵循ANSI/ISO SQL Entry标准(请参考本章后面的内容)并支持由其他标准化组织制定的一些高级功能 例如Open Geospatial Consortium(开放地理信息联盟) JDBC X/Open XA 它还包含了最新SQL: 标准的部分功能 除了自己内置的过程化扩展语言SQL PL之外 它还支持使用Oracle的PL/SQL语言 Java语言 甚至Microsoft的 NET家族的语言来创建存储过程(更多内容请参见第 章)
   Oracle
  Oracle数据库可以追溯到 年第一次发布的Oracle V 开始时用于VAX/VMS系统 并于 年支持UNIX系统 经过多年发展 对于SQL标准定义的绝大多数功能 Oracle数据库都添加了相应的支持 在最新发布的Oracle g版本中功能支持达到了极致 它声称遵循最新SQL: 标准的很多功能
  在高性能事务处理的标杆上 Oracle占据了第二名的位置 它是企业生态系统的核心 Oracle是一个安全的 健壮的 可伸缩的 高性能的数据库系统 它统治UNIX市场长达数十年 除了对SQL标准的支持之外 Oracle还提供了一种内置的过程化语言PL/SQL(关于过程化扩展的更多内容 请参见第 章) 另外它还支持通用的程序设计语言 例如Java
  在写作本书之时 Oracle的最新版本是Oracle g 只有Oracle g有免费的速成版 该版本在数据存储的容量和RDBMS能够利用的处理器(CPU)数量上存在一定的限制 速成版完全支持本书所讨论的所有SQL功能
   Microsoft SQL Server
  SQL Server来源于Microsoft Ashton Tate和Sybase合作的结果 开始的目标是改写已有的 仅适用于UNIX的Sybase SQL Server数据库 使之适用于新的IBM操作系统OS/ Ashton Tate随后退出了这一合作 IBM OS/ 操作系统也逐渐被人淡忘 Microsoft和Sybase为了分享成果 开始小心地避免触犯彼此 Microsoft致力于发展并支持Windows和OS/ 系统上的SQL Server 而Sybase则致力于UNIX平台 尽管在SQL Server的核心技术上Microsoft依然采用了相当多的Sybase技术 但双方的合作关系于 年正式结束 Microsoft于 年发布了Microsoft SQLServer 它消除了Sybase余留的痕迹 为世界(Windows系统的世界)带来了一个完全崭新的RDBMS系统 时至今日 Microsoft占据了RDBMS大约 %的市场份额 而在Windows系统上它占据了至高无上的位置
  在写作本书之时 最新版本是Microsoft SQL Server Release Microsoft还提供了一个免费但有限制的Express版本 它支持本书所介绍的全部SQL功能
   Microsoft Access
  Microsoft Access也被称为Microsoft Office Access 它是一个桌面型关系数据库(相对来说是关系型的) Microsoft Access的设计目标是成为一个集成的解决方案 结合关系型数据库引擎的要素和应用程序开发的基础结构(配套有内置的程序设计语言和程序设计模型) 并作为一个报表平台 与本书中讨论的其他RDBMS不同的是 Microsoft Access是一个基于文件的数据库 因此它在性能和可伸缩性方面都存在固有的局限 例如 虽然最新版本的Access理论上允许最多 个并发用户 但在实践中超过 多个用户就会减慢Access的性能 Access仅支持SQL标准的一个子集 它提供了许多仅在Access环境中有效的功能
  Access提供的功能之一就是从远程数据库链接表的能力 该功能使Access可以作为应用程序
  的前端 访问任何与ODBC/OLEDB兼容的数据库
   PostgreSQL
  PostgreSQL是从美国加州伯克利大学的Michael Stonebraker所领导的一个项目演变而来的 Michael Stonebraker是关系型数据库理论的先驱 在最初的Ingres项目以及其继任者PostgreSQL中采用的那些原则也以各种方式被其他RDBMS产品采用 例如Sybase Informix EnterpriseDB和Greenplum
  PostgreSQL的第一个版本发布于 年 之后第二年以 版本的名义发布 并保留了一个由一组专门的开发人员维护的开源项目 PostgreSQL具有很多个商业版本 最著名的是EnterpriseDB 一个私人公司为该产品提供企业支持(以及大量专有的管理工具) 在一些苛刻的企业级应用环境中 很多高端客户(例如Sony和Vonage)都采用了开源的RDBMS 这充分证明了EnterpriseDB的性能
  在对SQL标准的支持方面 PostgreSQL可以说是最接近SQL标准的 另外它还提供了很多在其他数据库中所没有的功能 与它的开源伙伴(例如MySQL)不同 PostgreSQL从一开始就提供了参照完整性和事务支持 PostgreSQL内置了对PL/pgSQL过程化扩展语言的支持 另外实际上还具有适配其他任何语言来实现过程化扩展的功能
   MySQL
  MySQL最先是由Michael Widenius和David Axmark于 年开发的 并于 年发布了第一个版本 MySQL最初定位为一个轻量级的快速数据库 用于作为数据驱动型网站的后台数据库 尽管MySQL缺乏更加成熟的RDBMS产品所具有的许多功能 但在提供信息服务的速度上非常快 对于很多场合来说都已经 足够好 (为了达到真正的快速 MySQL避开了参照完整性约束和事务支持 更多内容请参见第 章和第 章) 另外 MySQL有着无法抗拒的价格 它是免费的 因此 在中小规模的用户群中 MySQL成为最流行的关系型数据库 在数据库产品的市场上 很多其他的免费产品在功能上都有所缺乏或者带有近乎商业炒作的宣传 数据库产品的巨人 Oracle IBM Microsoft和Sybase在那时也都没有提供各自RDBMS产品的免费速成版 在 年 Sun Microsystems公司收购了MySQL 随后Sun公司又被Oracle收购
  目前 Oracle提供了一个带有商业支持的MySQL版本和一个Community Edition版本 伴随着这一收购 出现了大量分支版本 例如MariaDB和 Percona Server 它们在通用公共许可证(General PublicLicense GPL)下继续保持免费状态 GPL是一种限制最小的开源许可证
  MySQL的最新版本是 MySQL 也已经指日可待 它是多平台的(Linux/UNIX/Windows) 并且支持SQL: 的绝大多数功能 其中一些功能依赖于选定的配置选项(例如 存储引擎)
  存储引擎选项是MySQL独一无二的特性 它允许采用不同的方式处理不同的表类型 每一种引擎都有独特的功能和一定的限制(例如事务支持 聚集索引 存储限制等) 可以采用不同的存储引擎选项来创建MySQL数据库中的表 默认使用的是MyISAM引擎
   HSQLDB和OpenOffice BASE
  超结构化查询语言数据库(Hyper Structured Query Language Database HSQLDB)是一个用Java程序设计语言实现的关系型数据库管理系统 它是伯克利软件发行(BSD)许可证(这个许可证相当宽松)下的一个开源数据库
  HSQLDB是OpenOffice BASE自带的默认RDBMS引擎 OpenOffice BASE是一个桌面型数据库 被定位于和Microsoft Access进行市场竞争 OpenOffice BASE也是一个关系型数据库 它健壮 功能丰富且相当快速 支持多种平台 包括Linux 各种版本的UNIX和Microsoft Windows OpenOffice BASE声称几乎完全遵循SQL: 标准 该标准包含了本书所讨论的绝大多数SQL子集
  改写过的HSQLDB可以作为OpenOffice 套件组件BADE的一个嵌入的后端 并从 版本开始成为OpenOffice 套件中的一部分 与Microsoft Access类似 假如有适当的驱动程序的话 OpenOffice BASE可以连接到多种不同的RDBMS 在OpenOffice BASE产品中 已经包含了大量可用的Java Database Connectivity(JDBC)和ODBC(Open Database Connectivity)驱动程序
  随着Oracle收购了OpenOffice 而其在Oracle的资助下作为开源项目的状态并不明确 OpenOffice 社区决定启动一个名为LibreOffice的新项目 意图在原来的BSD许可证的授权下将LibreOffice作为一个免费软件 实现OpenOffice的所有功能
  关系型数据库并不是数据库领域中唯一的主角 一些似乎已经被关系型数据库理论打败的旧技术在更快和更便宜的硬件以及软件创新的帮助下卷土重来 对更高性能和更容易创建应用程序的需求催生了对列式数据库(columnar database)和面向对象数据库 使 将所有数据放在一个桶中 方法可行的框架 特定领域扩展(例如测地数据管理或多媒体)以及各种数据访问机制的研究 第 章将讨论这些话题
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixinzhi/Article/program/SQL/201311/16492

如何快速入门数据分析

数据分析要学什么?
(1) Excel
说起Excel可能会有人觉得这个很简单,但是Excel确实是一个功能强大的利器。零基础学数据分析师一定要从Excel入门,因为Excel是处理小型数据量企业用的最多的工具,在基础数据分析师与数据运营岗位中具有极其重要的地位。作为数据分析师的核心工具,具体学习内容有Excel函数技巧(查找函数、统计函数、逻辑函数)、Excel快速处理技巧(格式调整、查找定位、快捷键技巧等)和Excel可视化技巧(组合图、条形图、数据气泡地图)等。
(2) Mysql
SQL同样是零基础学习数据分析的核心内容。因为作为数据分析师,你首先要解决的问题就是你要有数据来做分析。通常企业都会有自己的数据库,数据分析师首先得根据业务需要知道自己要从企业数据库中提取哪些数据。企业如果部署本地数据库,那么一定是SQL语言做提取数据的语言。SQL简单易懂,非常容易上手,并且是非学不可的。SQL语言从学习MySQL数据库开始,涉及对表结构数据的增删改查。真正在企业里面,数据分析师一般不会有增删改的权限,只会有查的权限。学员应该重点掌握查的各种句式。
(3) Python
Python的基础对于数据分析师而言是非常重要的。对于十万级或者百万级数据量而言,Excel和BI都会因为运行卡顿而变得完全无法使用。然而在实际企业运用中,一次性处理十万级以及百万级数据又是非常常见的。而Python则是处理这种中量级数据的利器。因为Python有很多的第三方强大的库,比如Numpy、Pandas、Matplotlib、Seaborn等。这些库能让数据分析师对百万数据进行数据清理和画图分析。Python不仅能数据清洗,画图,还能用sklearn进行大数据算法分析。虽然Python是数据分析的重要工具,但是不同的职业发展方向,Python掌握的程度也是不一样的。
(4) BI商业智能工具
BI可以理解成Excel图表透视表的高级版。BI是将表与表相连,然后得出很多指标图。它是一个大屏的看板,如下图:

企业销售指标,运营指标,物流指标等等。这些图可以表示企业在过去5个月的平均销售单价,过去24个月销售的物流发货量的变化曲线,甚至是现在实时的销售额,这些都是企业关心的问题。有了这个看板,领导层在监控企业业务方面就有了非常直观的数据,以供他们及时做出决策调整。现在市面上比较流行的BI软件,有FineBI,PowerBI等。而这些BI软件实际上都是非常类似的,学起来难度也不大。学习FineReport、FineBI由入门到精通,快速挖掘数据价值,将这些数据转化成有用的信息,让企业决策有数据依据,从而驱动企业决策和运营。
(5) 数理统计与数据运营
数理统计和数据运营方法论是数据分析师的理论基石。数理统计包括概率论,统计学,线性代数,以及基础的微积分理论。这些内容都不需要理解的很深,但是对它们的原理以及内涵都需要有所掌握。由于整个数据分析的源头其实就是脱胎于描述性统计分析的。描述性统计分析是对样本的总数、均值等指标做统计的;而数据分析后续涉及到的算法则是架构在统计学上更深一层次的建模。因此,掌握数理统计的相关知识对于入门数据分析师而言是基础且必要的。
那数据运营方法论是什么呢?数据运营方法论实际上是学习各个行业所运营的分析模型。例如,对电商而言,漏斗分析可以分析出来进入主页的人数PV1,到进入服装板块的人数PV2,PV2/PV1就可以得出一个进入服装板块的比率。还有很多通用的分析模型:相关分析,A/B test等。对于想往管理路线发展的数据分析师来讲,数据运营是必须要学习的知识。其实数据运营知识也不复杂,就是根据自身业务需求将指标拆解到最细,然后运用同比和环比两种数据分析方式。
(6) 机器学习
最后一个进阶要求数据分析师掌握对大量数据分析的能力。这种分析就不只是停留在描述统计分析和运用数据运营方法进行分析了,而是进行预测分析。预测分析的本质是利用已有的数据做出一套变量x,与预测最终值y之间的关系(也就是数学算法公式),然后利用这套算法,将更多的x输入算法中去得出一个预测的y值,这里听不懂没关系。总之,这个阶段的数据分析是利用大量的历史数据构建出一套数学公式(也就是算法),用这个数学公式去对未来进行预测。比如说:一个人大量地刷体育短视频,根据算法可以得出这个人可能对观看足球比赛的腾讯体育会员感兴趣。这类推断和预测对于商业世界是有着极大变现意义的。要想成为掌握算法的数据分析师,机器学习是不可跳过的入门。学员应该从简单的一元回归,多元回归,以及逻辑回归学习等,逐渐学习更多像决策树,随机森林,SVM等更高级的算法。
首先我说说这两种方向共同需要的技术面,当然以下只是按照数据分析入门的标准来写:
1. SQL(数据库),我们都知道数据分析师每天都会处理海量的数据,这些数据来源于数据库,那么怎么从数据库取数据?如何建立两表、三表之间的关系?怎么取到自己想要的特定的数据?等等这些数据选择问题就是你首要考虑的问题,而这些问题都是通过SQL解决的,所以SQL是数据分析的最基础的技能,零基础学习SQL可以阅读这里:SQL教程_w3cschool
2. 统计学基础,数据分析的前提要对数据有感知,数据如何收集?数据整体分布是怎样的?如果有时间维度的话随着时间的变化是怎样的?数据的平均值是什么?数据的最大值最小值指什么?数据相关与回归、时间序列分析和预测等等,这些在网易公开课上倒是有不错的教程:哈里斯堡社区大学公开课:统计学入门_全24集_网易公开课
3.Python或者R的基础,这一点是必备项也是加分项,在数据挖掘方向是必备项,语言相比较工具更加灵活也更加实用。至于学习资料:R语言我不太清楚,Python方向可以在廖雪峰廖老师的博客里看Python教程,面向零基础。
再说说两者有区别的技能树:
1.数据挖掘向
我先打个前哨,想要在一两个月内快速成为数据挖掘向的数据分析师基本不可能,做数据挖掘必须要底子深基础牢,编程语言基础、算法、数据结构、统计学知识样样不能少,而这些不是你自习一两个月就能完全掌握的。
所以想做数据挖掘方向的,一定要花时间把软件工程专业学习的计算机基础课程看完,这些课程包括:数据结构、算法,可以在这里一探究竟:如何学习数据结构?
在此之后你可以动手用Python去尝试实现数据挖掘的十八大算法:数据挖掘18大算法实现以及其他相关经典DM算法
2.产品经理向
产品经理向需要你对业务感知能力强,对数据十分敏感,掌握常用的一些业务分析模型套路,企业经常招聘的岗位是:商业分析、数据运营、用户研究、策略分析等等。这方面的学习书籍就很多,看得越多掌握的方法越多,我说几本我看过的或者很多人推荐的书籍:《增长黑客》、《网站分析实战》、《精益数据分析》、《深入浅出数据分析》、《啤酒与尿布》、《数据之魅》、《Storytelling with Data》

SQL实战新手入门:操作系统集成安全性(1)

   操作系统集成安全性( )
  在第一个计算机数据库发明之前 OS就已经存在了 记住这一点很重要 没有任何RDBMS能在没有OS的支持下运行 每一种OS都具有自己的一套安全机制 本书所讨论的所有RDBMS在某种程度上都提供了与运行这些RDBMS的OS的安全集成 从本质上讲 可以直接使用OS账户和特权来访问数据库 而无须依赖于RDBMS
  例如 Microsoft SQL Server 具有紧密集成OS的安全性 对于具有有效Windows账户的用户 允许根据他们的Windows NT/ /XP凭据进行身份验证 采用Windows身份验证的用户无须提供独立的用户ID和密码 只要他登录了运行RDBMS的计算机 就可以自动地访问SQLServer
  其他RDBMS将该功能扩展到了多个操作系统 对于不同的系统 实现的细节和用法也有所差异
  运行在某些操作系统(特别是Windows x)上的RDBMS不具有OS集成的安全性 因为这些OS本身没有提供这样的功能

阅读更多 >>>  sqlserver不存在或拒绝访问,提示SQL server不存在或拒绝访问怎么办?

   使用视图提供安全性
  SQL视图是用来实现安全性的机制之一 视图可以限制用户所能访问的数据或者限制用户所能执行的操作类型 也可以同时对两者进行限制
  请考虑下面的DDL SQL语句 该语句非常通用 可以被所有RDBMS接受
  CREATE VIEW vw_SingleTable
  AS
  SELECT
  bk_publisher AS Publisher
   bk_title AS Title
   bk_pub_year AS Year_of_Publication
  FROM books
  BOOKS表中总共包含了 个字段 但该视图仅从表中选取了 个字段 这也称为纵向限制 因为它将访问范围限制为列(字段)的一个子集 其他列可能包含了不想让用户看到的机密信息 如果将该视图的SELECT特权授予某个角色(例如friends角色) 则属于该角色的每一个用户都可以看到视图中的信息 BOOKS表中的其余信息对于这些用户则保持不可访问状态
  通过声明行的子集 还可以为数据提供横向的限制 例如 你可能想授予访问历史数据(即那些在一年或更早之前输入到表中的记录)的特权 并禁止对该日期之后添加的数据进行访问 如果使用LIBRARY数据库的例子 假设想快速而简单地访问价格低于某一标准 例如 美元 的图书 那么可以使用下面的代码 这些SQL语法对于所有RDBMS都是可用的
  CREATE VIEW vw_cheap_books
  AS
  SELECT *
  FROM books
  WHERE bk_price <
  从该视图中选取数据将仅仅返回那些价格低于 美元的图书
  当然 在单个视图中可以同时结合纵向和横向的选取限制
  在视图中还可以实现其他方面的限制 即使用WHERE子句和JOIN条件 当在视图中涉及多个表时 这两个子句是非常有用的 例如 可以限制视图 使之仅显示所著图书的售价低于 美元的作者
  SELECT DISTINCT bk bk_title ba au_last_name
  FROM books bk
  JOIN
  books_authors ba
  ON bk bk_id= ba bk_id
  JOIN
  authors au
  ON ba au_id = au au_id
  WHERE
  Bk bk_price <
  视图不仅可用于SELECT语句 而且也可用于UPDATE INSERT和DELETE语句 其中一些操作由视图对象固有的属性所支配 另外一些操作则可以在创建该视图对象时声明 例如 如果在创建视图时使用了聚合函数 则无法向视图更新或插入数据 试图执行这些操作将产生一个错误 这是视图固有的行为 另一方面 对于可更新视图可以创建一个约束 根据某些标准接受或拒绝对数据的修改
   试一试使用SQL视图限制数据访问
  在下面的练习中将创建一个视图 限制用户仅能查看到当前年份之前输入的图书记录 在这个例子中采用了Microsoft SQL Server 请参考 wrox 或者 agilitator 网站 以了解针对你所使用的特定RDBMS的例子
  ( ) 打开Microsoft SQL Server的Query Analyzer
  ( ) 在SQL Query窗格中输入USE [library]作为第一条语句
  ( ) 输入下面的代码
  CREATE VIEW vwLastYearBooks AS
  SELECT * FROM books where EXTRACT(PublishingDate YEAR) < EXTRACT
  (GetDate() YEAR)
  GO
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixinzhi/Article/program/SQL/201311/16440

SQL实战新手入门:交叉联接(CROSS JOIN)

   交叉联接(CROSS JOIN)
  最后 将介绍另外一种不同类型的联接 实际上 它的语法不允许定义行匹配的条件
  SELECT
  loc_bookcase
   loc_shelf

   loc_position_left
   bk_title
  FROM location CROSS JOIN books
  ( row(s) affected)
  这怎么可能呢?查询结果产生了 行记录?在每一个表中仅有 条记录啊!这是什么类型的联接呢?它就是交叉联接 又称为笛卡尔积 请回顾一下笛卡尔坐标系统 它由两根互为直角的轴构成 两轴交叉点的坐标为 并从 开始沿轴逐渐增加数值 笛卡尔坐标系统的一个常见的例子就是国际象棋的棋盘 它沿着轴用字母取代了数字 除此之外 两者是类似的
  如果对棋盘上的每一个方格进行命名 可以使用棋盘上的坐标 A A E E 等 换句话说 即将一个轴上的每一个值都与另外一个轴上的每一个值进行匹配 这就是笛卡尔积(这非常类似于将轴上的值 相乘 :A× A× 等)
  CROSS JOIN对于两个表执行类似的操作 它将一个表中的每一行与另外一个表中的每一行进行配对 可以想象 CROSS JOIN的结果集通常都相当大 在上面的例子中 仅仅交叉联接两个表(每个表只有 行数据)就返回了 行结果 如果在查询中加入更多的表 那么结果集将变得更加庞大
  如何建立CROSS JOIN呢?实际上无需太多的语法 使用旧式SQL语法来创建CROSS JOIN非常简单 只需要在FROM子句中列出要选取的表 无需任何JOIN条件
  SELECT
  loc_bookcase
   loc_shelf
   loc_position_left
   bk_title
  FROM location books
  也就是说 无须使用任何JOIN关键字 只需要在FROM子句中列出要交叉联接的表即可 但是这会产生一个困境 忽略WHERE子句将创建一个笛卡尔积的查询 并且编写这样的SQL查询非常简单 然而 结果集可能会超出希望查询的数据范围 表 显示了将LIBRARY数据库中的表逐步增加到CROSS JOIN查询中时结果集数量的增长过程
  表 LIBRARY数据库中的笛卡尔积

  LIBRARY数据库非常小 只包含 个表 其中没有一个表超过 条记录 但使用CROSSJOIN时却产生了极大的结果集 设想一下 如果对于一个包含了几十个甚至上百个表的产品级的数据库(其中可能包含了上百万的记录)使用CROSS JOIN将会产生什么样的后果?毫无疑问 这会将数据库折磨到挂掉 并让DBA恼火不已
  可以在CROSS JOIN中使用一个WHERE子句来减少返回记录的数量 例如 使用下面的查询产生一个笛卡尔积
  SELECT loc_bookcase loc_shelf loc_position_left bk_title
  FROM location CROSS JOIN books
  WHERE bk_id =
  该查询仅返回 条记录 而不是前面例子中的 条记录
  幸运的是 新的SQL语法要求首先显式地声明联接的类型 这可以避免查询意外地产生不必要的笛卡尔积 新SQL语法要求必须使用CROSS JOIN关键字或者应用联接条件 对于DBA请注意以下的警告 使用旧的联接语法对数据库是有害的 很多RDBMS在它们各自的数据库中已经停止了对旧语法的支持 除非需要处理遗留的代码 否则在查询中最好不要再使用旧式语法
  读者可能会感到疑惑 如果CROSS JOIN是不良的 应该避免使用的联接 那为什么还要自寻烦恼地提供CROSS JOIN关键字呢?实际上 CROSS JOIN也有合理的用途 例如 它提供了一个快速又简单的办法来产生巨量的数据集 可用于测试用途 另外一种应用场景是通过CROSS JOIN产生的数据集来选取行 这些行既无法通过INNER JOIN也无法通过OUTER JOIN来产生 例如 选取对于指定产品的销售总量为 的客户(或者在LIBRARY数据库的情形下查询在一年内没有借阅一本特定图书的客户)
  CROSS JOIN是一个极为强大的工具 因此也必须谨慎地加以使用 处理巨大的数据集将消耗系统资源 在SQL中 最佳实践之一就是在查询中尽可能地对记录进行筛选 并最小化须访问的数据的数量
  一个SQL查询对于可以包含多少个JOIN操作是否存在限制呢?对于预备执行计划的复杂性都存在实际的限制 更不用说执行这些复杂的计划可能会使服务器崩溃 实际的数量取决于RDBMS以及运行RDBMS的硬件环境 如果你发现联接太多的表 那么应该重新考虑你的查询方案
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixinzhi/Article/program/SQL/201311/16467

SQL实战新手入门:操作系统集成安全性(3)

   操作系统集成安全性( )
  可以在很多层面上防止SQL注入攻击 第一条防线就是对所要求的权限设置最严格的许可权 在上面的例子中 如果用户在BOOKS表上没有执行DELETE操作的权限 就可以避免恶意地删除记录 但是对于应对第一种情形依然是无效的 为了确保RDBMS仅仅执行那些计划的语句 开发人员可以在应用程序层上实现检查的逻辑 或者求助于使用存储过程(在存储过程中添加一些额外的检查实现) 另外 RDBMS还可以执行一个快速的解析 以检测任何意料之外的布尔表达式
   数据加密
  加密是转换信息的方法 它将直接可用的信息转换为另外一种格式 如果没有解密 就无法使用这些信息 通常情况下 可以使用与加密数据相同的过程(算法)来解密这些被加密过的数据 加密并不是SQL标准的一部分 因此每一种RDBMS都提供了不同的与加密有关的服务 通常将这些服务作为一组内置的函数
  在RDBMS中 数据是以纯文本(ASCII Unicode)或二进制(BLOBS IMAGE和类似的数据类型)形式来存储的 为了避免未经授权的用户(碰巧被授予了权限 可以访问包含这些数据的表)查看到这些数据 或者要通过一个不安全的网络传送数据时 可以对数据进行加密 在将数据输入到数据库之前 可以通过一些客户端软件对数据进行加密 或者也可以在RDBMS中使用自身的加密功能对数据进行加密处理

  从用于创建数据库对象的SQL代码中可以学习到很多东西 在绝大多数数据库中 这些代码通常都是以公开的文本形式来存储的 可以通过查询特殊的INFORMATION_SCHEMA视图(将在本章后面讨论)来获取这些信息 为了避免出现这种情况 某些RDBMS允许对用于创建数据库对象(表 视图和存储过程)的源代码进行加密
  加密数据提供了另外一层安全性 为了以人类可读的格式来查看数据(文本 图片 音频文件或可执行文件) 用户需要具有密码和解密工具 解密工具可以由RDBMS提供 或者包含在用户的客户端软件中
  试一试使用IBM DB 内置函数加密和解密数据
  IBM DB LUW提供了内置函数ENRYPT和DECRYPT_CHAR用于数据的加密和解密
  ( ) 打开IBM DB 命令编辑器或使用命令行工具 连接到LIBRARY数据库
  ( ) 执行下面的SQL查询
  SELECT ENCRYPT(bk_title PASSWORD ) AS encrypted
  FROM books
  加密后的图书名称为
  ENCRYPTED
  
  x E AFFE A D C CC AC E B A
  
  x DC FFE A D F C A A DD D EBE
  要对上面这个看起来毫无意义的字符串进行解密 可以使用DECRYPT_CHAR函数(因为这里处理的是字符数据)和一个完全相同的密码( PASSWORD ) 解密之后的数据将恢复到原来的格式
   示例说明
  内置的ENCRYPT函数接受两个参数 第一个参数是从表中获得的字符数据 第二个参数是用于对字符串进行加密处理的密码 加密的结果是人类不可读的杂乱数据 使用DECRYPT_CHAR函数和相同的密码可以对加密后的数据进行解密 使之恢复为图书名称
  实际上存在着数百种数据加密算法 既有自定义的算法 也有公有算法 要发明并实现一种数据加密算法 要求熟悉程序设计的原理 还需要一些高级数学知识 目前已经广泛使用的加密算法包括 DES(在 年由IBM设计 并于 年被NIST采用 用于非保密数据) RC (来自于RSA Data Security) CMEA(由电信工业协会开发 用于加密数字蜂窝电话的数据) FEAL(由日本电话电报公司开发) TEA MD Tiger和CAST等
  很长时间以来 Oracle使用DBMS_OBFUSCATION_TOOLKIT包来加密数据 从Oracle g版本开始引入了一个新的DBMS_CRYPTO包 它弥补了前任加密包的不足 最终的加密办法就是Oracle的透明数据加密(Transparent DataEncryption)特性 它基于Oracle Wallet Manager创建的公共/主加密密钥 请参考Oracle的文档以获得更详细的信息
  在RDBMS与客户端应用程序之间发送的数据也可以加密处理 它在传输控制协议/Internet协议(TCP/IP)通信协议(绝大多数网络和Internet连接所使用的协议)的基础上使用安全套接字层(Secure Sockets Layer SSL)或Secure Shell(SSH)进行加密 在RDBMS中实现了一些加密函数 可以提供工业强度的加密服务 在任何时候 当需要对数据进行加密时 都应该使用这些函数进行处理
   数据库审计
  审计提供了跟踪数据库中信息流的功能 包括连接企图 数据更新 删除 插入和选取 执行的功能等 对于事后检查的情形和实时监视以检测未经授权的行为 数据库审计都是非常有用的
  审计与SQL标准并没有任何关系 它在功能 实现细节等方面是完全依赖于RDBMS的
   安全标准
  尽管并非与SQL直接有关 但SQL采用了安全标准所定义的基础结构 因此SQL用户对这些安全标准很感兴趣 通常 RDBMS软件遵循这些标准中的某一层级 要么是数据库厂商自愿地采用这些标准 要么是出于 *** 部门对软件的可接受度的强制要求的压力
  美国国家计算机安全中心(NCSC)在 年开始标准化计算机系统的安全规程 这被认为是 *** 的一项要求 RDBMS必须通过监督测试 保证它们的数据库产品达到某一级别的安全性 为了能将产品销售给 *** 部门 数十种RDBMS通过了为期几年的测试规程(测试过程平均为 年) 在 世纪 年代 诸如Sun Oracle和Novell这些数据库厂商都获得了相应的认证(C 级或者B 级) 随后 官方指示要求所有存储敏感信息的计算机都必须达到C 级认证
  很多质量监管法规已经启用 例如用于金融数据的Sarabanes Oxley和BASEL II 用于医疗信息的HIPAA 以及用于信用卡信息的PCI标准等
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixinzhi/Article/program/SQL/201311/16438

阅读更多 >>>  数据库管理软件有哪些,mysql数据库管理工具有哪些(mysql数据库管理软件)

SQL语言的问题

SQL语言快速入门之一
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, ACCESS等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create, 以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下SQL语言的基本知识。
数据库表格
  一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个名为天气的数据库表格的实例。
城市 最高气温 最低气温
北京 10 5
上海 15 8
天津 8 2
重庆 20 13
该表格中“城市”, “最高气温”和“最低气温”就是三个不同的列,而表格中的每一行则包含了具体的表格数据。
数据查询
  在众多的SQL命令中,select语句应该算是使用最频繁的。Select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句的语法格式如下:
select column1 [, column2,etc] from tablename
[where condition];
([] 表示可选项)
  select语句中位于select关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。
select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目标表格。
Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。
在where条件从句中可以使用以下一些运算符来设定查询标准:
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
  除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:
select firstname, lastname, city
from employee
where firstname LIKE ‘E%’;
(注意,字符串必须被包含在单括号内)
上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句:
select * from employee
where firstname = ‘May’;
查询所有名称为May的行。
SQL语言快速入门之二
创建表格
SQL语言中的create table语句被用来建立新的数据库表格。Create table语句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);
如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);
举例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));
简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。
使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或列的名称。
数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用varchar或char的数据类型,而不能使用number的数据类型。
SQL语言中较为常用的数据类型为:
char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。Char类型的最大长度为255字节。
varchar(size):可变长度字符串,最大长度由size设定。
number(size):数字类型,其中数字的最大位数由size设定。
Date:日期类型。
number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。
最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括not null和primary key等。Not null用来规定表格中某一列的值不能为空。Primary key则为表格中的所有记录规定了唯一的标识符。
向表格中插入数据SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:
insert into tablename
(first_column,...last_column)
values (first_value,...last_value);
例如:
insert into employee
(firstname, lastname, age, address, city)
values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”);
简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。
更新记录
SQL语言使用update语句更新或修改满足规定条件的现有记录。Update语句的格式为:
update tablename
set columnname = newvalue [, nextcolumn = newvalue2...]
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
update employee
set age = age+1
where first_name= ‘Mary’and last_name= ‘Williams’;
使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。
删除记录
SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的格式为:
delete from tablename
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
delete from employee
where lastname = May;
简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格中的所有记录将全部被删除。
删除数据库表格
在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记录。Drop table命令的使用格式为:
drop table tablename;
例如:
drop table employee;
如果用户希望将某个数据库表格完全删除,只需要在drop table命令后输入希望删除的表格名称即可。Drop table命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息全部删除。
以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。
SQL语言快速入门之三
我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息。下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作。
SELECT…FROM
  为方便讲解,我们在数据库中创建名为Store_Information的如下数据表。
Store_Information
Store_Name
Sales
Date
Los Angeles
$1500
Jan-10-2000
San Diego
$250
Jan-11-2000
Los Angeles
$300
Jan-12-2000
Boston
$700
Jan-12-2000
  SQL语言中用于数据库查询的最简单的命令就是SELECT…FROM,语法格式为:
SELECT "column_name" FROM "table_name"
例如,如果我们希望查询Store_Information数据表中所有的商店名称时,可以使用如下命令:
SELECT store_name FROM Store_Information
查询结果显示为:
Store_Name
Los Angeles
San Diego
Los Angeles
Boston
如果用户希望一次查询多个字段,可以将所要查询的字段名称依次加入SELECT关键字之后,中间用“,”隔开即可。
DISTINCT
  SELECT关键字支持用户查询数据表中指定字段的所有数据,但是这样有时就会不可避免的出现重复信息。如果用户希望只查询那些具有不同记录值的信息的话,可以使用SQL语言的DISTINCT关键字。语法格式如下:
SELECT DISTINCT "column_name"
FROM "table_name"
例如,我们可以使用以下命令查询Store_Information数据表具有不同记录值的所有记录。
SELECT DISTINCT Store_Name FROM Store_Information
查询结果如下:
Store_Name
Los Angeles
San Diego
Boston
WHERE
  除了选择具有不同记录值的记录之外,有时我们可能还会需要根据某些条件对数据库中的数据进行查询。例如,我们可能需要查询Store_Information数据表中销售额超过1000美圆的商店。为此,我们可以使用SQL语言的WHERE关键字设定查询条件。语法格式如下:
SELECT "column_name"
FROM "table_name"
WHERE "condition"
由此,我们可以使用如下命令查询销售额超过1000美圆的商店信息:
SELECT store_name FROM Store_Information WHERE Sales > 1000
查询结果显示为:
store_name
Los Angeles
运算函数
  现在,我们已经了解到在使用SQL语言进行数据库查询操作时可以通过对数值的判断设定灵活的查询条件。为了增强对运算的支持能力,SQL提供了众多实用的运算函数供广大用户使用。例如,我们可以直接在SQL命令中调用SUM或AVG这两个分别用于计算总数和平均数的函数。语法格式如下:
SELECT "function type"("column_name")
FROM "table_name"
如果我们希望查询Store_Information数据表中所有商店的总销售额的话,可以使用如下命令:
SELECT SUM(Sales) FROM Store_Information
查询结果显示为:
SUM(Sales)
$2750
COUNT
  除了SUM和AVG函数之外,COUNT函数是SQL语言中另一个较为常用的运算函数。COUNT函数可以用来计算数据表中指定字段所包含的记录数目。语法格式为:
SELECT COUNT("column_name")
FROM "table_name"
例如,如果我们希望查询Store_Information数据表中的有关商店的记录条数时,可以使用如下命令:
SELECT COUNT(store_name)
FROM Store_Information
查询结果显示为:
Count(store_name)
4
COUNT函数可以和DISTINCT关键字一起使用从而可以查询数据表中指定字段中所有具有不同记录值的记录数目。例如,如果我们希望查询Store_Information数据表中不同商店的数目时,可以使用如下命令:
SELECT COUNT(DISTINCT store_name)
FROM Store_Information
查询结果显示为:
Count(DISTINCT store_name)
3
GROUP BY
下面我们来进一步看一下SQL语言中的集合函数。上文中,我们曾使用SUM函数计算所有商店的销售总额,如果我们希望计算每一家商店各自的总销售额时该怎么办呢?要实现这一目的我们需要做两件事:首先,我们需要查询商店名称和销售额两个字段;然后,我们使用SQL语言的GROUP BY命令将销售额按照不同的商店进行分组,从而计算出不同商店的销售总额。GROUP BY命令的语法格式为:
SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"
我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
查询结果显示为:
store_name SUM(Sales)
Los Angeles $1800
San Diego $250
Boston $700
小注:
GROUP BY关键字一般应用于同时查询多个字段并对字段进行算术运算的SQL命令中。
HAVING
用户在使用SQL语言的过程中可能希望解决的另一个问题就是对由sum或其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从句。语法格式为:
SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"
HAVING (arithematic function condition)
(GROUP BY从句可选)
由此,我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500
查询结果显示为:
store_name SUM(Sales)
Los Angeles $1800
小注:
SQL语言中设定集合函数的查询条件时使用HAVING从句而不是WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。下面,我们重点介绍一下如何在SQL命令中设定别名。SQL语言中一般使用两种类型的别名,分别为字段别名和数据表别名。
简单的说,使用字段别名可以帮助我们有效的组织查询的输出结果。例如,上文所列举的多个实例中,当我们计算商店销售总额时,显示结果中就会出现SUM(sales)。虽然SUM(sales)并不会对我们理解查询结果带来不便,但是如果我们需要在查询中使用多项复杂运算时,显示结果就不会这么直观了。如果这时我们使用字段别名就会极大的提高查询结果的可读性。
对于数据表别名,我们可以通过将别名直接放置在FROM从句中数据表名称的后面设定。数据表别名在我们下面将要讲述的连接多个数据表进行查询的操作中极为有用。
字段和数据表别名的语法格式如下:
SELECT "table_alias"."column_name1" "column_alias"
FROM "table_name" "table_alias"
即别名都直接放置在各自对应名称的后面,中间用空格分开。
以Store_Information数据表为例,我们可以在GROUP BY一节中所使用的SQL命令中设置如下字段和数据表别名:
SELECT A1.store_name Store, SUM(Sales) "Total Sales"
FROM Store_Information A1
GROUP BY A1.store_name
查询结果显示为:
Store Total Sales
Los Angeles $1800
San Diego $250
Boston $700
连接多个数据表
最后,我们来看一下如果使用SQL语言连接多个数据表,实现对多个数据表的查询。为方便讲解,我们在数据库中分别创建了两个名为Store_Information和Region的数据表。
Store_Information
Store_Name
Sales
Date
Los Angeles
$1500
Jan-10-2000
San Diego
$250
Jan-11-2000
Los Angeles
$300
Jan-12-2000
Boston
$700
Jan-12-2000
Region
Region_Name
Store_Name
East
Boston
East
New York
West
Los Angeles
West
San Diego
下面,我们就来看一下通过数据表的连接实现按不同区域查询销售额。
我们注意到在名为Region的数据表中包含区域和商店两个字段信息,而在名为Store_Information的数据表中则包含每一家商店的销售信息。因此,为了得到按区域划分的销售信息,我们需要将两个不同数据表的信息结合在一起进行查询。通过对上述两个数据表的分析,我们发现每个数据表中都包含一个名为Store_Name的字段,因此,我们可以使用如下命令实现查询目的:
SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
查询结果显示为:
REGION SALES
East $700
West $2050
说明:
上述查询命令的前两行用于指定所要查询的目标字段,分别为Region数据表中的Region_Name字段和Store_Information数据表中Sales字段的记录值总数。这里,我们设定两个字段的别名分别为REGION和SALES,两个数据表的别名分别为A1和A2。如果我们只使用字段别名而不设定数据表别名的话,上述SQL命令的第一行就变成 如下形式:
SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES
由此我们可以看出有效的使用数据表别名,可以极大的简化对多个数据表进行操作的SQL命令。
上述查询命令的第3行为WHERE从句,正是该从句设定了两个数据表的连接条件。因为我们希望确保Region数据表中的Store_Name字段能够与Store_Information数据表中的同名字段相对应,所以我们规定两个字段的记录值应当相等。在连接多个数据表时,一定要准确设定数据表的连接条件,如果WHERE从句设定不正确,则可能导致查询结果中出现众多不相关的数据

感觉自己的sql能力低,一些常用的mysql函数都不知道,有没有什么关于mysql的初级新手书推荐

学习mysql初学者建议需要掌握:
1、mysql简单入门
2、mysql查询命令(熟悉多表查询)
3、mysql数据类型
4、视图和存储结构
5、查询优化
学习过程总结,TeachCourse做好笔记,记录常用命令即可,关于书籍,建议先看视频,后面再看书,视频快速入门,书籍加深理解
《MYSQL入门很简单》
《深入浅出MYSQL数据库开发、优化与管理维护》
《PHP+MYSQL》
由浅入深。

网站数据信息

"sql快速入门,SQL实战新手入门:交叉联接(CROSS JOIN)"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:sql快速入门,SQL实战新手入门:交叉联接(CROSS JOIN)的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!