informix mysql 语法_informix的常用SQL语句

本文详细介绍了Informix数据库中的SQL查询语法,包括SELECT语句的使用、关系运算符、逻辑运算符、GROUP BY、CASE子句、DECODE函数、UNION操作以及表连接和外连接等,同时提供了丰富的查询示例。

我们使用select语句从数据库中查询数据,select语句的使用语法如下所示:

4f1150b881333f12a311ae9ef34da474.pngSELECT字段列表(各个字段之间用英文逗号隔开)

4f1150b881333f12a311ae9ef34da474.pngFROM表列表(多个表之间用英文逗号隔开)

4f1150b881333f12a311ae9ef34da474.png[WHERE 查询条件]4f1150b881333f12a311ae9ef34da474.png[GROUP BY 字段列表]4f1150b881333f12a311ae9ef34da474.png[HAVING 条件]4f1150b881333f12a311ae9ef34da474.png[ORDER BY 字段列表]4f1150b881333f12a311ae9ef34da474.png[INTO TEMP 临时表的名称]

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

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudent;

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

4f1150b881333f12a311ae9ef34da474.pngselectcount(*)fromstudent;

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

4f1150b881333f12a311ae9ef34da474.pngselectname, agefromstudent;

在查询语句中,可以使用关系运算符,可使用的关系运算符如下:

1)=     例如查询出student表中姓名为amigo的字段,语句参考如下:

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudentwherename='amigo';

2)!=或<>

例如查询出年龄不为23的记录,语句参考如下:

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudentwhereage!=23;

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

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudentwhereage>23;

4)>=     大于等于,与大于使用方法类似。

5)

6)<=     小于等于,与大于使用方法类似。

在where语句中,可使用的关键字如下所示:

1)AND(逻辑与)     例如,当需要在student表中查出name为amigo,并且学号为1000的记录,此时可以使用AND,参考语句如下:

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudentwherename='amigo'andid='1000';

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

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudentwherename='amigo'orname='xingxing';

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

4f1150b881333f12a311ae9ef34da474.pngselectid, name, agefromstudentwhereagebetween24and30;

4)[NOT] IN([不]在....中)      [NOT] IN后可以是一个具体的值,也可以是一个子查询。

例如,查找student表中的name不在“amigo”和“xingxing”的记录的id和name字段,参考语句如下:

4f1150b881333f12a311ae9ef34da474.pngselectid, namefromstudentwherenamenotin('amigo','xingxing');

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

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudentwherebirthdayisnotnull;

6)[NOT] MATCHES:[不]匹配      “?”表示匹配单个字符,“*”表示0到正整数个字符。

例如,查找总共为5个字符,而且后4个字符为migo的记录,参考语句如下:

4f1150b881333f12a311ae9ef34da474.pngselectid, namefromstudentwherename matches'?migo';

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

4f1150b881333f12a311ae9ef34da474.pngselect*fromstudentwherename matches'*go';

7)[NOT] LIKE:[不]匹配       使用方法与[NOT] MATCHES类似,但是是使用“_”表示单个字符,“%”表示0到正整数个字符。

GROUP BY       我们可以使用group by对查询结果进行分组。分组后我们可以得到各个分组的统计消息,例如平均值、总和、数据行数等。

例如,需要根据detail(详细情况分类)分组查询CTI_CallStat表中taskid为000001200002111864的记录,并将每种detail的数量显示出来,语句参考如下:

4f1150b881333f12a311ae9ef34da474.pngselectdetail,count(*)asratiofromCTI_CallStatwheretaskid='000001200002111864'groupbydetail

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

4f1150b881333f12a311ae9ef34da474.pngCASE(expr)

4f1150b881333f12a311ae9ef34da474.pngWHENexpr1THENresult1

4f1150b881333f12a311ae9ef34da474.pngWHENexpr2THENresult2

4f1150b881333f12a311ae9ef34da474.png

9b8a8a44dd1c74ae49c20a7cd451974e.png

4f1150b881333f12a311ae9ef34da474.pngELSEresult_else

4f1150b881333f12a311ae9ef34da474.pngEND

上面的CASE表达式的意思是:

当expr为expr1时,返回result1;

当expr为expr2时,返回result2;

...

当expr为其它情况时,返回result_else.

例如查询student表,当age为1时,显示为too little,100时,显示为too old,其余的情况显示为normal,参考语句如下:

