2、SQL语言概述
1.SQL语言介绍
SQL(Structured Query language)是一种结构化的查询语言,它是实现与关系数据库通信的标准语言。SQL标准是由ISO(国际标准化组织)和ANSI(美国国家标准化组织)共同制定的,从1983年开始到目前经历的标准主要有SQL86、SQL89、SQL92、SQL99、SQL2003。
不同厂商的SQL产品及其关系数据库管理系统在SQL的实现上大部分是与SQL标准相兼容的,但是它们也并不是完全按照这个标准来实现,因此不同厂商生产的关系数据库系统在SQL的实现上还是有所差异的。另外,不同厂商生产的关系数据库系统对都对SQL做了不同程度的扩展,目前流行的对标准SQL的扩展版本主要有两个,PL/SQL 和Transact-SQL。
PL/SQL是基于Oracle数据库的通信语言,Oracle公司已经将PL/SQL语言集成到Oracle的服务器中,它可以运行在任何的Oracle开发环境中。
Transact-SQL是基于Sybase数据库与Microsoft SQL Server数据库中的数据库通信语言。其主要的运行环境是SQL Server Management Studio和SQLCMD。
SQL语句主要包括数据定义语言(DDL)、数据查询语言(DQL)、数据操作语言(DML)、数据控制语言(DCL)和事务控制语言等。
数据定义语言(DDL):主要用于创建、修改和删除数据库对象(数据表、视图、索引等),包括CREATE、ALTER、DROP这3条语句。
数据查询语言(DQL):主要用于查询数据库中的数据。其主要语句为SELECT语句。SELECT语句是SQL语言中最重要的部分。SELECT语句中主要包括5个子句,分别是FROM子句,WHERE子句,GROUP BY子句,HAVING子句和WITH子句。
数据操作语言(DML):主要用于更新数据库里数据表表中的数据,包括INSERT、UPDATE、DELETE三条语句。其中,INSERT语句用于向数据库中插入数据;UPDATE语句用于修改数据库中的数据;DELETE语句用于删除数据库中的数据。
数据控制语言(DCL):主要用授予和回收访问数据库的某种权限。包括GRANT、REVOKE等语句。其中,GRANT语句用于向用户授予权限;REVOKE语句向用户收回权限。
事务控制语言:英文全拼为Transactional Control Statement。主要用于数据库对事务的控制,保证数据库中数据的一致性,包括COMMIT、ROLLBACK等语句。其中,COMMIT用于事务的提交;ROLLBACK用于事务的回滚。
SQL语言的特点:简单易学,语言结构简便、非过程化语言、采用集合操作方式、SQL语言能够嵌入到高级语言中。
2.常用数据类型
在创建数据表时,除了需要创建数据表的表名、列名之外,还需要为数据表中的每一列选择合适的数据类型。在数据库中,常用的数据类型包括整数类型、浮点类型、数值类型、日期时间类型、字符类型、二进制类型等。不同的数据库中,数据类型的定义也不完全相同。这一节就以Oracle数据库、MySQL数据库和Microsoft SQL Server数据库为例,介绍在这3种数据库中,常用的数据类型定义及其使用方法。
整数类型与浮点类型
整数类型的数据可以是正整数,也可以是负整数。在MySQL数据库中,这些整数类型还可以带一个参数用来表示数据最大显示的宽度。例如INT(4)表示显示数据列的列宽度为4。使用参数并不影响整数类型的取值范围。这个参数是可选的。
在MySQL数据库中,浮点类型主要包括FLOAT和DOUBLE。其中,FLOAT表示单精度浮点数,DOUBLE表示双精度浮点数。
在MySQL数据库中,这些浮点数类型还可以包括两个参数。其中,参数m表示存储数据的有效数字的位数;参数n表示小数点后的位数。
在Microsoft SQL Server数据库中,也可以使用TINYINT、SMALLINT、INT和BIGINT存储整型数据,其取值范围与表表2.1中TINYINT、SMALLINT、INT和BIGINT类型的取值范围相同。
浮点类型数据可以定义为REAL类型和FLOAT类型。其中,REAL类型占用4个字节的存储空间,可以精确到小数点后7位,其取值范围为-2.4E38到2.4E38;FLOAT类型占用8个字节的存储空间,可以精确到小数点后15位,其取值范围为-2.7E308到2.7E308。
数值类型
在Oracle数据库中。可以使用NUMBER(m,n)来定义数字类型的数据。其中,参数m表示存储数据的有效数字的位数;参数n表示小数点后的位数。例如NUMBER(5,2),第一个参数5表示显示的数字总位数为5,第二个参数表示小数点后的数字个数。如果把数据122.456插入到定义为NUMBER(5,2)的数据列中,则实际放入到该列的数据为122.46。
字符类型
在数据库中,字符类型是用来存储字符串值的。不同的数据库,字符类型的定义也不完全相同,下面以Oracle数据库、MySQL数据库以及Microsoft SQL Server数据库为例,介绍在这3种数据库中字符类型不同的定义方法。
1.Oracle数据库
CHAR或者是VARCHAR2
2.MySQL数据库
CHAR、VARCHAR、TEXT、MEDIUMTEXT、LONGTEXT
3.Microsoft SQL Server数据库
CHAR,VARCHAR、TEXT
注意:使用CHAR定义的列存储的字符串所占空间是不可变的,使用VARCHAR2定义的列存储的字符串所占空间是可变的。
日期与时间类型
在数据库中,日期与时间类型是用来存储日期和时间值的。不同的数据库,日期与时间类型的定义也不完全相同,下面以Oracle数据库、MySQL数据库以及Microsoft SQL Server数据库为例,介绍在这3种数据库中日期与时间类型不同的定义方法。
1.Oracle数据库
在Oracle数据库中可以使用DATE、TIMESTAMP等形式定义日期时间类型的数据。其中DATE类型在英文版本中日期的默认格式为DD-MON-YY的形式。例如,10-SEP -09;在中文版本中的默认日期格式为'日-月-年',例如,10-9月-09。
TIMESTAMP类型在英文版本中日期的默认格式为DD-MON-YY HH.MM.SS.AM。例如,10-SEP -09 12.22.000000 PM。在中文版本中的默认日期格式为'日-月-年 时、分、秒',例如,10-9月-09 12.22.000000 下午。它除了包含时、分、秒之外,还包含了秒的小数部分。秒值精确到小数点后6位。
2.MySQL数据库
DATE类型的数据默认格式为YYYY-MM-DD,例如,2009-08-10
TIME类型的数据默认格式为HH:MM:SS,例如,18:13:23
DATETIME类型的数据默认格式为YYYY-MM-DD HH:MM:SS,例如,2009-08-10 18:13:23。
3.Microsoft SQL Server数据库
DATETIME类型需要8个字节的存储空间,其日期的取值范围从1753年1月1日到9999年12月31日。
SMALLDATETIME类型需要4个字节的存储空间,其日期的取值范围从1900年1月1日到2079年6月6日,时间部分可以精确到分钟。SMALLDATETIME类型的精确度没有DATETIME类型的精确度高。
SQL Server 2008中,增加了四种DATETIME类型的数据,分别为DATE、TIME、DATETIMEOFFSET和DATETIME2。
二进制类型
注:含义BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器
在数据库中,二进制类型是用来存储二进制数据的。不同的数据库,二进制类型的定义也不完全相同,在Oracle数据库中可以使用BLOB存储二进制数据信息,最多可以存储4GB。
在MySQL数据库中除了可以使用BLOB存储二进制的数据一位,还可以使用TINYBLOB、MEDIUMBLOB、LONGBLOB等存储二进制类型的数据。在Microsoft SQL Server数据库中,可以使用BINARY、VARIBINARY和IMAGE存储二进制数据信息。其中,在IMAGE数据类型中存储的数据是以位字符串存储的,它不是通过Microsoft SQL Server解释的,而是需要通过应用程序来解释。
3.SQL语句书写规范
在使用SQL语言执行数据的查询、更新等操作时,还需要了解SQL语言书写规范。这一节就来介绍SQL语言中一些主要的书写规范。
SQL语言中不区分关键字的大小写。
SELECT teaID,teaName,age FROM T_teacher WHERE age > 30
select teaID,teaName,age from T_teacher where age > 30
SQL语言中不区分列名和对象名的大小写。
SQL语言中对数据库中的数据是大小写敏感的。
SQL语言中单行注释可以使用“--”。 使用“--”进行单行注释时,“--”后面至少要有一个空格。
多行注释可以使用“/*注释内容*/”。其中,以“/*”开头到“*/”结尾的内容都属于被注释的内容。
SQL中的语句可以写在一行,也可以写在多行上。