我们使用select语句从数据库中查询数据,select语句的使用语法如下所示:
SELECT字段列表(各个字段之间用英文逗号隔开)
FROM表列表(多个表之间用英文逗号隔开)
[WHERE 查询条件]
[GROUP BY 字段列表]
[HAVING 条件]
[ORDER BY 字段列表]
[INTO TEMP 临时表的名称]
例如查询student表中的所有数据,语句参考如下:
select*fromstudent;
查询student表中的记录,语句参考如下:
selectcount(*)fromstudent;
查询student表中的name和age字段,语句参考如下:
selectname, agefromstudent;
在查询语句中,可以使用关系运算符,可使用的关系运算符如下:
1)= 例如查询出student表中姓名为amigo的字段,语句参考如下:
select*fromstudentwherename='amigo';
2)!=或<>
例如查询出年龄不为23的记录,语句参考如下:
select*fromstudentwhereage!=23;
3)> 例如查询出年龄大于23的记录,语句参考如下:
select*fromstudentwhereage>23;
4)>= 大于等于,与大于使用方法类似。
5)
6)<= 小于等于,与大于使用方法类似。
在where语句中,可使用的关键字如下所示:
1)AND(逻辑与) 例如,当需要在student表中查出name为amigo,并且学号为1000的记录,此时可以使用AND,参考语句如下:
select*fromstudentwherename='amigo'andid='1000';
2)OR(逻辑或) 例如,需要查询name为amigo,或者name为xingxing的记录,因为是或的关系,所以可以使用OR,参考语句如下:
select*fromstudentwherename='amigo'orname='xingxing';
3)[NOT] BWTWEEN([不]在......之间) 例如,查找student表中age在24和30之间的记录的id、name和age字段,参考语句如下:
selectid, name, agefromstudentwhereagebetween24and30;
4)[NOT] IN([不]在....中) [NOT] IN后可以是一个具体的值,也可以是一个子查询。
例如,查找student表中的name不在“amigo”和“xingxing”的记录的id和name字段,参考语句如下:
selectid, namefromstudentwherenamenotin('amigo','xingxing');
5)IS [NOT] NULL:[不]是NULL 例如需要查询出student表中birthday不为空的记录,参考语句如下:
select*fromstudentwherebirthdayisnotnull;
6)[NOT] MATCHES:[不]匹配 “?”表示匹配单个字符,“*”表示0到正整数个字符。
例如,查找总共为5个字符,而且后4个字符为migo的记录,参考语句如下:
selectid, namefromstudentwherename matches'?migo';
例如,查找student表中以go结尾的任意长度的记录,参考语句如下:
select*fromstudentwherename matches'*go';
7)[NOT] LIKE:[不]匹配 使用方法与[NOT] MATCHES类似,但是是使用“_”表示单个字符,“%”表示0到正整数个字符。
GROUP BY 我们可以使用group by对查询结果进行分组。分组后我们可以得到各个分组的统计消息,例如平均值、总和、数据行数等。
例如,需要根据detail(详细情况分类)分组查询CTI_CallStat表中taskid为000001200002111864的记录,并将每种detail的数量显示出来,语句参考如下:
selectdetail,count(*)asratiofromCTI_CallStatwheretaskid='000001200002111864'groupbydetail
CASE子句 我们可以使用CASE表达式对返回值进行转换,CASE表达式的语法如下:
CASE(expr)
WHENexpr1THENresult1
WHENexpr2THENresult2


ELSEresult_else
END
上面的CASE表达式的意思是:
当expr为expr1时,返回result1;
当expr为expr2时,返回result2;
...
当expr为其它情况时,返回result_else.
例如查询student表,当age为1时,显示为too little,100时,显示为too old,其余的情况显示为normal,参考语句如下:
selectid, name, age,
caseage
when1then'too little'
when100then'too old'
else'normal'
end
ageinfo
fromstudent;
DECODE 我们可以使用DECODE函数对返回值进行转换,DECODE函数的语法如下:
DECODE (expr,
expr1, result1,
expr2, result2,
…
result_else)
上面的DECODE函数的意思搜:
当expr为expr1时,返回result1;
当expr为expr2时,返回result2;
...
当expr为其它情况时,返回result_else。
该函数能达到CASE子句类似的功能,例如达到前面的功能,可使用如下的DECODE语句:
SELECTid, name, age,
DECODE (age,
1,'too little',
100,'too old',
'normal')
ageinfo
FROMstudent;
UNION和UNION ALL 如果两个或多个select语句的结果相似,我们可以用“union”或“union all”把这些select语句合并起来。“union”和“union all”的区别是:“union”将去掉结果中的非第一次出现的值,而“union all”将保留结果中的非第一次出现的值。
表连接的语法 我们可以使用两种方式进行数据表连接:
1)数据表之间使用逗号,连接条件前使用WHERE;
2)数据表之间使用JOIN,连接条件前使用ON。
第一种方式的参考实例如下:
SELECTorder_num, order_time, c.customer_num
FROMcustomer c , orders o
WHEREc.customer_num=o.customer_num;
第二种方式的参考实例如下:
SELECTorder_num, order_time, c.customer_num
FROMcustomer cJOINorders o
ONc.customer_num=o.customer_num;
外连接 例如,有两个表,员工表和项目表,员工可以负责项目,项目也可以有负责人(员工)。
若想知道:那个员工负责哪个项目,哪些员工不负责项目,可以使用左外连接,参考语句如下:
selecte.employee_num, employee_name, project_num, project_name
fromemployee eLEFTOUTERJOINproject pONe.employee_num=p.employee_num
若想知道:哪个员工负责哪个项目,哪些项目没有人负责,可以使用右外连接,参考语句如下:
selecte.employee_num, employee_name, project_num, project_name
fromemployee eRIGHTOUTERJOINproject pONe.employee_num=p.employee_num
若想知道:哪个员工负责哪个项目,哪些员工不负责项目,哪些项目没有人负责,可以使用全连接,参考语句如下:
selecte.employee_num, employee_name, project_num, project_name
fromemployee eFULLOUTERJOINproject pONe.employee_num=p.employee_num
子查询 子查询分两种:相关子查询和不相关子查询。在相关子查询中,子查询中涉及到父查询的数据列;在不相关子查询中,子查询中不涉及到父查询的数据列。
相关子查询实例:
select*fromcustomer
whereexists
(select*fromvip
wherevip.customer_num=customer.customer_num);
不相关子查询实例:
select*fromproject
whereemployee_num=
(selectemployee_numfromemployeewhereemployee_name='amigo');
在很多情况下,我们可以将相关字查询转换为表连接,这样数据库引擎有可能更方便的得到更优的查询计划,从而使SQL语句的执行时间更少。例如可将上面的相关子查询实例转换为:
selectcustomer.*FROMcustomer, vip
wherecustomer.customer_num=vip.customer_num;
本文详细介绍了Informix数据库中的SQL查询语法,包括SELECT语句的使用、关系运算符、逻辑运算符、GROUP BY、CASE子句、DECODE函数、UNION操作以及表连接和外连接等,同时提供了丰富的查询示例。
737

被折叠的 条评论
为什么被折叠?



