SQL的语法和规则

SQL 语法参考手册(SQL)/数据类型 
2006-07-24 07:42 
《SQL 语法参考手册(SQL)》 
DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的*作,包含了资料的定义(DDL)以及资料的处理(DML)。SQL原来拼成SEQUEL,这语言的原型以“系统 R“的名字在 IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R 的技术基础发展出来 IBM 的产品。而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以 IBM SQL 为基础的标准关连式资料语言定义。 

一、资料定义 DDL(Data Definition Language) 
资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。 

1、建表格: 
Create TABLE table_name( 
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY], 
column2 DATATYPE [NOT NULL], 
...) 
说明:  
DATATYPE --是资料的格式,详见表。 
NUT NULL --可不可以允许资料有空的(尚未有资料填入)。 
PRIMARY KEY --是本表的主键。 

2、更改表格  
Alter TABLE table_name 
ADD COLUMN column_name DATATYPE 
说明:增加一个栏位(没有删除某个栏位的语法。 
Alter TABLE table_name 
ADD PRIMARY KEY (column_name) 
说明:更改表得的定义把某个栏位设为主键。 
Alter TABLE table_name 
Drop PRIMARY KEY (column_name) 
说明:把主键的定义删除。 

3、建立索引  
Create INDEX index_name ON table_name (column_name) 
说明:对某个表格的栏位建立索引以增加查询时的速度。 

4、删除  
Drop table_name 
Drop index_name 

二、的资料形态 DATATYPEs 
smallint 
16 位元的整数。 
interger 
32 位元的整数。 
decimal(p,s) 
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数 
点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 
float 
32位元的实数。 
double 
64位元的实数。 
char(n) 
n 长度的字串,n不能超过 254。 
varchar(n) 
长度不固定且其最大长度为 n 的字串,n不能超过 4000。 
graphic(n) 
和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为 
了支援两个字元长度的字体,例如中文字。 
vargraphic(n) 
可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。 
date 
包含了 年份、月份、日期。 
time 
包含了 小时、分钟、秒。 
timestamp 
包含了 年、月、日、时、分、秒、千分之一秒。 

三、资料*作 DML (Data Manipulation Language) 
资料定义好之後接下来的就是资料的*作。资料的*作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法: 

1、增加资料: 
Insert INTO table_name (column1,column2,...) 
valueS ( value1,value2, ...) 
说明: 
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。 
2.栏位的资料形态和所填入的资料必须吻合。 
3.table_name 也可以是景观 view_name。 

Insert INTO table_name (column1,column2,...) 
Select columnx,columny,... FROM another_table 
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。 

2、查询资料: 
基本查询 
Select column1,columns2,... 
FROM table_name 
说明:把table_name 的特定栏位资料全部列出来 
Select * 
FROM table_name 
Where column1 = xxx 
[AND column2 〉 yyy] [OR column3 〈〉 zzz] 
说明: 
1.’*’表示全部的栏位都列出来。 
2.Where 之後是接条件式,把符合条件的资料列出来。 

Select column1,column2 
FROM table_name 
orDER BY column2 [DESC] 
说明:ORDER BY 是指定以某个栏位做排序,[DESC]是指从大到小排列,若没有指明,则是从小到大 
排列 

组合查询 
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的 
表格才能够得到结果的。 
Select * 
FROM table1,table2 
Where table1.colum1=table2.column1 
说明: 
1.查询两个表格中其中 column1 值相同的资料。 
2.当然两个表格相互比较的栏位,其资料形态必须相同。 
3.一个复杂的查询其动用到的表格可能会很多个。 

整合性的查询: 
Select COUNT (*) 
FROM table_name 
Where column_name = xxx 
说明: 
查询符合条件的资料共有几笔。 
Select SUM(column1) 
FROM table_name 
说明: 
1.计算出总和,所选的栏位必须是可数的数字形态。 
2.除此以外还有 AVG() 是计算平均、MAX()、MIN()计算最大最小值的整合性查询。 
Select column1,AVG(column2) 
FROM table_name 
GROUP BY column1 
HAVING AVG(column2) 〉 xxx 
说明: 
1.GROUP BY: 以column1 为一组计算 column2 的平均值必须和 AVG、SUM等整合性查询的关键字 
一起使用。 
2.HAVING : 必须和 GROUP BY 一起使用作为整合性的限制。 

复合性的查询 
Select * 
FROM table_name1 
Where EXISTS ( 
Select * 
FROM table_name2 
Where conditions ) 
说明: 
1.Where 的 conditions 可以是另外一个的 query。 
2.EXISTS 在此是指存在与否。 
Select * 
FROM table_name1 
Where column1 IN ( 
Select column1 
FROM table_name2 
Where conditions ) 
说明:  
1. IN 後面接的是一个集合,表示column1 存在集合里面。 
2. Select 出来的资料形态必须符合 column1。 

其他查询 
Select * 
FROM table_name1 
Where column1 LIKE ’x%’ 
说明:LIKE 必须和後面的’x%’ 相呼应表示以 x为开头的字串。 
Select * 
FROM table_name1 
Where column1 IN (’xxx’,’yyy’,..) 
说明:IN 後面接的是一个集合,表示column1 存在集合里面。 
Select * 
FROM table_name1 
Where column1 BETWEEN xx AND yy 
说明:BETWEEN 表示 column1 的值介於 xx 和 yy 之间。 

3、更改资料: 
Update table_name 
SET column1=’xxx’ 
Where conditoins 
说明: 
1.更改某个栏位设定其值为’xxx’。 
2.conditions 是所要符合的条件、若没有 Where 则整个 table 的那个栏位都会全部被更改。 

4、删除资料: 
Delete FROM table_name 
Where conditions 
说明:删除符合条件的资料。 

说明:关于Where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下: 
(1)如果是ACCESS数据库,则为:Where mydate〉#2000-01-01# 
(2)如果是ORACLE数据库,则为:Where mydate〉cast(’2000-01-01’ as date) 
或:Where mydate〉to_date(’2000-01-01’,’yyyy-mm-dd’) 
在Delphi中写成: 
thedate=’2000-01-01’; 
query1.SQL.add(’select * from abc where mydate〉cast(’+’’’’+thedate+’’’’+’ as date)’); 

如果比较日期时间型,则为: 
Where mydatetime〉to_date(’2000-01-01 10:00:01’,’yyyy-mm-dd hh24:mi:ss’) 



Recordset对象一些有用的属性"/〉 引用来自 增加一个 :Recordset对象一些有用的属性 
rs.CursorType= 
rs.CursorLocation= 
rs.LockType = 
rs.CacheSize= 
rs.Pagesize= 
rs.Pagecount= 
rs.RecordCount= 

’’---- CursorType Values ---- 
Const adOpenForwardOnly = 0 仅向前 
Const adOpenKeyset = 1 键集游标 
Const adOpenDynamic = 2 动态游标 
Const adOpenStatic = 3 静态游标 

’’---- LockType Values ---- 
Const adLockReadOnly = 1 默认值,只读 
Const adLockPessimistic = 2 保守式记录锁定 
Const adLockOptimistic = 3 开放式记录锁定,只在调用Update方法时锁定记录 
Const adLockBatchOptimistic = 4 开放式批更新 

’’---- CursorLocation Values ---- 
Const adUseServer = 2 
Const adUseClient = 3 

Set rs=Server.CreateObject("ADODB.Rrecordset") 
rs.Open.sqlst,conn,1,1 ’读取 
rs.Open sqlst,conn,1,2 ’新增,修改,或删除) 