4f1150b881333f12a311ae9ef34da474.pngselectid, name, age, 

4f1150b881333f12a311ae9ef34da474.pngcaseage

4f1150b881333f12a311ae9ef34da474.pngwhen1then'too little'4f1150b881333f12a311ae9ef34da474.pngwhen100then'too old'4f1150b881333f12a311ae9ef34da474.pngelse'normal'4f1150b881333f12a311ae9ef34da474.pngend4f1150b881333f12a311ae9ef34da474.png        ageinfo

4f1150b881333f12a311ae9ef34da474.pngfromstudent;

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

4f1150b881333f12a311ae9ef34da474.pngDECODE (expr,

4f1150b881333f12a311ae9ef34da474.pngexpr1, result1,

4f1150b881333f12a311ae9ef34da474.pngexpr2, result2,

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngresult_else)

上面的DECODE函数的意思搜:

当expr为expr1时,返回result1;

当expr为expr2时,返回result2;

...

当expr为其它情况时,返回result_else。

该函数能达到CASE子句类似的功能,例如达到前面的功能,可使用如下的DECODE语句:

4f1150b881333f12a311ae9ef34da474.pngSELECTid, name, age, 

4f1150b881333f12a311ae9ef34da474.png       DECODE (age,

4f1150b881333f12a311ae9ef34da474.png1,'too little',

4f1150b881333f12a311ae9ef34da474.png100,'too old',

4f1150b881333f12a311ae9ef34da474.png'normal')

4f1150b881333f12a311ae9ef34da474.png     ageinfo

4f1150b881333f12a311ae9ef34da474.pngFROMstudent;

UNION和UNION ALL      如果两个或多个select语句的结果相似,我们可以用“union”或“union all”把这些select语句合并起来。“union”和“union all”的区别是:“union”将去掉结果中的非第一次出现的值,而“union all”将保留结果中的非第一次出现的值。

表连接的语法      我们可以使用两种方式进行数据表连接:

1)数据表之间使用逗号,连接条件前使用WHERE;

2)数据表之间使用JOIN,连接条件前使用ON。

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

4f1150b881333f12a311ae9ef34da474.pngSELECTorder_num, order_time, c.customer_num

4f1150b881333f12a311ae9ef34da474.pngFROMcustomer c , orders o

4f1150b881333f12a311ae9ef34da474.pngWHEREc.customer_num=o.customer_num;

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

4f1150b881333f12a311ae9ef34da474.pngSELECTorder_num, order_time, c.customer_num

4f1150b881333f12a311ae9ef34da474.pngFROMcustomer cJOINorders o

4f1150b881333f12a311ae9ef34da474.pngONc.customer_num=o.customer_num;

外连接       例如,有两个表,员工表和项目表,员工可以负责项目,项目也可以有负责人(员工)。

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

4f1150b881333f12a311ae9ef34da474.pngselecte.employee_num, employee_name, project_num, project_name

4f1150b881333f12a311ae9ef34da474.pngfromemployee eLEFTOUTERJOINproject pONe.employee_num=p.employee_num

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

4f1150b881333f12a311ae9ef34da474.pngselecte.employee_num, employee_name, project_num, project_name

4f1150b881333f12a311ae9ef34da474.pngfromemployee eRIGHTOUTERJOINproject pONe.employee_num=p.employee_num

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

4f1150b881333f12a311ae9ef34da474.pngselecte.employee_num, employee_name, project_num, project_name

4f1150b881333f12a311ae9ef34da474.pngfromemployee eFULLOUTERJOINproject pONe.employee_num=p.employee_num

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

相关子查询实例:

4f1150b881333f12a311ae9ef34da474.pngselect*fromcustomer

4f1150b881333f12a311ae9ef34da474.pngwhereexists4f1150b881333f12a311ae9ef34da474.png           (select*fromvip 

4f1150b881333f12a311ae9ef34da474.pngwherevip.customer_num=customer.customer_num);

不相关子查询实例:

4f1150b881333f12a311ae9ef34da474.pngselect*fromproject

4f1150b881333f12a311ae9ef34da474.pngwhereemployee_num=4f1150b881333f12a311ae9ef34da474.png           (selectemployee_numfromemployeewhereemployee_name='amigo');

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

4f1150b881333f12a311ae9ef34da474.pngselectcustomer.*FROMcustomer, vip

4f1150b881333f12a311ae9ef34da474.pngwherecustomer.customer_num=vip.customer_num;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值