??xml version="1.0" encoding="utf-8" standalone="yes"?> 1、SQL 语句中,union的? sqlQselect [year],avg(case[quarter] when '1' then num) as 'quarter1', 用IN写出来的SQL的优Ҏ(gu)比较Ҏ(gu)写及(qing)清晰易懂Q这比较适合C软g开发的风格?/P>
但是用IN的SQL性能L比较低的Q从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:(x) ORACLE试图其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询Q再查询外层的表记录Q如果{换成功则直接采用多个表的q接方式查询。由此可见用IN的SQL臛_多了一个{换的q程。一般的SQL都可以{换成功,但对于含有分l统计等斚w的SQL׃能{换了?/P>
推荐Ҏ(gu)Q在业务密集的SQL当中量不采用IN操作W?/P>
NOT IN操作W?/B> 此操作是强列推荐不用的Q因为它不能应用表的索引?/P>
推荐Ҏ(gu)Q用NOT EXISTS 或(外连?判断为空Q方案代?/P>
<> 操作W(不等于) 不等于操作符是永q不?x)用到烦引的Q因此对它的处理只会(x)产生全表扫描?/P>
推荐Ҏ(gu)Q用其它相同功能的操作运代替,?/P>
a<>0 改ؓ(f) a>0 or a<0 a<>’?改ؓ(f) a>’?/P>
IS NULL 或IS NOT NULL操作Q判断字D|否ؓ(f)I) 判断字段是否为空一般是不会(x)应用索引的,因ؓ(f)B?wi)烦引是不烦引空值的?/P>
推荐Ҏ(gu)Q?/P>
用其它相同功能的操作q算代替Q如 a is not null 改ؓ(f) a>0 或a>’’等?/P>
不允许字Dؓ(f)I,而用一个缺省g替空|如业扩申请中状态字D不允许为空Q缺省ؓ(f)甌?/P>
建立位图索引Q有分区的表不能建,位图索引比较难控Ӟ如字D值太多烦引会(x)使性能下降Q多人更新操作会(x)增加数据块锁的现象) > ?< 操作W(大于或小于操作符Q?/B> 大于或小于操作符一般情况下是不用调整的Q因为它有烦引就?x)采用烦引查找,但有的情况下可以对它q行优化Q如一个表?00万记录,一个数值型字段A(ch)Q?0万记录的A=0Q?0万记录的A=1Q?9万记录的A=2Q?万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因ؓ(f)A>2时ORACLE?x)先扑և?的记录烦引再q行比较Q而A>=3时ORACLE则直接找?3的记录烦引?/P>
LIKE操作W?/B> LIKE操作W可以应用通配W查询,里面的通配W组合可能达到几乎是L的查询,但是如果用得不好则会(x)产生性能上的问题Q如LIKE ?5400%?q种查询不会(x)引用索引Q而LIKE ‘X5400%’则?x)引用范围烦引。一个实际例子:(x)用YW_YHJBQK表中营业~号后面的户标识号可来查询营业编?YY_BH LIKE ?5400%?q个条g?x)生全表扫描,如果?gu)YY_BH LIKE ’X5400%?OR YY_BH LIKE ’B5400%?则会(x)利用YY_BH的烦引进行两个范围的查询Q性能肯定大大提高?/P>
]]>
Table a: field1,field2 Table b: field1,field2
data: 1 2 data: 2, 2
1 4 2, 3
sql: select filed1 from a union select field1 from b
data: field1
1
2
sql: select filed1,field2 from a union select field1,field2 from b
data: field1,field2
1 2
1 4
2 2
2 3
2、table1?jng)idQintQchargeQintQfkQint?
table2?jng)idQintQchargeQint?
修改table2Qcharge{于table1中相应值的?
sqlQupdate a set a.charge=b.totalcharge
from (select id,sum(charge) totalcharge from table1 group by id) b,table2 a
where a.id=b.id
3、出发点 目的?nbsp; 路程
A B
A C
A D
A E
B F
C G
C A
用sql语句计算出所有从A出发所能到辄目的圎ͼ包括间接的?
sqlQselect distinic 目的?from ?
where 出发?in (
select distinic 目的?from ?
where 出发?'A' union select 'A')
说明Q上面的Ҏ(gu)只用一U嵌套。可以满x题的需求?
4、表t1
year quarter num
2001 1 3.4
2001 2 5.12
2001 3 6.13
2001 4 8.14
2002 1 5.21
2002 2 4.22
2002 3 6.23
2002 4 4.24
用sql语句获取下面的数?
2001 3.4 5.12 6.13 8.14
2002 5.21 4.22 6.23 4.24
avg(case[quarter] when '2' then num) as 'quarter2',
avg(case[quarter] when '3' then num) as 'quarter3',
avg(case[quarter] when '4' then num) as 'quarter4'
from t1 group by year
]]>
原因Q可能有两种
1、mysql的确省字W集讄的不是gb
2、mysql-connectorQmysql官方提供的jdbc驱动E序Q有问题
解决Q?
W一U情况:(x)修改my.ini文g。my.ini可能存在pȝ目录下(c:\windowsQ和mysql所安装的目录下QC:\Program Files\mysql\MySQL Server 4.1Q。打开my.ini文gQ找到[mysqld]块。把default-character讄为gbkQ如果没有找到则d即default-character-set=gbk?重启mysqlQ问题解冟?
W二U情况:(x)到mysql的官方网站下载最新的jdbc驱动E序。www.mysql.org
]]>
svrmgrl
connect internal/oracle
shutdown immediate
startup
2、导入,导出数据
a、删除一个用P(x)
drop user smartweb CASCADE
b、创Z个用P(x)
create user smartweb identified by smartweb
c、给用户赋予权限Q?
grant connect to smartweb
grant resource to smartweb
grant create session to smartweb
d、连接:(x)
conn smartweb/smartweb
e、导入:(x)
imp
3、查看oracle的版?
select * from v$version
4、修改oracle中的Oracle Servlet EngineQOSEQ所占的8080端口QTNSLSNR.exeQ?
安装Oracle 9i?080端口被OSE占用Q即tnslsnr.exeq程所占用。清除此端口Ҏ(gu)Q?
cd $ORACLE_HOME/jis/install
sess_sh -u sys/change_on_install -role SYSDBA -s jdbc:oracle:oci8:@yhp
$@serverendp.ssh
$exit
5、impӞ出现的错误:(x)不支持要求的字符集{换(从类?50?52Q?
使用函数NLS_CHARSET_NAME卛_获得该字W集Q?
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道该dmp文g的字W集为US7ASCIIQ如果需要把该dmp文g的字W集换成ZHS16GBKQ则需要用NLS_CHARSET_ID获取该字W集的编P(x)
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
?52换成16q制敎ͼ?54Q把2?字节?0 01换成03 54Q即完成了把该dmp文g字符集从us7ascii到zhs16gbk的{化,q样Q再把该dmp文g导入到zhs16gbk字符集的数据库就可以了。(注意Q十q制C十六q制之间的{换,x白其中的道理Q?img src ="http://www.aygfsteel.com/swingboat/aggbug/25667.html" width = "1" height = "1" />
]]>
T_DepartmentQ?BR> ID Qvarchar2Q?5)
NameQvarchar2Q?00)
SuperiorIDQvarchar2Q?5Q?BR> SuperiorNameQvarchar2Q?00)
RemarkQvarchar2Q?000)
Ҏ(gu)一个部门的IDQ获取该部门下所有的子部?例如部门的ID为“D”:(x)
select * from T_Department
Start with ID='D'
Connect by prior ID=SuperiorID