下一页 :《SQL SERVER的数据类型》 
〉〉〉---------我想分页!--这么长的文章,在这里来个分页多好啊!哈哈----------〈〈〈 
《SQL SERVER的数据类型》 

1.SQL SERVER的数据类型 

  数据类弄是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer 提供了 25 种数据类型: 
  ·Binary [(n)] 
  ·Varbinary [(n)] 
  ·Char [(n)] 
  ·Varchar[(n)] 
  ·Nchar[(n)] 
  ·Nvarchar[(n)] 
  ·Datetime 
  ·Smalldatetime 
  ·Decimal[(p[,s])] 
  ·Numeric[(p[,s])] 
  ·Float[(n)] 
  ·Real 
  ·Int 
  ·Smallint 
  ·Tinyint 
  ·Money 
  ·Smallmoney 
  ·Bit 
  ·Cursor 
  ·Sysname 
  ·Timestamp 
  ·Uniqueidentifier 
  ·Text 
  ·Image 
  ·Ntext 
(1)二进制数据类型 

  二进制数据包括 Binary、Varbinary 和 Image 
  Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。 
  Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。 
  Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。 
  在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。 
(2)字符数据类型 

  字符数据的类型包括 Char,Varchar 和 Text 
  字符数据是由任何字母、符号和数字任意组合而成的数据。 
  Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。 
(3)Unicode 数据类型 

  Unicode 数据类型包括 Nchar,Nvarchar 和Ntext 
  在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。 
  在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。 
