结构化查询语言(简称SQL),起源于20世纪70年代,是一种特殊目的的
编程语言,用于存取数据、查询、更新和管理关系数据库系统。SQL是基于关系代数和元组关系演算的编程语言,包括数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(DCL)。SQL具有极大的灵活性和强大的功能,允许用户在高层
数据结构上工作,而不需要了解具体的数据存放方式。 SQL最初是基于
E. F. Codd的
关系模型设计的,后来成为最为广泛运用的数据库语言。1986年,SQL成为
美国国家标准学会(ANSI)的标准,1987年成为
国际标准化组织(ISO)的标准。经过一系列的增订,SQL加入了大量新特性。尽管有标准的存在,但大部分的SQL代码在不同数据库系统中并不能完全具有跨平台性。
简介
结构化查询语言(Structured Query Language)简称SQL结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化
编程语言,允许用户在高层
数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使他具有极大的灵活性和强大的功能
发展历史
1. 1970: E.J. Codd 发表了关系数据库理论(relational database theory);2. 1974-79: IBM 以Codd的理论为基础开发了“sequel”,并重命名为"结构化查询语言";3. 1979:
Oracle数据库 发布了商业版结构化查询语言4. 1981-84:出现了其他商业版本,分别来自 IBM(DB2),Data General,Relational Technology(ingres);5. 结构化查询语言/86:ANSI 跟 ISO的第一个标准;6. 结构化查询语言/89:增加了
参照完整性(referential integrity);7. 结构化查询语言/92(aka 结构化查询语言2):被数据库管理系统(DBMS)生产商广发接受;8. 1997+:成为动态网站(Dynamic web content)的后台支持;9. 结构化查询语言/2003:包含了
XML相关内容,自动生成列值(column values);10. 结构化查询语言/2006:定义了结构化查询语言与XML(包含XQuery)的关联应用;11. 2006:Sun公司将以结构化查询语言基础的数据库管理系统嵌入Java V6
语句结构
结构化查询语言包含4个部分:※ 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。※ 数据操作语言(DML),例如:INSERT、UPDATE、DELETE语句。※ 数据查询语言(DQL),例如:SELECT语句。※ 数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。
五种数据类型
简要描述一下结构化查询语言中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型
1. 字符型
VARCHAR VS CHARVARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存
字符串长度小于255的字符。假如你向一个长度为四十个字符的VARCHAR型字段中输入数据BIll GAtES。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。现在假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格。当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的
内存和
HDD空间。当你的数据库很大时,这种内存和
磁盘空间的节省会变得非常重要
2. 文本型
文本使用文本型数据,你可以存放超过二十亿个字符的字符串。当你需要存储大串的字符时,应该使用文本型数据。注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空,要么很大。当你从
HTML fORM的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。但是,无论何时,只要你能避免使用文本型字段,你就应该不适用它。文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。文本型字段还会吃掉大量的
磁盘空间。一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。除非删除该记录,否则你无法收回这部分存储空间。
3. 数值型
整数INT 、
小数NUMERIC、钱数MONEYINT VS SMALLINT VS TINYINT通常,为了节省空间,应该尽可能的使用最小的整型数据。一个TINYINT型数据只占用一个
字节;一个INT型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一方面,一旦你已经创建了一个字段,要修改它是很困难的。因此,为安全起见,你应该预测以下,一个字段所需要存储的数值最大有可能是多大,然后选择适当的数据类型。NUMERIC为了能对字段所存放的数据有更多的控制,你可以使用NUMERIC型数据来同时表示一个数的整数部分和
小数部分。NUMERIC型数据使你能表示非常大的数——比INT型数据要大得多。一个NUMERIC型字段可以存储从-1038到1038范围内的数。NUMERIC型数据还使你能表示有小数部分的数。例如,你可以在NUMERIC型字段中存储小数3.14。MONEY VS SMALLMONEY你可以使用 INT型或NUMERIC型数据来存储钱数。但是,专门有另外两种数据类型用于此目的。如果你希望你的网点能挣很多钱,你可以使用MONEY型数据。如果你的野心不大,你可以使用SMALLMONEY型数据。MONEY型数据可以存储从-922,337,203,685,477.5808到922,337,203,685,477.5807的钱数。如果你需要存储比这还大的金额,你可以使用NUMERIC型数据。SMALLMONEY型数据只能存储从-214,748.3648到214,748.3647 的钱数。同样,如果可以的话,你应该用SMALLMONEY型来代替MONEY型数据,以节省空间。
4. 逻辑型
BIT如果你使用复选框( CHECKBOX)从网页中搜集信息,你可以把此信息存储在BIT型字段中。BIT型字段只能取两个值:0或1。当心,在你创建好一个表之后,你不能向表中添加 BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。
5. 日期型
DATETIME VS SMALLDATETIME一个 DATETIME型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。如果你不需要覆盖这么大范围的日期和时间,你可以使用SMALLDATETIME型数据。它与DATETIME型数据同样使用,只不过它能表示的日期和时间范围比DATETIME型数据小,而且不如DATETIME型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只能精确到秒。DATETIME型字段在你输入日期和时间之前并不包含实际的数据,认识这一点是重要的。
精华使用简要
简单的Transact-结构化查询语言查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或
视图、以及搜索条件等。
1. 选择列表
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。1、选择所有列例如,下面语句显示testtable表中所有列的数据:SELECT * FROM testtable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。3、更改列标题在选择列表中,可重新指定列标题。定义格式为:列标题=列名 列名 列标题如果指定的列标题不是标准的
标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题: SELECT 昵称=nickname,电子邮件=email FROM testtable4、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。5、限制返回的行数使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
2. FROM子句
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:
3. WHERE子句
WHERE子句设置查询条件,过滤掉不需要的数据行。WHERE子句可包括各种条件运算符:比较运算符(大小比较):\u003e、\u003e=、=、\u003c、\u003c=、\u003c\u003e、!\u003e、!\u003c范围运算符(表达式值是否在指定的范围):BETWEEN…AND…NOT BETWEEN…AND…列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)NOT IN (项1,项2……)模式匹配符(判断值是否与指定的
字符通配格式相符):LIKE、NOT LIKE空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR1、范围运算符例:age BETWEEN 10 AND 30相当于age\u003e=10 AND age\u003c=302、列表运算符例:country IN ('Germany','China')3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、
文本、ntext、datetime和smalldatetime等类型查询。可使用以下通配
字符:
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
4. 查询结果排序
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:ORDER BY {column_
人名 [ASC|DESC]} [,…n]其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排序。
参考资料
Warning: Invalid argument supplied for foreach() in
/www/wwwroot/newbaike1.com/id.php on line
362