informix sql汇总包括效率分析.docx
- 文档编号:12766662
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:36
- 大小:29.37KB
informix sql汇总包括效率分析.docx
《informix sql汇总包括效率分析.docx》由会员分享,可在线阅读,更多相关《informix sql汇总包括效率分析.docx(36页珍藏版)》请在冰豆网上搜索。
informixsql汇总包括效率分析
informixSQL汇总
每个数据库管理系统(DBMS)都有其自己的数据处理语言(DML),但所有DML都基于一种语言SQL语言——结构化查询语言(SQL),其发音为“sequel”或“S-Q-L”。
目前SQL的前身是E.F.Codd博士70年代发明的。
第一个实现是在76年,称为sequel。
而SQL首先被采用是在IBM的SystemR项目中。
86年10月由ANSI确定为正式的关系查询语言标准。
ISO在对其修改后在90年制定为国际工业标准。
无论进行何种数据库学习,SQL语言都是必学内容。
在我国数据库语言SQL标准(GB12991)中规定了两个数据库语言的语法与语义:
模式定义语言(SQL-DDL),描述SQL数据库的结构与完整性的约束;
数据操纵语言(SQL-DML),描述操作数据库的执行语句
在本文章中涉及以上两个中的主要部分,(为叙述方便,以下对其统称为SQL),由于SQL在嵌入C时表现略有不同,所以下面均以非嵌入时的SQL进行。
另外本文章也不是SQL的入门教材,阅读者应学习并实际用SQL操作过某种数据库。
如果你系统学习过数据库理论,又能熟练操作INFORMIX关系数据库,甚至从事过有关数据库程序的设计,还那么作者在此恭喜你了。
如果你尚未系统学习过数据库理论,并对INFORMIX数据库了解甚少,建议你先阅读有关的文档。
informixSQL汇总
【主要SQL语句详解】
CREATEDATABASEdatabase_name[WITHLOGIN“pathname”]
创建数据库。
database_name:
数据库名称。
“pathname”:
事务处理日志文件。
创建一database_name.dbs目录,存取权限由GRANT设定,无日志文件就不能使用
BEGINWORK等事务语句(可用STARTDATABASE语句来改变)。
可选定当前数据库的日志文件。
如:
selectdirpathformsystableswheretabtype=“L”;
例:
createdatabsecustomerdbwithlogin“/usr/john/log/customer.log”;
DATABASEdatabse-name[EXCLUSIVE]
选择数据库。
database_name:
数据库名称。
EXCLUSIVE:
独占状态。
存取当前目录和DBPATH中指定的目录下的数据库,事务中处理过程中不要使用此语句。
例:
dtabasecustomerdb;
CLOSEDATABASE
关闭当前数据库。
database_name:
数据库名称。
此语句之后,只有下列语句合法:
CREATEDATABASE;DATABASE;DROPDATABSE;ROLLFORWARDDATABASE;
删除数据库前必须使用此语句。
例:
closedatabase;
DROPDATABASEdatabase_name
删除指定数据库。
database_name:
数据库名称。
用户是DBA或所有表的拥有者;删除所有文件,但不包括数据库目录;不允许删除当前数据库(须先关闭当前数据库);事务中处理过程中不能使用此语句,通过ROLLBACKWORK也不可将数据库恢复。
例:
dropdatabsecustomerdb;
CREATE[TEMP]TABLEtable-name(column_namedatatype[NOTNULL],…)
[IN“pathname”]
创建表或临时表。
table-name:
表名称。
column_name:
字段名称。
data-type:
字段数据类型。
path-name:
指定表的存放位置
TEMP用于指定建立临时表;表名要唯一,字段要唯一;有CONNECT权限的用户可建立临时表;创建的表缺省允许CONNECT用户存取,但不可以ALTER。
例:
createtableuser
(c0serialnotnull,c1char(10),
c2char
(2),
c3smallint,
c4decimal(6,3),
c5date
)in“usr/john/customer.dbs/user;
ALTERTABLE
ALTERTABLEtable-name
{ADD(newcol_namenewcol_type[BEFOREoldcol_name],…)|DROP(oldcol_name,…)
|MODIFY(oldcol_namenewcol_type[NOTNULL],…)},…
修改表结构。
table-name:
表名称。
newcol_name:
新字段名称
newcol_type:
新字段类型
oldcol_name:
老字段名称
可以使用单个或多个ADD子句、DROP子句、MODIFY子句,但某个字句失败,操作即中止;原字段是NULL,不允许MODIFY为NOTNULL,除非所有NULL字段中均非空,反之可以;ALTER使用者是表的拥有者或拥有DBA权限,或被授权;事务中处理过程中不要使用此语句。
例:
altertableuser
add(c6char(20)beforec5);
RENAMETABLEoldnameTOnewname
修改表名。
oldname:
原名称。
newname:
新名称。
RENAME使用者是表的拥有者或拥有DBA权限,或被授权;事务中处理过程中不要使用此语句。
例:
renameusertobbb;
DROPTABLEtable-name
删除表。
table-name:
表名称。
删除表意味着删除其中所有数据、各字段上的索引及对表的赋权、视图等;用户不能删除任何系统目录表;语句使用者是表拥有者或拥有DBA权限,事务中处理过程中不要使用此语句。
RENAMECOLUMNtable.oldcolumn,TOnewcolumn
修改字段名。
table.oldcolumn:
表名及原字段名称
newcolumn:
新字段名称。
语句使用者是表的拥有者或拥有DBA权限或有ALTER权限的用户,事务中处理过程中不要使用此语句。
例:
renamecolumnuser.c6toc7;
CREATEVIEWview-namecolumn-list
CREATEVIEWview-namecolumn-listASselect_statement[WITHCHECKOPTION]
创建视图。
view-name:
视图名称。
column-list:
字段列表。
select_statement:
SELECT语句。
以下语句不使用视图:
ALTERTABLE,DROPINDEX,ALTERINDEX,LOCKTABLE,CREATEINDEX,RENAMETABLE;视图将延用基表的字段名,对表达式等虚字段和多表间字段重名必须指明标识其字段名;若对视图中某些字段命名,则所有字段都必须命名;视图中数据类型延用基表中的数据类型,虚字段起诀于表达式;不能使用ORDERBY和UNION子句;对视图中所有的字段要有SELECT权限;事务中处理过程中使用此语句,即使事务回滚,视图也将建立,不能恢复。
例:
createviewv_userasselect*fromuserwherec1=“B1”;
DROPVIEWview-name
删除视图。
view-name:
视图名称。
用户可删除自己建立的视图;视图的后代视图也被删除;事务中处理中不要使用此语句。
例:
dropviewv_user;
CREATEINDEX
CREATE[UNIQUE/DISTINCT][CLUSTER]INDEXindex_nameONtable_name
([column_nameASC/DESC],…)
创建索引。
index_name:
索引名称。
table_name:
表名称。
column_name:
字段名称。
UNIQUE/DISTINCT:
唯一索引。
CLUSTER:
使表的物理存放顺序按索引排列。
ASC/DESC:
升序或降序,缺省升序。
语句执行时,将表的状态置为EXCLUSIVE;复合索引最多包含8个字段,所有字段长度和不得大于120字节;事务中处理过程中使用此语句,即使事务回滚,索引将建立,不能恢复。
例:
createclusterindexix_useronuser(c5);
ALTERINDEXindex-nameTO[NOT]CLUSTER
修改索引性质。
index-name:
索引名称。
TO[NOT]CLUSTER:
去掉或加上CLUSTER属性。
语句执行时,将表的状态置为EXCLUSIVE;事务中处理过程中使用此语句,即使事务回滚,索引性质将改变,不能恢复。
例:
alterindexix_usertonotcluster;
DROPINDEXindex-name
删除索引。
index-name:
索引名称。
语句使用者是索引的拥有者或拥有DBA权限,事务中处理过程中不要使用此语句,否则事务无法恢复。
例:
dropindexix_user;
CREATESYNONYMsynonymFORtable-name
创建同义名。
synonym:
同义名
table-name:
表名称
数据库的创建者可以使用同义名;没有赋予同义名权限的用户不能使用同义名;同义名不能和表名相同;事务中处理过程中不要使用此语句。
例:
createsynonymuser_aliasforuser;
DROPSYNONYMsynonym
删除同义名。
synonym:
同义名
可以删除自己建立的同义名;事务中处理过程中不要使用此语句,否则无法恢复。
例:
dropsynonymuser_alias;
UPDATESTATISTICS[FORTABLEtable-name]
更新数据库的统计数字。
table-name:
表名称
此语句仅作用于当前数据库;可提高查询效率;只有执行此语句,才改变统计数据。
例:
updatestatisticsfortableuser;
GRANT{DBA|RESOURCE|CONNECT}TO{PUBLIC|user-list}
授权命令。
PUBLIC|user-list:
全部或指定的用户。
三种权限居且仅居其一,事务处理过程中不要执行GRANT语句。
例:
grantresourcetopulbic;
GRANTtab-privilegeONtable-nameTO{PUBLIC|user-list}[WITHGRANTOPTION]
授表级权限。
tab-privilege:
表级权限。
table-name:
表名称。
PUBLIC|user-list:
全部或指定的用户。
[WITHGRANTOPTION]:
表示被授权用户有否权限进行二次授权。
用户可以在自己建立表达式或被[WITHGRANTOPTION]准许的表中进行赋权;限定越多的权限优先级越高。
例:
grantupdate(c1,c6)onusertodickwithgrantoption;
附(INFORMIX的权限)
(1)数据库的权限(控制对数据库的访问以及数据库中表的创建和删除)
DBA权限:
全部权利,修改系统表,建立和删除表与索引、增加和恢复表数据,以及授予其他用户数据库权限等;
RESOURCE权限:
允许对数据库表中的数据进行存取,建立永久性表以及索引。
CONNECT权限:
只允许对数据库表中的数据进行存取,建立和删除视图与临时表。
(2)表级权限(对表的建立、修改、检索和更新等权限)
ALTER:
更改权限
DELETE:
删除权限
INDEX:
索引权限
INSERT:
插入权限
SELECT[(cols)]:
指定字段或所有字段上的查询权限,不指明字段缺省为所有字段。
UPDATE[(cols)]:
指定字段或所有字段上的更新权限,不指明字段缺省为所有字段。
ALL[PRIVILEGES]:
以上所有表级权限
REVOKE{DBA|RESOURCE|CONNECT}FROM{PUBLIC|user-list}
收权命令。
PUBLIC|user-list:
全部或指定的用户。
三种权限居且仅居其一,事务处理过程中不要执行GRANT语句。
例:
revokeresourcefromjohn;
REVOKEtab-privilegeONtable-nameFROM{PUBLIC|user-list}
收表级权限。
tab-privilege:
表级权限。
table-name:
表名称。
PUBLIC|user-list:
全部或指定的用户。
[WITHGRANTOPTION]:
表示被授权用户有否权限进行二次授权。
用户只能取消由其本人赋予其他用户的表级存取权限;不能取消自己的权限,对SELECT和UPDATE作取消时,将取消所有表中字段的SELECT和UPDATE权限。
例;revokeupdateonuserfromdick;
LOCKTABLEtable-nameIN{SHARE|EXCLUSIVE}MODE
记录级加锁和表级加锁或文件加锁。
table-name:
表名称。
SHARE:
允许读表中数据,但不允许作任何修改
EXCLUSIVE:
禁止其他任何形式访问表
每次只能对表琐定一次;事务处理过程中,BEGINWORK后立即执行LOCKTABLE以取代记录级加锁,COMMITWORK和ROLLBACKWORK语句取消所有对表的加锁;若没有事务处理,锁将保持到用户退出或执行UNLOCK为止。
例:
locktableuserinexclusivemode;
UNLOCKTABLEtable-name
取消记录级加锁和表级加锁或文件加锁。
table-name:
表名称。
例:
unlockuser;
SETLOCKMODETO[NOT]WAIT
改变锁定状态。
TO[NOT]:
等待解锁,有可能被死锁或不等待并提示错误信息,表示此记录被锁,缺省值。
访问一个EXCLUSIVE状态下的记录,将返回一个错误。
STARTDATABSEdb_name[WITHLOGIN“pathname”]
启动事务处理。
“pathname”:
事务处理日志文件。
执行该语句前,需要先关闭当前数据库。
例;clostdatabase;
startdatabsecustomerwithlogin“/usr/john/log/customer.log”;
BEGINWORK
开始事务。
例:
beginwork;
COMMITWORK
提交(正常结束)事务。
例:
commitwork;
ROLLBACKWORK
回滚(非正常结束)事务。
例:
rollbackwork;
SELECT
SELECTselect_listFROMtab_name|view_name
WHEREcondition
GROUPBYcolumn_name
HAVINGcondition
ORDERBYcolumn_list
INTOTEMPtable_name
查询语句。
select_list:
选择表或*
tab_name:
表名称
view_name:
视图名称。
condition:
查询条件,可使用BETWEEN、IN、LIKE、ISNULL、LIKE、MATCHES、NOT、
AND、OR、=、!
=或<>;、>;、 >;=、<=、<、ALL、ANY、SOME
column_name:
分组字段名称
condition:
群聚条件
column_list:
排序字段列表,缺省ASC,可指定DSC;排序时,NULL值小于非零值。
table_name:
临时表名称
例:
略
附(常用函数)
(1)集合函数:
count(*)、
sum(数据项/表达式)、avg(数据项/表达式)、max(数据项/表达式)、min(数据项/表达式)
count(distinct数据项/表达式)、sum(distinct数据项/表达式)、avg(distinct数据项/表达式)
(2)代数函数和三角函数
HEX(数据项/表达式)、ROUND(数据项/表达式)、TRUNC(数据项/表达式)、
TAN(数据项/表达式)、ABS(数据项/表达式)、MOD(被除数,除数)
(3)统计函数
标准差,stdev()、方差,variance()、范围,rang()
(4)时间函数
DAY(日期/时间表达式):
返回数字型
MONTH(日期/时间表达式):
返回整数
WEEKDAY(日期/时间表达式):
06,0星期天,1星期一;返回整数
YEAR(日期/时间表达式)、返回整数
DATE(非日期表达式):
返回日期型
EXTEND(日期/时间表达式,[第一个至最后一个]):
返回指定的整数
MDY(月,日,年):
返回日期型
CURRENT:
返回日期型
(5)时间函数
ROUND(),四舍五入。
如:
ROUND(10.95,position)position进行四舍五入的前一位置
TRUNC(),截取。
如:
TRUNC(10.95,0)position截取的位置
INFORMIX临时表在下列情况下自动取消:
A.退出数据库访问工具(如DBACCESS)
B.SQL通话结束(DISCONNECT)
C.发出取消表语句
D.退出程序时
INSERT
INSERTINTOview_name|table_name[(column_list)]VALUES(value_list)
或INSERTINTOview_name|table_name[(column_list)]select_statement
插入数据
view_name|table_name:
视图名或表名称
column_list:
数据项列表。
value_list:
值列表
select_statement:
查询语句。
例:
略
DELETEFROMview_name|table_nameWHEREsearch-conditions
删除语句。
view_name|table_name:
视图名或表名称
search-conditions;删除条件
例:
略
UPDATE
UPDATEview_name|table_nameSETcolumn_1=value_1istWHEREsearch_conditions
或UPDATEview_name|table_nameSETcolumn_1|*=value_1istWHEREsearch_conditions
更新数据语句。
view_name|table_name:
表名称或视图表名称
value_1ist:
字段值
search_conditions:
更新数据的条件
例:
略
CHECKTABLEtable-name
检查索引语句。
语句使用者是表的拥有者或拥有DBA权限;不能对systable使用此语句。
例:
略
REPAIRTABLEtable-name
修复索引。
语句使用者是表的拥有者或拥有DBA权限;不能对systable使用此语句。
例:
略
LOADFROM“file-name”INSERTINTOtable_name[(column_name[,…])]
将文本数据栽入表中。
例:
loadform“aa.txt”insertintouser;
UNLOADTO“pathname”
将表中数据卸为文本。
例:
unloadto“aa.txt”select*fromuser;
INFO
系统信息查询。
INFOTABLES:
得到当前数据库上表的名字。
INFOcolumnsFORtable_name:
指定表上的字段信息。
INFOINDEXESFORtable_name:
指定表上的索引信息。
INFO[ACCESS|PRIVILEGES]FORtable_name:
指定表上的存取权限。
INFOSTATUSFORtable_name:
指定表的状态信息。
例:
infotables;
1.select语句中使用sort,或join
2.
3.如果你有排序和连接操作,你可以先select数据到一个临时表中,然后再对临时表进行处理。
因为临时表是建立在内存中,所以比建立在磁盘上表操作要快的多。
4.
5.如:
6.
7.SELECTtime_records.*,case_name
8.
9.FROMtime_records,OUTERcases
10.
11.WHEREtime_records.client="AA1000"
12.
13.ANDtime_records.case_no=cases.case_no
14.
15.ORDERBYtime_records.case_no
16.
17.
18.这个语句返回34个经过排序的记录,花费了5分钟42秒。
而:
19.
20.SELECTtime_records.*,case_name
21.
22.FROMtime_records,OUTERcases
23.
24.WHEREtime_records.client="AA1000"
25.
26.ANDtime_records.case_no=cases.case_no
27.
28.INTOtempfoo;
29.
30.SELECT*fromfooORDERBYcase_no
31.
32.返回34条记录,只花费了59秒。
33.
34.
35.2.使用notin或者notexists语句
36.
37.下面的语句看上去没有任何问题,但是可能执行的非常慢:
38.
39.SELECTcodeFROMtable1
40.
41.WHEREcodeNOTIN(SELECTcodeFROMtable2)
42.
43.
44.如果使用下面的方法:
45.
46.SEL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- informix sql汇总包括效率分析 sql 汇总 包括 效率 分析