SQL Server 7.0 入门(一)

 更新时间:2016年11月25日 16:42  点击:1276
交互式SQL(Transact SQL,TSQL)
它是SQL Server的查询语言。提供以下命令:
· 创建和数据库对象。
· 访问和修改数据。
· 数据聚合(aggregation,又称聚集)。
· 实施安全措施。
数据库对象
数据库对象是数据库中的物理对象。这些对象拥有唯一的名字,并保存数据和数据关系信息。SQL Server定义了如下几种对象:
1、 表(table)
表是用来存储数据的两维数组,它有行和列。列也称为表属性或字段,表中的每一列拥有唯一的名字,每一列包含具体的数据类型,这个数据类型由列中的数据类型定义。
2、 视图(view)
视图是虚拟的表,它只包含表的一部分。与表不同的是,保存在视图中的数据并不是物理存储的数据,它是由表派生的,派生表被称为视图的基本表。视图的定义存储在数据库中。
3、 约束条件(constraint)
约束条件定义数据的完整性和有效性。约束条件为列中的值建立规则。换而言之,如果在某一列上定义了结束条件,则插入这一列的每一个值需要通过约束条件检查。约束条件是在触发器和规则上保证数据完整性和有效性的较佳选择。SQL Server Query Optimizer利用约束条件产生出低成本的查询计划。约束条件有如下类型:
· NOT NULL 这个约束条件要求列中不能有NULL值。
· CHECK 为列指定能拥有的值的集合后,检查约束条件。列中任何在定义之外的数据都为无效数据。有效值集合称为列的域。
· PRIMARY KEY 主关键字是列或列组合,它用来唯一标识一行。
· FOREIGN KEY 用来定义两个表之间的父子关系。如果一个关键字既是一个表的主关键字的一部分,同时又是另一个表的主关键字,则称它为外来关键字。外来关键字用来定义数据的引用完整性。
· UNIQUE 唯一约束条件是指无任何两行在列中有相同的NON-NULL值。唯一性由主关键字保证,但他们不允许NULL值,并且每一个表只能有一个关键字。
4、 默认值(default)
默认值是为列定义的值,如果在插入一行时没有提供某一列的值,则此列使用默认值,默认值可以是以下的一种:
· 常量
· 数学表达式
· 内部函数(Built-in function)
5、 规则(rule)
规则执行和CHECK约束条件同样的功能。但规则和约束条件不同的是:规则作为独立的对象存在,它可以用于多个表,而约束条件作为表的一部分存储。然而,规则是作为向后兼容特点而提供的,建议用户使用约束条件。
返回任何表达式所占用的字节数。
语法
DATALENGTH ( expression )
参数
expression
任何类型的表达式。
返回类型
int
注释
DATALENGTH 对 varchar、varbinary、text、image、nvarchar 和 ntext 数据类型特别有用,因为这些数据类型可以存储
可变长度数据。
NULL 的 DATALENGTH 的结果是 NULL。
说明 兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。
示例
此示例查找 publishers 表中 pub_name 列的长度。
USE pubs
GO
SELECT length = DATALENGTH(pub_name), pub_name
FROM publishers
ORDER BY pub_name
GO
下面是结果集:
length pub_name
----------- ----------------------------------------
20 Algodata Infosystems
16 Binnet & Hardley
21 Five Lakes Publishing
5 GGG&G
18 Lucerne Publishing
14 New Moon Books
17 Ramona Publishers
14 Scootney Books
(8 row(s) affected)

