﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-java in action</title><link>http://www.blogjava.net/zf2000/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 03:32:37 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 03:32:37 GMT</pubDate><ttl>60</ttl><item><title>SQL速查手册 </title><link>http://www.blogjava.net/zf2000/archive/2006/08/03/61443.html</link><dc:creator>张峰</dc:creator><author>张峰</author><pubDate>Thu, 03 Aug 2006 00:35:00 GMT</pubDate><guid>http://www.blogjava.net/zf2000/archive/2006/08/03/61443.html</guid><wfw:comment>http://www.blogjava.net/zf2000/comments/61443.html</wfw:comment><comments>http://www.blogjava.net/zf2000/archive/2006/08/03/61443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zf2000/comments/commentRss/61443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zf2000/services/trackbacks/61443.html</trackback:ping><description><![CDATA[●SQL定义：SQL是一种面向数据库的通用数据处理语言规范，能完成以下几类功能：提取查询数据，插入修改删除数据，生成修改和删除数据库对象，数据库安全控制，数据库完整性及数据保护控制。 <br /><br />●SQL分类： <br />DDL—数据定义语言（CREATE，ALTER，DROP，DECLARE） <br />DML—数据操纵语言（SELECT，DELETE，UPDATE，INSERT） <br />DCL—数据控制语言（GRANT，REVOKE，COMMIT，ROLLBACK） <br /><br />●SQL数据类型 <br />CHAR()：定长字符串 最大长度为 254 <br />VARCHAR()：变长字符 最大长度为 4000 <br />SMALLINT：短整型数字 长度为 2 字节 <br />INTEGER：整型数字 长度为 4 字节 <br />REAL：单精度浮点 32 位近似值 <br />DOUBLE：双精度浮点 64 位近似值 <br />DECIMAL(m,n)：数字 精度为m小数位为n <br />DATE：日期时间 <br />TIME：日期时间 <br />TIMESTAMP：日期时间 <br /><br />●数据库定义语言： <br />CREATE：用于创建数据库对象。 <br />DECLARE：除了是创建只在过程中使用的临时表外，DECLARE语句和CREATE语句非常相似。唯一可以被声明的对象是表。并且必须放入用户临时表空间。 <br />DROP：可以删除任何用CREATE（数据库对象）和DECLARE（表）创建的对象。 <br />ALTER：允许修改某些数据库对象的信息。不能修改索引。 <br /><br />●下面主要基于对象介绍基本的语法： <br /><br />1、数据库： <br />创建数据库：CREATE DATABASE database-name [USING CODESET codeset TERRITORY territory] <br />注：代码页的问题。 <br />删除数据库：drop database dbname <br /><br />2、表： <br />⑴创建新表： <br />create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) <br />根据已有的表创建新表： <br />A：create table tab_new like tab_old <br />B：create table tab_new as select col1,col2… from tab_old definition only <br />⑵修改表： <br />增加一个列: <br />Alter table tabname add column col type <br />注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。添加主键： <br />Alter table tabname add primary key(col) <br />删除主键： <br />Alter table tabname drop primary key(col) <br />删除表：drop table tabname <br /><br />3、表空间： <br />创建表空间：create tablespace tbsname pagesize 4k managed by database using (file ‘file’ size) <br />表空间加入容器：alter tablespace tablespace_name add(file 'filename' size) <br />注：该操作是不可逆的，加入容器后将不能将其删除，因此在加入的时候注意。 <br />删除表空间：drop tablespace tbsname <br /><br />4、索引： <br />创建索引：create [unique] index idxname on tabname(col….) <br />删除索引：drop index idxname <br />注：索引是不可更改的，想更改必须删除重新建。 <br /><br />5、视图： <br />创建视图：create view viewname as select statement <br />删除视图：drop view viewname <br />注：视图唯一能修改的是引用类型列，改变列的范围。其他定义好了都不能修改。当视图基于的基表drop后，视图变为无效。<br /><br />●数据库操纵语言： <br />SELECT：从表中查询符合数据 <br />DELETE：删除已有表的数据 <br />UPDATE：更新已有表的数据 <br />INSERT：向已有表中插入数据 <br /><br />1、select时，注意索引谓词和非索引谓词，尽量在有索引的列上使用索引谓词。 <br />谓词类型 可索引 注 释 <br />Col∝con Y ∝代表&gt;,&gt;=,=,&lt;=,&lt;,但是&lt;&gt;不是可索引的。 <br />Col between con1 and con2 Y 在匹配系列中必须是最后的。 <br />Col in list Y 仅对一个匹配列 <br />Col is null Y <br />Col like ‘xyz%’ Y 模糊匹配%在后面。 <br />Col like ‘%xyz’ N 模糊匹配%在前面。 <br />Col1∝Col2 N Col1和col2来自同一个表 <br />Col∝Expression N 例如：c1（c1+1）/2 <br />Pred1 and Pred2 Y Pred1和Pred2都是可索引的，指相同索引的列 <br />Pred1 or Pred2 N 除了（c1=a or c1=b）外，他可以被认为是c1 in（a，b） <br />Not Pred1 N 或者任何的等价形式：Not between,Not in,Not like等等。 <br /><br />使用索引的例子介绍： <br /><br />&lt;1&gt;、单个表上索引查询的介绍 ： <br />A：select * from t1 where c1 = 10； <br />在c1列上无索引，如何检索 <br />在c1列上有索引，如何检索 <br />B：select * from t1 where c1 =10 and c2 between 5 and 10 and c3 like ‘A%’ <br />仅在c1列上有索引 <br />在c1,c2和c3列上有单独的索引 <br />在c1，c2和c3列上有联合索引 <br />此处可以填加索引匹配规则和高级规则，比较难理解！！ <br /><br />&lt;2&gt;、两个或多个表上索引查询的介绍： <br />(1)、使用循环嵌套法执行查询 <br />A：select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t1.c2 =t2.c3 <br />介绍查询的方法，看看哪列上最需要索引。 <br />B：select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t2.c4 = 10 and t1.c2 =t2.c3 <br />(2)、使用归并连接执行连接查询 <br />例：select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t2.c4 = 10 and t1.c2 =t2.c3 <br />(3)、三个以上的表进行连接查询采取的规则或者方法 <br /><br />（2）、GROUP BY：实现简单分组的功能，当用group by时，查询选择列中除了在group by中出现的和常量外，其他的列上要用分组函数。可以使用一些分组函数实现一些列不在group by中出现，min，max等。 <br />（3）、HAVING的使用，对一些分组列进行条件判断。 <br />（4）、ORDER BY子句使得SQL在显示查询结果时将各返回行按顺序排列，返回行的排列顺序由ORDER BY 子句指定的表达式的值确定。 <br /><br />2、DELETE：从表中删除记录 <br />语法格式： <br />DELETE FROM tablename WHERE (conditions) <br /><br />3、INSERT：向表中插入记录 <br />语法格式： <br />INSERT INTO tablename (col1,col2,…) VALUES (value1,value2,…); <br />INSERT INTO tablename (col1,col2,…) VALUES (value1, value2,…), (value1, value2,…),…… <br />Insert不会等待任何程序，不会导致锁定。 <br /><br />4、UPDATE： <br />语法格式： <br />UPDATE tabname SET (col1=values1,col2=values2,…) WHERE (conditions); <br />注：update的速度比较慢，要在相应列上建立索引。 <br /><br />●数据控制语言 <br /><br />GRANT—授予用户权限 <br />REVOKE—撤消用户权限 <br />COMMIT—提交事务，可以使数据库的修改永久化 <br />ROLLBACK—回滚事务，消除上一个COMMIT命令后的所做的全部修改，使得数据库的内容恢复到上一个COMMIT执行后的状态.。 <br /><br />1、GRANT：所有着或者管理员把访问权限赋给其他用户 <br />语法格式： <br />grant [all privileges|privileges,….] on tabname | viewname to [public|user,….] <br />2、REVOKE:取消某一用户的某中访问权限 <br />语法格式： <br />Revoke [all privileges|privileges,….] on tabname | viewname from [public|user,….] <br />注：不能取消实例级别的用户的任何权限，他们不是通过grant授权的，是通过组实现的权限。 <br />3、COMMIT:把事务中所做的修改永久化记录到数据库。 <br />语法格式： <br />commit [work] <br />4、ROLLBACK:将上次提交以来所做的更改全部撤消。 <br />语法格式： <br />Rollback [work] <br /><br />●高级SQL简单介绍：<br /><br />一、查询间使用运算词 <br />A： UNION 运算符 <br />UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 <br /><br />B： EXCEPT 运算符 <br />EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。 <br /><br />C： INTERSECT 运算符 <br />INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。 <br />注：使用运算词的几个查询结果行必须是一致的。 <br /><br />二、外连接 <br />A、left outer join： <br />左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。 <br />B：right outer join: <br />右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。 <br />C：full outer join： <br />全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。 <br /><br />注：复合外连接按照从左到右的顺序执行连接，左边连接的结果集和右边连接 <br />三、超级分组和移动函数 <br />A：grouping sets：用来在单个sql中形成多级分组。 <br />例：select company_id,node_id,count(customer_id) from customer group by grouping sets(company_id,node_id) <br />B：rollup：可以在单个数据库操作中形成多个分组。 <br />例：select company_id,node_id,count(customer_id) from customer group by rollup(company_id,node_id) <br />注：rollup操作不是可交换的操作，指定用户组的顺序是很重要的。 <br />C：cube： 生成分组表中分组的所有组合。 <br />例：select company_id,node_id,count(customer_id) from customer group by cube(company_id,node_id) <br />D：over：移动函数可以帮助实现移动的数据分析 <br />Select date,avg(qty) over(order by date rows between 1 preceding and 1 following) as values from sale <br /><br />附录：常用函数介绍 <br />1、类型转化函数： <br />转化为数字类型的： <br />decimal, double, Integer, smallint,real <br />Hex(arg):转化为参数的16进制表示。 <br />转化为字符串类型的： <br />char, varchar <br />Digits(arg):返回arg的字符串表示法，arg必须为decimal。 <br />转化为日期时间的： <br />date, time,timestamp <br />2、时间日期： <br />year, quarter, month, week, day, hour, minute ,second <br />dayofyear(arg):返回arg在年内的天值 <br />Dayofweek(arg):返回arg在周内的天值 <br />days(arg):返回日期的整数表示法，从0001-01-01来的天数。 <br />midnight_seconds(arg):午夜和arg之间的秒数。 <br />Monthname(arg):返回arg的月份名。 <br />Dayname(arg):返回arg的星期。 <br />3、字符串函数： <br />length,lcase, ucase, ltrim, rtrim <br />Coalesce(arg1,arg2….):返回参数集中第一个非null参数。 <br />Concat (arg1,arg2):连接两个字符串arg1和arg2。 <br />insert(arg1,pos,size,arg2):返回一个，将arg1从pos处删除size个字符，将arg2插入该位置。 <br />left(arg,length):返回arg最左边的length个字符串。 <br />locate(arg1,arg2,&lt;pos&gt;):在arg2中查找arg1第一次出现的位置，指定pos，则从arg2的pos处开始找arg1第一次出现的位置。 <br />posstr(arg1,arg2):返回arg2第一次在arg1中出现的位置。 <br />repeat(arg1 ,num_times):返回arg1被重复num_times次的字符串。 <br />replace(arg1,arg2,arg3):将在arg1中的所有arg2替换成arg3。 <br />right(arg,length):返回一个有arg左边length个字节组成的字符串。 <br />space(arg):返回一个包含arg个空格的字符串。 <br />substr(arg1,pos,&lt;length&gt;):返回arg1中pos位置开始的length个字符，如果没指定length，则返回剩余的字符。 <br />4、数学函数： <br />Abs, count, max, min, sum <br />Ceil(arg):返回大于或等于arg的最小整数。 <br />Floor(arg):返回小于或等于参数的最小整数。 <br />Mod(arg1,arg2):返回arg1除以arg2的余数，符号与arg1相同。 <br />Rand():返回1到1之间的随机数。 <br />Power(arg1,arg2):返回arg1的arg2次方。 <br />Round(arg1,arg2):四舍五入截断处理，arg2是位数，如果arg2为负，则对小数点前的数做四舍五入处理。 <br />Sigh(arg):返回arg的符号指示符。-1,0,1表示。 <br />truncate(arg1,arg2):截断arg1，arg2是位数，如果arg2是负数，则保留arg1小数点前的arg2位。 <br /><br />5、其他： <br />nullif(arg1,arg2)：如果2个参数相等，则返回null，否则，返回参数1 <br /><img src ="http://www.blogjava.net/zf2000/aggbug/61443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zf2000/" target="_blank">张峰</a> 2006-08-03 08:35 <a href="http://www.blogjava.net/zf2000/archive/2006/08/03/61443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>