转自   http://i.cnblogs.com/EditPosts.aspx?opt=1

几个小技巧  
 

(1)||的使用: 
select ‘(‘||phone[1,3]||’)’phone[5,12], from customer where customer_num=106; 
Result:(415)389-8789

(2)TRIM的使用:select trim(fname) from customer; 删除前导和后继空格。 
select trim(leading ‘1’ from phone) from customer; 
返回值中若phone字段以字符’1’开始,则删除字符’1’。

(3)SERAIL值的插入:tt中有两个字段,字段c1是serail ,字段c2是char(8); 
insert into tt values(0, ‘AA’);insert into tt values(0, ‘BB’); 
select * from tt;得到结果:1 AA, 2 BB; 
对于SERIAL的字段,插入0表示由数据库系统自动插入序列值。

(4)DELIMITER的使用: 
在LOAD和UNLOAD中指定字段值之间的间隔采用的字符 
缺省时采用字符’|’。如:unload to ‘next.txt’ delimiter ‘;’ select * from tt ; 
但不能使用'\', hex digits, tab 或 space。

(5)UNION和UNION ALL: 
要求查询返回的结果名字、类型相同;前者不重复,后者显示重复值。

 

在SELECTs 中使用 sorts 或 joins 
如果在SELECTs 中使用 sorts 或 joins可以使用临时表 例: 
SQL1: 
SELECT time_records.*, case_name 
FROM time_records, OUTER cases 
WHERE time_records.client = "AA1000" 
AND time_records.case_no = cases.case_no 
ORDER BY time_records.case_no 
SQL2: 
SELECT time_records.*, case_name 
FROM time_records, OUTER cases 
WHERE time_records.client = "AA1000" 
AND time_records.case_no = cases.case_no 
INTO temp foo; 
SELECT * from foo 
ORDER BY case_no 
说明:语句二比语句一将更节省时间。

 

SELECTs 中使用 NOT IN or NOT EXISTS 子句  
例:SQL1:(这条语句的执行将会很费时) 
SELECT code FROM table1 
WHERE code NOT IN ( SELECT code FROM table2 ) ; 
SQL2: 
SELECT code, 0 flag FROM table1 INTO TEMP tflag; 
UPDATE tflag SET flag = 1 
WHERE code IN 
( SELECT code FROM table2 WHERE tflag.code = table2.code ); 
SELECT * FROM tflag WHERE flag = 0;

说明:大多数情况下语句二比语句一将更有效,但若table1.code和table2.code均有索引, 
可能效果不明显。

SET EXPLAIN ON的使用 
"SET EXPLAIN ON" 是一个 SQL命令,它将产生文件sqexplain.out,其中含有SQL命令的诊断信息,'cost' 会指出命令的估计用时(有时可能有较大偏差)。  
避免使用 "OR" 
例:WHERE a = "B" OR a = "C"将比WHERE a IN ("B","C")慢 另外,有时使用UNION将比OR有效。  
 

关于索引 
在joined 和ORDER BY的字段上加索引,WHERE子句涉及的字段也可以尽量加索引  
AND和BWTWEEN的使用 
例: 
WHERE datecol >= "this/date" AND datecol <= "that/date"将比 
WHERE datecol BETWEEN "this/date" AND "that/date"慢  
在CLAC字段上建立视图 
CREATE VIEW tst AS 
SELECT ship_charge - totval cout 
FROM orders WHERE ship_charge > 0; 
应改为 
CREATE VIEW tst (cout) AS 
SELECT ship_charge - totval 
FROM orders WHERE ship_charge > 0;  
如何存取当前库以外的数据? 
在OnLine版本中,使用下列语句 
SELECT * FROM dbname@server:owner.tablename 
注: 当前库与dbname@server必须保持日志一致,即同为有日志或无日志。 
"@server"和"owner."是可选的 
某些OnLine版本中也可以使用同义名,如下 
eg: CREATE SYNONYM Owner1.Table1 FOR Database2@Machine2:Owner2.Table2  
在主表中查询从表中没有的数据 
例: 
SQL1: 
SELECT * FROM invlin WHERE invlin.invoice NOT IN 
(SELECT invmst.invoice FROM invmst) 
优化后的SQL2 
SELECT invmst.*, invlin.invoice inv_invoice 
FROM invmst, outer invlin 
WHERE invmst.invoice = invlin.invoice 
INTO TEMP lone_invoices; 
SELECT <whatever you need> 
FROM lone_invoices 
WHERE (inv_invoice IS NULL)