MySQL中create table语句的基本语法是:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
[table_options] [select_statement]
TEMPORARY:该关键字表示用create table新建的表为临时表,此表在当前会话结束后将自动消失。临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用。
IF NOT EXISTS:实际上是在建表前加上一个判断,只有该表目前尚不存在时才执行create table操作。用此选项可以避免出现表已经存在无法再新建的错误。
tbl_name:你所要创建的表的表名。该表名必须符合标识符规则。通常的做法是在表名中仅使用字母、数字及下划线。例如titles、our_sales、my_user1等都应该算是比较规范的表名。
create_definition:这是create table语句中关键部分所在。在该部分具体定义了表中各列的属性。
create_definition的基本语句是:
col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
or PRIMARY KEY (index_col_name,...)
or KEY [index_name] (index_col_name,...)
or INDEX [index_name] (index_col_name,...)
or UNIQUE [INDEX] [index_name] (index_col_name,...)
or [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
[reference_definition]
or CHECK (expr)
col_name:表中列的名字。必须符合标识符规则,而且在表中要唯一。
type:列的数据类型。有的数据类型需要指明长度n,并用括号括起。目前MySQL提供的数据类型详见MySQL进阶_列类型篇。
NOT NULL | NULL:指定该列是否允许为空。如果既不指定NULL也不指定NOT NULL,列被认为指定了NULL。
DEFAULT default_value:为列指定默认值。如果没有为列指定默认值,MySQL自动地分配一个。如果列可以取NULL作为值,缺省值是NULL。如果列被声明为NOT NULL,缺省值取决于列类型: 1、对于没有声明AUTO_INCREMENT属性的数字类型,缺省值是0。对于一个AUTO_INCREMENT列,缺省值是在顺序中的下一个值。
 2、对于除TIMESTAMP的日期和时间类型,缺省值是该类型适当的“零”值。对于表中第一个TIMESTAMP列,缺省值是当前的日期和时间。3、对于除ENUM的字符串类型,缺省是空字符串。对于ENUM,缺省值是第一个枚举值。
AUTO_INCREMENT:设置该列有自增属性,只有整型列才能设置此属性。当你插入NULL值或0到一个AUTO_INCREMENT列中时,列被设置为value 1,在这里value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。

如何不通过其他工具,把图片、声音等存储到sql中
用image类型
方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' @srvname
' /U ' @login
' /P ' @password
' /D ' @dbname
' /T ' @tbname
' /C ' @colname
' /W "' @whereclause
'" /F ' @filename
' /' @direction
EXEC master..xp_cmdshell @exec_str
2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x) -- 必须的,且不是null
insert 表名 values(2,0x) -- 必须的,且不是null
go
3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:图片.bmp','where 编号=1','I' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:b.doc','where 编号=2','I' --注意条件是 编号=2
go
4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:图片.bmp','where 编号=1','O' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:b.doc','where 编号=2','O' --注意条件是 编号=2
go
如果报textcopy不是可执行文件的话,你就到
C:Program FilesMicrosoft SQL ServerMSSQLBinn
目录下拷备 textcopy.exe到:
C:Program FilesMicrosoft SQL Server80ToolsBinn


cube操作符
要使用cube,首先要了解group by
其实cube和rollup区别不太大,只是在基于group by 子句创建和汇总分组的可能的组合上有一定差别,
cube将返回的更多的可能组合。如果在 group by 子句中有n个列或者是有n个表达式的话,
sqlserver在结果集上会返回2的n-1次幂个可能组合。
注意:
使用cube操作符时,最多可以有10个分组表达式
在cube中不能使用all关键字
例子:
我们在数据库统计中常常要查询以下情况:
如一个定单数据库,我们要知道每个定单的每个产品数量,每个定单的所有产品数量,所有定单的某一产品数量,所有定单所有产品总量这些汇总信息。这时使用cube就十分方便了。当然不需要这么多信息或者只想知道某一具体产品、具体某一定单,某一时间关系(前,后,之间)等等具体信息的话,只需在where中限定即可
先举一个例子,是所有情况的:
一个数据库表中记载了一个产品定购情况:
现共有三种产品(1,2,3),已经下了两个定单(1,2)
sql语句:
select productid,orderid SUM(quantity) AS total FROM order GROUP BY productid,orderid WITH CUBE
ORDER BY productid,orderid
运行后得到结果:
productid orderid total
null null 95 所有定单所有产品总量
null 1 30 定单1所有产品数量
null 2 65 定单2所有产品数量
1 null 15 所有定单产品1总量
1 1 5 定单1产品1数量
1 2 10 定单2产品1数量
2 null 35 所有定单产品2总量
2 1 10 定单1产品2数量
2 2 25 定单2产品2数量
3 null 45 所有定单产品3总量
3 1 15 定单1产品3数量
3 2 30 定单2产品3数量
如果您对sqlserver group by 聚集有一定理解的话,您就可以理解cube操作符的用法和作用。其实在现实运用中cube还是很好有的,我们经常要对一些数据库数据进行统计,以利于我们更好的掌握情况
我想电子商务可以更好的实现合理配置资源,尽量减少库存,只有更好的掌握生产、销售数据的具体情况,才能实现资源的合理配置。希望以后的企业象dell一样,不要象长虹等彩电厂商。


[!--infotagslink--]

相关文章

  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • photoshop画斜线/直线/虚线的入门级教程

    这篇文章算是超级入门级别的了,我们下面来给各位介绍在photoshop画斜线/直线/虚线的教程了,希望下面这篇文章给你入门来帮助。 PS怎么画斜线 选择铅笔工具,或者画笔...2016-09-14
  • PostgreSQL TIMESTAMP类型 时间戳操作

    这篇文章主要介绍了PostgreSQL TIMESTAMP类型 时间戳操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-26
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • postgresql 实现多表关联删除

    这篇文章主要介绍了postgresql 实现多表关联删除操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-02
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • Postgresql 如何选择正确的关闭模式

    这篇文章主要介绍了Postgresl 如何选择正确的关闭模式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • postgresql数据添加两个字段联合唯一的操作

    这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • Vscode上使用SQL的方法

    这篇文章主要介绍了Vscode上使用SQL的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-26
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • Centos5.5中安装Mysql5.5过程分享

    这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。安装cmake复制代码 代码如下: [root@local ~]# wget http://www.cm...2015-03-15
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • 用VirtualBox构建MySQL测试环境

    宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19