`

informix的常用SQL语句

 
阅读更多

 

 

1、创建数据库
      eg1. 创建不记录日志的库testdb,参考语句如下:
CREATE DATABASE testdb;
      eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解析),参考语句如下:
CREATE DATABASE testdb WITH BUFFERED LOG;
      eg3. 创建无缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解析),参考语句如下:
CREATE DATABASE testdb WITH LOG;
      eg4. 创建ANSI的数据库(记录日志时无缓冲,SQL总在事务之中,拥有者名字被用于对象的解析),参考语句如下:
CREATE DATABASE testdb WITH LOG MODE ANSI;
2、创建普通数据表
       普通数据表又被称为持久数据表,它在system catalog里注册。一个普通数据表可对多个session和connection。创建时可以指定dbspace。
       eg1、如下语句创建了一个集团信息表cti_vccinfo:
create table cti_vccinfo(
  vccid     
CHAR(6)     not null,
  vccname   
VARCHAR(255),
  effective 
INTEGER     default 0 not null,
  agentmax  
INTEGER     default 0 not null,
  ivrmax    
INTEGER     default 0 not null,
  updatekey 
VARCHAR(30),
  
primary key (vccid) constraint PK_CTI_VI
);
3、创建临时数据表
      临时数据表不在system catalog里注册。一个临时数据表只对对应的某个session或connection可见,在对应的session或connection结束时被自动清除。如果dbspace存在的话,临时数据表将建于临时dbspace中。缺省情况下,是没有日志的。临时数据表支持索引。
      eg1:如下创建一个customer_temp的表,语句如下:
CREATE TEMP TABLE customer_temp (
    num SERIAL 
NOT NULL,
    name 
CHAR(15),
    create_time 
DATETIME YEAR TO FRACTION(3)
);
     eg2:也可以将正式表中customer中的数据通过select......into temp语句将数据导入到临时表中,如下实例创建了一个正式的表customer,并插入了三条数据,接着通过select....into temp语句将这个正式表中的数据导入到临时表customer_temp。
      首先,创建customer普通数据表,建表语句如下:
CREATE TABLE customer (
    num SERIAL 
NOT NULL,
    name 
CHAR(15),
    create_time 
DATETIME YEAR TO FRACTION(3)
);
    接着,在普通数据表customer中插入三条记录,语句如下:
insert into customer (name, create_time) values('amigo''2010-11-17 15:41:00');
insert into customer (name, create_time) values('xiexingxing''2010-11-17 15:42:00');
insert into customer (name, create_time) values('amigoxie''2010-11-17 15:43:00');
     最后,通过select......into temp语句将普通数据表customer中的数据导入到临时表customer_temp中(注意:需要保证customer_temp表不存在,操作成功后,customer_temp中的字段为select出的字段),参考语句如下所示:
SELECT num, name, create_time FROM customer into TEMP customer_temp;
4、创建主键约束
     1)主键约束定义在一个数据列或一组数据列上;
     2)主键的值是不允许重复的;
     3)主键的值不允许为NULL。
     在2中的实例,创建了cti_vccinfo表,并指定了vccid为其主键,并将其取名为PK_CTI_VI,以方便进行删除操作。
     接下来看一个使用复合主键的实例,如下语句创建了cti_humantaskgroup表,该表的serviceid和agentid组成联合主键,首先看下该表的建表语句:
create table cti_humantaskgroup (
    serviceid  
VARCHAR(30)  not null,
    agentid    
VARCHAR(30)  not null,
    priority   
INTEGER      default 0 not null,
    updatekey  
VARCHAR(30)
);
     如下的语句为该表的serviceid和agentid创建了唯一索引:
create unique index Index_CTI_HTG on cti_humantaskgroup(
    serviceid  
ASC,
    agentid    
ASC
);
5、创建引用约束
    1)一个数据表的主键可以被同一个数据表或其它数据库表使用。主键被引用的数据表被称为父表,引用了附表的主键的数据表被称为子表;
    2)如果在定义引用约束时使用了ON DELETE CASCADE,当把父表的数据行删除时,子表的相关数据行也会被自动删除。
       在4中的实例中,cti_humantaskgroup表中的serviceid为cti_humantask中的主键,引用约束可在创建表的时候指明,也可以创建完成后通过alter语句创建,参考语句如下:
alter table cti_humantaskgroup
   
add constraint foreign key (serviceid)
      
references cti_humantask (serviceid) on delete cascade
      
constraint FK_CTI_HTG_HT;
      读者可以注意点,如上语句加上了on delete cascade,表示在删除cti_humantask表时,数据库系统会自动删除子表cti_humantaskgroup中serviceid与之相同的数据。
6、检查约束
      定义了检查约束后,数据库将数据赋给一个数据列之前将根据检查约束检查数据是否满足条件。
      例如创建一个student表,该表有id(学号)、name(姓名)、age(年龄)和birthday(出生日期)4个字段,age必须在5到35之间,则在创建该表时需要添加检查约束,建表语句参考如下:
create table student  (
    id        
VARCHAR(10)     not null,
    name      
VARCHAR(10)     not null,
    age       
INTEGER         default 0 not null check (age between 5 and 35),
    birthday  
VARCHAR(8)
);
     若通过如下语句插入一条不满足age的检查约束的数据:
insert into student values('1234''amigo'40'19821121');
     运行后会出现如下提示信息:
530Check constraint (ines.c2209_13601) failed.  
7、创建视图
     1)创建视图时使用select语句;
     2)视图在system catalog里注册;
     3)视图数据不被存储在磁盘上;
     4)对于一些数据表,可为不同的用户建立不同的视图;
     5)可配置存取权限。
     例如,创建一个student_age的视图,查出age在20~25的学生,语句如下:
CREATE VIEW student_age
(id, name, age, birthday)
     
AS SELECT id, name, age, birthday FROM student WHERE age>=20 and age<=25
     若要查询视图中的数据,例如得到student_age视图中的数据,可通过select语句进行查询,参考如下:
select * from student_age;   
     若要删除student_age视图,语句如下:
drop view student_age;
8、查询语句
     我们使用select语句从数据库中查询数据,select语句的使用语法如下所示:
SELECT 字段列表(各个字段之间用英文逗号隔开)
   
FROM 表列表(多个表之间用英文逗号隔开)
      
[WHERE 查询条件]
         
[GROUP BY 字段列表]
         
[HAVING 条件]
         
[ORDER BY 字段列表]
         
[INTO TEMP 临时表的名称]

      例如查询student表中的所有数据,语句参考如下:

select * from student;

     查询student表中的记录,语句参考如下:

select count(*from student;

     查询student表中的name和age字段,语句参考如下:

select name, age from student;

     在查询语句中,可以使用关系运算符,可使用的关系运算符如下:
     1)=
     例如查询出student表中姓名为amigo的字段,语句参考如下:

select * from student where name='amigo';

     2)!=或<>
     例如查询出年龄不为23的记录,语句参考如下:

select * from student where age!=23;

     3)> 
     例如查询出年龄大于23的记录,语句参考如下:

select * from student where age>23;

     4)>=
     大于等于,与大于使用方法类似。
     5)<
     小于,与大于使用方法类似。
     6)<=
     小于等于,与大于使用方法类似。
     在where语句中,可使用的关键字如下所示:
     1)AND(逻辑与)
     例如,当需要在student表中查出name为amigo,并且学号为1000的记录,此时可以使用AND,参考语句如下:

select * from student where name='amigo' and id='1000';

      2)OR(逻辑或)
      例如,需要查询name为amigo,或者name为xingxing的记录,因为是或的关系,所以可以使用OR,参考语句如下:

select * from student where name='amigo' or name='xingxing';

      3)[NOT] BWTWEEN([不]在......之间)
      例如,查找student表中age在24和30之间的记录的id、name和age字段,参考语句如下:

select id, name, age from student where age between 24 and 30;

      4)[NOT] IN([不]在....中)
      [NOT] IN后可以是一个具体的值,也可以是一个子查询。
      例如,查找student表中的name不在“amigo”和“xingxing”的记录的id和name字段,参考语句如下:

select id, name from student where name not in ('amigo''xingxing');

      5)IS [NOT] NULL:[不]是NULL
      例如需要查询出student表中birthday不为空的记录,参考语句如下:

select * from student where birthday is not null;

      6)[NOT] MATCHES:[不]匹配
      “?”表示匹配单个字符,“*”表示0到正整数个字符。
      例如,查找总共为5个字符,而且后4个字符为migo的记录,参考语句如下:

select id, name from student where name matches '?migo';

      例如,查找student表中以go结尾的任意长度的记录,参考语句如下:

select * from student where name matches '*go';

       7)[NOT] LIKE:[不]匹配
       使用方法与[NOT] MATCHES类似,但是是使用“_”表示单个字符,“%”表示0到正整数个字符。
       GROUP BY
       我们可以使用group by对查询结果进行分组。分组后我们可以得到各个分组的统计消息,例如平均值、总和、数据行数等。
       例如,需要根据detail(详细情况分类)分组查询CTI_CallStat表中taskid为000001200002111864的记录,并将每种detail的数量显示出来,语句参考如下:

select detail, count(*as ratio from CTI_CallStat where taskid='000001200002111864' group by detail

       CASE子句
       我们可以使用CASE表达式对返回值进行转换,CASE表达式的语法如下:

CASE (expr)
WHEN expr1 THEN result1
WHEN expr2 THEN result2

ELSE result_else
END

       上面的CASE表达式的意思是:
       当expr为expr1时,返回result1;
       当expr为expr2时,返回result2;
       ...
       当expr为其它情况时,返回result_else.
       例如查询student表,当age为1时,显示为too little,100时,显示为too old,其余的情况显示为normal,参考语句如下:

select id, name, age, 
        
case age
    
when 1 then 'too little'
    
when 100 then 'too old'
    
else 'normal'
        
end
        ageinfo
from student;

      DECODE
      我们可以使用DECODE函数对返回值进行转换,DECODE函数的语法如下:

DECODE (expr,
expr1, result1,
expr2, result2,

result_else)

      上面的DECODE函数的意思搜:
      当expr为expr1时,返回result1;
      当expr为expr2时,返回result2;
      ...
      当expr为其它情况时,返回result_else。
      该函数能达到CASE子句类似的功能,例如达到前面的功能,可使用如下的DECODE语句:

SELECT id, name, age, 
       DECODE (age,
          
1'too little',
          
100'too old',
           
'normal')
     ageinfo
    
FROM student;

      UNION和UNION ALL
      如果两个或多个select语句的结果相似,我们可以用“union”或“union all”把这些select语句合并起来。“union”和“union all”的区别是:“union”将去掉结果中的非第一次出现的值,而“union all”将保留结果中的非第一次出现的值。
      表连接的语法
      我们可以使用两种方式进行数据表连接:
      1)数据表之间使用逗号,连接条件前使用WHERE;
      2)数据表之间使用JOIN,连接条件前使用ON。
      第一种方式的参考实例如下:

SELECT order_num, order_time, c.customer_num
        
FROM customer c , orders o
        
WHERE c.customer_num = o.customer_num;

       第二种方式的参考实例如下:

SELECT order_num, order_time, c.customer_num
      
FROM customer c JOIN orders o
      
ON c.customer_num = o.customer_num;

       外连接
       例如,有两个表,员工表和项目表,员工可以负责项目,项目也可以有负责人(员工)。
       若想知道:那个员工负责哪个项目,哪些员工不负责项目,可以使用左外连接,参考语句如下:

select e.employee_num, employee_name, project_num, project_name
      
from employee e LEFT OUTER JOIN project p ON e.employee_num=p.employee_num

       若想知道:哪个员工负责哪个项目,哪些项目没有人负责,可以使用右外连接,参考语句如下:

select e.employee_num, employee_name, project_num, project_name
      
from employee e RIGHT OUTER JOIN project p ON e.employee_num=p.employee_num

       若想知道:哪个员工负责哪个项目,哪些员工不负责项目,哪些项目没有人负责,可以使用全连接,参考语句如下:

select e.employee_num, employee_name, project_num, project_name
      
from employee e FULL OUTER JOIN project p ON e.employee_num=p.employee_num

      子查询
      子查询分两种:相关子查询和不相关子查询。在相关子查询中,子查询中涉及到父查询的数据列;在不相关子查询中,子查询中不涉及到父查询的数据列。
      相关子查询实例:

select * from customer
      
where exists
           (
select * from vip 
                
where vip.customer_num = customer.customer_num);

      不相关子查询实例:

select * from project
      
where employee_num=
           (
select employee_num from employee where employee_name='amigo');

      在很多情况下,我们可以将相关字查询转换为表连接,这样数据库引擎有可能更方便的得到更优的查询计划,从而使SQL语句的执行时间更少。例如可将上面的相关子查询实例转换为:

select customer.* FROM customer, vip
      
where customer.customer_num=vip.customer_num;

9、插入语句
      我们可以使用insert语句往数据表中插入数据行。
      如果各值按序赋给数据表中的所有数据列,则不需要指明数据列,例如往student表中插入数据,参考语句如下:

insert into student values('1000''amigo'27'19821121');

      如果是将值赋给指定数据列,则需指定数据列,例如只插入student表中的前三个字段,若使用如下的语句:

insert into student values('1005''amigo'27);

     此时会报错提示值的个数不正确,错误提示如下所示:

236Number of columns in INSERT does not match number of VALUES.  

     这时,需要指定数据列,参考语句如下:

insert into student (id, name, age) values('1005''amigo'27);

     可以在insert语句中嵌入select语句,从而将从一个或多个数据表查询来的数据插入到目标数据表。
     例如将student_bak表中age大于25的数据插入到student表中,参考语句如下:

insert into student
     
select id, name, age, birthday
         
from student_bak where age>25;

10、更新语句
      可以使用update语句为数据表更新数据行。
      例如想将student中的id为1000的记录的name字段更新为amigo,age字段更新为28,语句参考如下:

update student set name='amigoxie', age=28 where id='1000';

     使用如下的写法也是等效的:

update student set (name, age)=('amigoxie'28where id='1000';

11、删除语句
     可以使用delete语句从数据表中删除数据行。
     例如,删除student表中的所有数据,参考语句如下:

delete from student;

     例如,删除student表中id为1001的数据,参考语句如下:

delete from student where id='1001';

     例如,删除student表中以go结尾的记录,参考语句如下:

delete from student where name matches '*go';

转自:http://www.blogjava.net/amigoxie/archive/2010/11/05/337362.html

 

连接数据库

dbaccess 数据库

 

查询sql执行计划

set explain on;

select * from table

查询 tail -f200 sqexplain.out;

 

临时表:

创建临时表:select * from table into temp tempA;

查询临时表:select * from tempA;

删除临时表:drop table tempA;

 

数据导入导出:

导出:unload to temp1.unl select * from tempA;

导出csv格式:unload to temp2.csv DELIMITER '|' select * from tempA;

 

导出csv格式,数字超过15位变成科学计数法解决方案(开头拼接tab即可):

unload a temp2.csv DELIMITER '|' select ''||acct_no as no from tempA;

导入:load from temp1.unl insert into tempA;

 

按时间查询 :

select * from tempA where time >= '2018-04-01 00:00:00.000'

select * from tempA where extend(time,year to day)>= '2018-04-01'

 

插入数据包含时间:

insert into tempA(id,time) values('1',TO_DATE('2018-04-01 00:00:00',''YYYY-MM-DD HH24:MI:SS))

 

查询重复条数大于?条

select name,count(age) from tempA group by name,age having count(age)>10

 

字符串转int排序

select cast(age as int) from tempA order by cast(age as int)

 

distinct()去重,trim()去空格,substr(acct_no,0,2)截取,前包含,后不包含,可用于in()

 

分享到:
评论

相关推荐

    informix主要SQL语句详解

    在Informix数据库管理系统中,SQL语句是进行数据操作的核心工具。本文将深入解析 Informix 主要的SQL语句,帮助你理解如何管理和操作数据库。 首先,`CREATE DATABASE`语句用于创建一个新的数据库。例如,`CREATE ...

    Informix SQL 语句详解

    Informix SQL 语句详解 Informix SQL 语句是一种功能强大且灵活的数据库管理语言,用于创建、管理和维护 Informix 数据库。下面是 Informix SQL 语句详解的知识点总结: 一、创建数据库 CREATE DATABASE 语句用于...

    Informix SQL语句查询器

    "Informix SQL语句查询器"是一个专门为PHP开发者设计的工具,它利用Informix数据库的包裹函数,使得在PHP环境中执行SQL查询变得更加便捷和高效。这个工具的出现,旨在简化开发过程,提升代码的可读性和维护性,同时...

    informix sql性能分析

    在进行SQL性能分析时,首先需要获取SQL语句的执行计划。这一步骤可以帮助我们理解数据库是如何执行查询的,从而找出潜在的性能瓶颈。 - **Informix 9.3及以前版本**: ```sql set explain on; SELECT * FROM ...

    Informix SQL语句详解

    Informix SQL语句详解,一本不错书哈

    unix下的INFORMIX SQL语句的使用

    ### Unix下的INFORMIX SQL语句使用详解 #### 嵌入式SQL语句的特点与应用 在Unix环境下,INFORMIX数据库系统提供了强大的SQL功能,支持开发者将SQL语句直接嵌入到宿主语言(如C语言)中。这种嵌入式SQL编程方式能够...

    Informix SQL语句查询器(v1.0)

    《Informix SQL语句查询器(v1.0)——便捷高效的数据探索工具》 Informix SQL语句查询器是一款专为Informix数据库设计的查询工具,版本v1.0提供了强大的功能,旨在简化PHP开发中的数据库操作,使代码更加精炼高效。...

    Informix的字段类型&常用sql语句.doc

    Informix 数据库字段类型和常用 SQL 语句 Informix 是一种关系数据库管理系统,它提供了多种字段类型来存储不同的数据类型。下面是 Informix 的常见字段类型: 1. char(size):用于保存定长字符串数据,每行定长...

    Informix 11.50 SQL 指南:语法

    - **关键字和标识符**:在编写SQL语句时,需要注意关键字的大小写敏感性以及如何正确使用标识符。 #### 3. **数据定义语言(DDL)** - **创建表**:使用CREATE TABLE语句定义新表的结构。 - **修改表**:通过...

    IBM Informix IDS SQL 指南 参考大全

    IBM Informix IDS SQL是IBM Informix Dynamic Server (IDS)的一个关键组件,它支持标准的SQL语句,并提供了一系列扩展功能来满足企业级应用的需求。IBM Informix IDS SQL不仅兼容SQL标准,还提供了许多独特的特性,...

    Informix SQL跟踪

    2. `onstat -g sql pid` 命令:一旦发现有疑似的慢查询进程(通过进程ID),就可以使用这个命令来获取该进程正在执行的具体SQL语句,包括它的当前状态、隔离级别、锁定信息以及SQL语句本身。 例如,你可能看到一个...

    SQL语句教程 写法大全

    同时,本教程还涵盖了 SQL 高级知识,如 Top 语句、Like 语句、通配符、In 语句、Between 语句、Aliases 语句、Join 语句、Inner Join 语句、Left Join 语句、Right Join 语句、Full Join 语句、Union 语句、Select ...

    IBM官方INFORMIX数据库SQL参考指南

    4. **存储过程和触发器**:存储过程是一组预编译的SQL语句,可以封装复杂的业务逻辑,提高代码复用性。触发器则在特定的数据库事件发生时自动执行,如INSERT、UPDATE或DELETE操作。 5. **视图**:视图是虚拟表,...

    4.在INFORMIX-ESQL/C中嵌入SQL语句.doc

    ### 在INFORMIX-ESQL/C中嵌入SQL语句 #### 一、概述 在进行数据库应用程序开发的过程中,开发者经常需要将SQL语句嵌入到高级编程语言中执行数据库操作。INFORMIX-ESQL/C就是一种允许开发者在C语言环境中直接使用...

    informix入门和SQL优化

    通过对SQL语句进行优化,可以显著提升应用程序的执行效率,减少资源消耗。优化策略包括但不限于查询语句重构、索引设计、存储过程优化等。此外,了解数据库的内部结构和工作原理对于实现高效的应用开发至关重要,这...

    informix嵌入式SQL编程.pdf

    嵌入式SQL(Embedded SQL)是将SQL语句直接嵌入到宿主语言(如C、COBOL等)程序中的编程方式,它使得应用程序可以直接与数据库进行交互,极大地提高了数据处理的效率。 1. **引言** - 本教程适合已经对SQL有一定...

    informix数据库sql查询优化

    单表查询是指仅涉及一个表的SQL查询语句。虽然这类查询通常比多表连接查询简单,但仍然存在性能问题。优化单表查询的目标是提高查询速度、减少资源消耗,并确保结果集的准确性。以下是几个关键概念: - **访问数据...

    Informix sql语法指南

    ### SQL语句详解 #### 数据定义语言(Data Definition Language, DDL) 包括CREATE、ALTER和DROP语句,用于创建、修改和删除数据库对象,如表、索引、视图等。 #### 数据操纵语言(Data Manipulation Language, ...

    基于Informix数据库典型低效率SQL语句的分析及优化方法.pdf

    "基于Informix数据库典型低效率SQL语句的分析及优化方法" 在Informix数据库中,优化SQL语句是非常重要的,因为低效率的SQL语句可能会导致数据库性能下降和系统崩溃。因此,了解SQL语句的执行计划和优化方法是非常...

Global site tag (gtag.js) - Google Analytics