顯示具有 sql相關 標籤的文章。 顯示所有文章
顯示具有 sql相關 標籤的文章。 顯示所有文章

2010年8月24日 星期二

SQL語法探討:關於left/right join和inner join

其實以前一直無法理解left/right join的存在理由

以資料準確性和資源利用率來說,inner join或者說 select * from table where id=‘id’比起left好多了

不過這幾天經過學長的開導,發現了left join之類的存在理由

簡單來說,資料完整性

如果我們有一個訂單table_order,裡面有連結到客戶資料表table_cus的id_cust

使用inner join時,當id_cust在table_cust中不存在時,該資料就無法被選擇到

如 select a.order, b.name_cust from table order a , table_cust b where a.id_cust=b.id_cust where a.date between ‘2010/1/1’ and ‘2010/2/1’

這會造成資料的缺失,

簡單來說就是本來有100筆資料

但是其中10筆的id_cust在table_cust中不存在時

select結果就只有90筆

這種結果的問題非常大

如果放在別的情境中,當客戶發現這些資料不全時就會質問開發者

開發者需要從頭追蹤才能取得完整資訊

學長的說法是與其這樣,不如使用left join取得全部資料

之後再來處理對應的資料缺失問題

例如顯示客戶資料不存在並提示新增客戶資料之類

這個理由非常的能夠說服人

難怪有人說剛從學校畢業都用inner join

不過業界兩三年後就都用left join了 XD

2010年1月20日 星期三

oracle explain plan使用法

首先,帳號要有足夠權限

接下來,步驟如下
一、建立資料表
CREATE TABLE plan_table
(
statement_id VARCHAR2(30),
timestamp DATE,
remarks VARCHAR2(80),
operation VARCHAR2(30),
options VARCHAR2(30),
object_node VARCHAR2(128),
object_owner VARCHAR2(30),
object_name VARCHAR2(30),
object_instance NUMBER,
object_type VARCHAR2(30),
optimizer VARCHAR2(255),
search_columns NUMBER,
id NUMBER,
parent_id NUMBER,
position NUMBER,
other LONG
)

二、引用以下SQL
set echo on

delete from plan_table
where statement_id = 'MINE';
commit;
COL operation FORMAT A30
COL options FORMAT A15
COL object_name FORMAT A20
EXPLAIN PLAN set statement_id = 'MINE' for
/* ------ Your SQL here ------*/

/*----------------------------*/
/

set echo off

select operation, options, object_name
from plan_table
where statement_id = 'MINE'
start with id = 0
connect by prior id=parent_id and prior statement_id = statement_id;
set echo on

Oracl-12154 無法解析指定的連線 ID

oracle 連線問題

安裝新版oracle client後,發現toad可以連線,但ASP.NET網站無法連線資料庫
ORA-12154: TNS: 無法解析指定的連線 ID

查詢之後,發現幾個線索
1. 環境變數
http://blog.miniasp.com/post/2007/10/Oracle-10g-Client-Installation-Note.aspx
2. oracle的dll改變版本序號寫法
http://blog.miniasp.com/post/2009/08/Solve-ASPNET-cannot-connect-Oracle-DB-using-Development-Server.aspx
3. 同樣是系統變數問題,不過使用registry方法修改

4. VS安裝路徑問題
http://blog.miniasp.com/post/2009/08/Solve-ASPNET-cannot-connect-Oracle-DB-using-Development-Server.aspx

4的情況可以排除,雖然我的環境相同,不過之前可以正常運作

2的情況有點詭異,所以選擇先設定系統變數
由於registry中並沒有3所提及的預設路徑,因此使用了1的解法
參照情況加入了TNS_ADMIN變數後,VS2005就可以正常運作了

2007年5月31日 星期四

如何限定 SQL log 檔案的成長

用來限制SQL檔案大小的指令,應該是SQL server限定版

dbcc sqlperf(logspace)

Database name, log size, log space used(%), status

Track Log Growth
http://vyaskn.tripod.com/track_sql_database_file_growth.htm
EXEC sp_track_db_growth '@name'
GO

Reading LOG
SQL server Log Explorer