怎样返回SELECT语句中正常返回记录数的一部分? 
例: 
SQL1: 
SELECT firstname, lastname, city, state 
FROM bigdatabase 
WHERE state = "TX" 
使用语句 
SELECT firstname, lastname, city, state 
FROM bigdatabase 
WHERE state = "TX" 
AND rowid=(trunc(rowid/x)*x) 
其中x是查询部分的比例1/x,注意只能作到大约比例,且不保证随机性.  
如何创建与与永久表一样的结构 
例: 
SQL1: 
CREATE TEMP TABLE mytemp (prodno LIKE product.prodno desc LIKE product.desc) 
SQL2: 
SELECT prodno, desc FROM product 
WHERE ROWID = -1 
INSERT INTO TEMP mytemp 
两种方法都正确,你选择那一个?  
怎样更改序列值 
例: 
改变自动生成的序列值的起始值(由小的序列值改为大的序列值): 
ALTER TABLE tablename MODIFY( ser_col_name SERIAL(new_start_number)) 
改自动生成的序列值的起始值为1(由大的序列值改为小的序列值): 
先改为1,再改为指定的值 
INSERT INTO tablename (serial_column) VALUES (2147483647); 
INSERT INTO tablename (serial_column) VALUES (0); -- Back to 1 again! 
ALTER TABLE tablename MODIFY( ser_col_name SERIAL(new_start_number))  
加速SELECT COUNT(UNIQUE)? 
例: 
SQL1: select count(unique xxx) ... 执行了约30分钟. 
SQL2: select unique xxx ... into temp aa; select count(*) from aa; 执行了7分钟

SQL 实践和技巧 <2>的更多相关文章

  1. Oracle SQL性能优化技巧大总结

    http://wenku.baidu.com/link?url=liS0_3fAyX2uXF5MAEQxMOj3YIY4UCcQM4gPfPzHfFcHBXuJTE8rANrwu6GXwdzbmvdV ...

  2. 【转】PL/SQL Developer使用技巧、快捷键

    原文链接:PL/SQL Developer使用技巧.快捷键 1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plu ...

  3. mysql操作sql的小技巧

    本篇集中整理一下执行sql的小技巧,这种方式不仅带来了操作上的便捷,也可以保证数据可以数据的安全性. 1:查询数据(保证查询性能) 首先想先解释一下 SELECT * 和 SELECT t.id , ...

  4. PL/SQL Developer使用技巧(部分)

    PL/SQL Developer使用技巧(部分) 关键字自动大写 在sql命令窗口中输入SQL语句时,想要关键字自动大写,引人注目该怎么办呢? 一步设置就可以达成了.点击Tools->Prefe ...

  5. SQL高级查询技巧

    SQL高级查询技巧   1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重 ...

  6. 【SQL实践】其他常用SQL汇总

    [SQL实践]其他常用SQL汇总 1.联表更新 update students stu inner join course on course.STUDENT_ID=stu.id set stu.na ...

  7. sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理

    1. 安装 Microsoft SQL Server Compact 4.0  https://www.microsoft.com/zh-cn/download/confirmation.aspx?i ...

  8. sql server 小技巧(2) 删除sql server中重复的数据

    with list_numbers as ( select Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category, ROW_NUM ...

  9. sql server 小技巧(1) 导入csv数据到sql server

    1. 右击 DataBaseName,选择 Tasks->Import Data 2. 选择数据源: Flat File Source , 选择一个csv文件 Advance: 选择所有的列,改 ...

随机推荐

  1. bzoj2209

    题解: splay打标机 往下传递 记录x,y为化简后,区间有多少(,) 代码: #include<bits/stdc++.h> ; using namespace std; ],sum[ ...

  2. start with...connect by子句的浅用

    start with的用法,其基本语法如下: select … from tablename start with 条件1connect by 条件2where 条件3; 但是我在pl/sql中写入以 ...

  3. vsftpd配置虚拟用户为登录用户02

    1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...

  4. Java学习图谱

    学习图谱 一:常见模式与工具 二:分布式架构 三:微服务架构 四:底层知识 五:性能优化 六:工程化与工具

  5. MyEclipse怎么导入导出项目

    MyEclipse怎么导入导出项目 | 浏览:25271 | 更新:2012-06-06 17:48 1 2 3 4 5 6 7 分步阅读 MyEclipse,是一个十分优秀的功能强大的JavaEE的 ...

  6. TJU Problem 1090 City hall

    注:对于每一横行的数据读取,一定小心不要用int型,而应该是char型或string型. 原题: 1090.   City hall Time Limit: 1.0 Seconds   Memory ...

  7. 多名历年高考状元最终选择做中国顶尖黑客 - imsoft.cnblogs

    原标题:揭秘中国顶尖黑客:二分之一是历年高考[微博]状元 “二分之一是各地的历年高考状元,二分之一是数学专业,二分之一来自微软.” Keen这样的团队是坚决与黑产划清界限的,这也是圈内的“道德洁癖”, ...

  8. Unity 3D游戏-塔防类游戏源码:重要方法和功能的实现

    Unity-塔防游戏源码 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 2 3 4 5 6 7 8 9 ...

  9. poj-1015(状态转移的方向(01背包)和结果的输出)

    #include <iostream> #include <algorithm> #include <cstring> #include <vector> ...

  10. 20155207 2006-2007-2 《Java程序设计》第5周学习总结

    20155207 2006-2007-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 语法与继承架构 Java中的错误以对象方式呈现为 java.lang.Throwab ...