(4)日期和时间数据类型 

  日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型 
  日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。 
  日期的格式可以设定。设置日期格式的命令如下: 
  Set DateFormat {format | @format _var| 
  其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。 
  例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式 
(5)数字数据类型 

  数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数 
  整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是    Int,Smallint和 Tinyint。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。 
  精确小娄数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。 
  在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。 
(6)货币数据表示正的或者负的货币数量 。 

  在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney 
  Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。 

(7)特殊数据类型 

  特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即    Timestamp、Bit 和 Uniqueidentifier。 
  Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。 
  Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。 
  Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。 
2.用户定义的数据类型 

  用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为   postal_code 的数据类型,它基于 Char 数据类型。 
  当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。 
(1)创建用户定义的数据类型 

  创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下: 
  sp_addtype {type},[,system_data_bype][,’null_type’] 
  其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char   等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如’NULL’、’NOT NULL’或者’NONULL’。 
  例子: 
  Use cust 
  Exec sp_addtype ssn,’Varchar(11)’,"Not Null’ 
  创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。 
  例子: 
  Use cust 
  Exec sp_addtype birthday,datetime,’Null’ 
  创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。 
  例子: 
  Use master 
  Exec sp_addtype telephone,’varchar(24),’Not Null’ 
  Eexc sp_addtype fax,’varchar(24)’,’Null’ 
  创建两个数据类型,即 telephone 和 fax 
(2)删除用户定义的数据类型 

  当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {’type’}。 
  例子: 
  Use master 
  Exec sp_droptype ’ssn’ 
  注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。 
  以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。 

字段类型 描述 
bit 0或1的整型数字 
int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 
smallint 从-2^15(-32,768)到2^15(32,767)的整型数字 
tinyint 从0到255的整型数字 

decimal 从-10^38到10^38-1的定精度与有效位数的数字 
numeric decimal的同义词 

money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十 
smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十 

float 从-1.79E+308到1.79E+308可变精度的数字 
real 从-3.04E+38到3.04E+38可变精度的数字 

datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒 
smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟 

timestamp 时间戳,一个数据库宽度的唯一数字 
uniqueidentifier 全球唯一标识符GUID 

char 定长非Unicode的字符型数据,最大长度为8000 
varchar 变长非Unicode的字符型数据,最大长度为8000 
text 变长非Unicode的字符型数据,最大长度为2^31-1(2G) 

nchar 定长Unicode的字符型数据,最大长度为8000 
nvarchar 变长Unicode的字符型数据,最大长度为8000 
ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G) 

binary 定长二进制数据,最大长度为8000 
varbinary 变长二进制数据,最大长度为8000 
image 变长二进制数据,最大长度为2^31-1(2G) 
〉〉〉---------我想分页!--这么长的文章,在这里来个分页多好啊!哈哈----------〈〈〈 
《SQL语句的基本语法》 

一.Select语句的完整语法为: 
Select[ALL|DISTINCT|DISTINCTROW|TOP] 
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]} 
FROM tableexpression[,…][IN externaldatabase] 
[Where…] 
[GROUP BY…] 
[HAVING…] 
[ORDER BY…] 
[WITH OWNERACCESS OPTION] 
说明: 
用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。 

1 FROM子句 
FROM子句指定了Select语句中字段的来源。FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 得到的复合结果。如果表或查询存储在外部数据库,在IN 子句之后指明其完整路径。 
例:下列SQL语句返回所有有定单的客户: 
Select orderID,Customer.customerID 
FROM orders Customers 
Where orders.CustomerID=Customers.CustomeersID 

2 ALL、DISTINCT、DISTINCTROW、TOP谓词 
(1) ALL 返回满足SQL语句条件的所有记录。如果没有指明这个谓词,默认为ALL。 
例:Select ALL FirstName,LastName 
FROM Employees 
(2) DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。 
(3) DISTINCTROW 如果有重复的记录,只返回一个 
(4) TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用 TOP N PERCENT子句(其中N 表示百分比) 
例:返回5%定货额最大的定单 
Select TOP 5 PERCENT* 
FROM [ order Details] 
orDER BY UnitPrice*Quantity*(1-Discount) DESC 

3 用 AS 子句为字段取别名 
如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它放到一个新的列里显示,则用AS保留。 
例:返回FirstName字段取别名为NickName 
Select FirstName AS NickName ,LastName ,City 
FROM Employees 
例:返回新的一列显示库存价值 
Select ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock 
FROM Products

原文地址:https://www.cnblogs.com/cotty/p/1798330.html