SQL是关系数据库中使用得最广泛的工具,已经成为关系数据库的标准数据操纵语言,它具有简单灵活、功能强大的特点。本章主要介绍SQL的一些基本知识,主要内容包括: *什么是SQL *SQL基本语句特点 *SQL数据类型 *表达式 *函数 1>什么是SQL
对SQL要了解的第一件事情是:它不象Cobol、C等高级语言,在这些语言中要解决一个问题,都必须写一个程序,描述出解决问题的每一个步骤。SQL是非过程化的,要用SQL解决一个问题,不必告诉系统如何去获得你需要的东西,只是简单地告诉系统你想要什么,那么数据库管理系统就会用一个自带的方法找出你需要的东西,例如:
select * from db_ckfh where name="john" and date="2000-10-01"
上面语句将查出数据表db_ckfh中,名字为john,日期为2000-10-01的所有信息,这里我们只是描述了要找的数据所具有的特征而并没有告诉系统如何去做。
SQL的主要功能有:
*数据定义 定义数据存放的结构,以及数据项之间的关系
*数据检索 使用户或应用程序可以从数据库中检索数据,并使用这些数据
*数据操纵 增加、修改或删除数据库中的数据
*存取控制 限制用户检索、增加和删除、修改数据的权限,以保护数据库中的数据不被非法存取
*数据共享 保证用户对数据进行访问时不互相干扰
*数据完整性 保证数据库中存放的数据的正确性和一致性
2>SQL基本语句
我们以Informix SQL语言为例,说说SQL的基本语句,由于SQL的语句大同小异,在用到其他数据库的时候,请参考相关资料。我们在工作中主要到,基本上所有的SQl语句都有一个固定的格式,例如:
update db_ckfh set name="stone" where date="2000-10-01" ------ ------- --- ---- ----- ----- ---- ---------- 动词| 表名 | 列名 常量 | 列名 常量 ----------------------------------------- | 关键字
基本每条SQL语句都以一个动词开头,用于描述该语句的功能,如select,delete,update等,接着是一个或多个子句,子句指明了该语句施加的对象或提供关于该语句行为的更详细说明,每个关键字也是以关键字开头,例如上面的set name="stone"和where date="2000-10-01"。
在informix SQL中,关键字以及数据库对象名都是不区分大小写的,因此,delete和DELETE对数据库来说是一样的。由用户定义的对象名(包括表名、列名、视图名、索引名等)必须由1~18个字符组成(数据库名限制在10个字符内),以字母开头,不能包含空格和特殊符号。用户定义的对象名不能与系统的保留字相重。
3>数据类型
Informix支持12种数值类型(别的根据数据库决定),分别为:
(1) integer 占32位二进制位,范围是-2^31~2^31-1即:-2147483648~2147483647 (2) smallint 占16位二进制位,范围是-2^16~2^16-1即:-32767~32767 (3) serial 当象表中插入一行数据时候,serial类型的值自动加一,范围同integer,同时注意:Informix限制每个数据表中只能有一个列是serial类型的,并且serial类型的值只能增加,当删除一行数据后,该行数据对应的数值不会被重新使用 (4) float和smallfloat 这两种类型的数据使用于不要求精度而要求量值的场合,如科学计算,float类型为双精度数,通常占8个字节,有16位十进制有效位,而smallint为单精度数,占4字节,8位十进制有效位。但数值超出精度范围,则都看作0处理 (5) decimal(p,s) 其中p是整个数据的有效位,s是小数点后位数,1(6) money(p,s) 同decimal完全相同,但显示money类型时候会自动显示现金符号,默认是 $ (7) date 日期型,随数据库不同而不同 (8) datetime 用于记录时间点,表示的精度可以任意指定,可以包含年份、月份、日时,在我们后面用到时会详细讲的,很好用的! (9) interval interval类型的数值用于表示两个时间点之间的间隔 (10) char(n)和vchar(n) 字符类型,n表示最大容纳的字符个数,汉字占两个字符,vchar最多容纳255个字符,char最多容纳32767个字符,但在内存中占用的字节数同n,而vchar在内存中占用的字节数是vchar类型值的实际长度 (11) BLOB BLOB是任意数值和长度的字节流,有text和byte两种数据,text用于存储ASCII字符文件,如文本文件等,byte用于存储任意数据,一般用来存储图片和声音文件等
我们顺便说下null值,null值是数据库中一种特殊值,表示某列的值不可知或没有用,null是一种表示,不代表任何值,不是0也不是空串,在以后的教程里你会经常看到和熟悉的。
4>表达式
SQL语言的表达式用于检索数据库的值和向数据库中插入数据。表达式主要用于select语句、带条件的delete语句和update语句以及execute procedure语句
*列表达式 由列名或取列的子串构成,如:
company 列company abc.company 表格abc的列company company[1,3] 列company中值的1~3位(该列的数据类型只能为:char,vchar,byte,text)
此外,列表达式还可以取rowid,rowid是每个表的一个隐含列,非分割表的每一行数据都有唯一的rowid
*常量表达式 由字符串、数字、时间常量或系统常量构成,如:
'name' TODAY 系统常量,表示系统日期 DBSERVERNAME 系统常量,表示数据库服务器的名字
*函数表达式 由函数调用构成,如:
MDY(7,6,1998) 由三个整数变成日期的函数,1998年7月6日 LENGTH('wang') 求字符串wang长度的函数
*聚组表达式 由聚组函数构成,用于计算一组数值的统计结果,详细见第五部分
*过程调用表达式 由存储过程名和实参值构成,如:
read_address('Miller')
*算术运算符 包括+、-、*、/,(加、减、乘、除),如:
quantity *anit_rpice money/2
*串接运算符 为两个相临的"|"构成"||",用于连接两个表达式,如:
phone[1,3]||phone[5,12] Date||TODAY
5>函数
(1) 算术函数 ABS(数值型表达式) 取绝对值 MOD(被除数,除数) 返回被除数与除数相除后的余数 POW(基数,指数) 幂函数,返回值为float 例如:3.2415926*POW(5.0,2.0)计算半径为5.0圆的面积 ROOT(数值型表达式,根次n) 计算表达式的n次方幂,若省略n,则计算平方根,n不能为0,返回float类型值 ROUND(表达式,精度) 按指定的精度对表达式的值做四舍五入处理,缺省值为0 例如:ROUND(12.234,2) 返回值为:12.23 SQRT(数值型表达式) 返回数值表达式的平方根 TRUNC(表达式,精度) 按指定的精度对表达式的值做截尾处理,精度为可选项,缺省为0,表示舍去小数部分,例如:TRUNC(123.3499,2) 返回: 123.34 (2) 三角函数 COS(弧度表达式) 余弦 SIN(弧度表达式) 正弦 TAN(弧度表达式) 正切 ASIN(弧度表达式) 反正弦 ACOS(弧度表达式) 反余弦 ATAN(弧度表达式) 反正切 (3) 指数/对数函数 EXP(表达式) 计算常数e的n次方,n由表达式指定 LOGN(表达式) 计算表达式的自然对数 LOG10(表达式) 计算表达式的以10为底的对数 (4) 日期/时间函数 DATE(非date型表达式) 将用非日期型值表示的日期转换为相应的date型数据 DAY(date/time型表达式) 取得date/datetime型表达式的日期 MONTH(date/time型表达式) 取得date/datetime型表达式的月份 WEEKDAY(date/time型表达式) 返回date/datetime型表达式的星期代号,返回值为整数,取值范围0~6,0代表星期日 YEAR(date/time型表达式) 取得date/datetime型表达式的年份 MDY(整型,整型,整型) 将分别用三个整数表达式表示的日期转换为相应的date类型的日期,三个整数,分别表示月,日,年 | | |