利用"SQL"語句自動生成序號的兩種方式


1.首先,我們來介紹第一種方式:

◆查詢的SQL語句如下:

select row_number() over (order by name) as rowid, sysobjects.[name] from sysobjects

◆運行的結果:

rowid   name
1           all_columns
2           all_objects
3           all_parameters
4           all_sql_modules
5           all_views

2.最后,我們來介紹第二種方式:

在我們利用這種方式生成自動序號時,Test_Table必須在數據庫中不能存在,因為在執行這些SQL語句的時后自動會創建表。

select id=IDENTITY(int,1,1), sysobjects.[name] as name into dbo.Test_Table from sysobjects

 

 

 

詳細講解有關獲取當月天數的實用技巧

 

 
 

 

獲取當月天數的實用技巧:

以下是引用片段:

select day(dateadd(mm,1,getdate())-day(getdate())) 
--獲得當月天數

分析如下:

select getdate()  --當前日期
 
select day(getdate()) --目前第幾天
 
select getdate()-day(getdate())   --上個月最后一天
 
select dateadd(mm,1,getdate())-day(getdate())  --加上一個月
 
select day(dateadd(mm,1,getdate())-day(getdate())) --獲得當月天數

  

以下是引用片段:

<script language="VBScript">
Dim dt1, dt2
dt1 = Date
dt1 = CDate(Year(dt1) & "-" & Month(dt1) & "-1") ' 得到本月第一天
dt2 = DateAdd("m", 1, dt1) ' 得到上個月第一天
MsgBox DateDiff("d", dt1, dt2) ' 得到兩個月的差
</script>

以下是引用片段:

<script language="jscript">
var dt = new Date(); //得到當前時間
dt = new Date(dt.getFullYear(), dt.getMonth() + 1, 0); //得到本月最后一天
alert(dt.getDate()); // 本月最后一天即為本月的天數
</script>

 

 

 

取一表前N條記錄 各個數據庫的不同SQL寫法

從別處看到的,本人在用的是DB2,竟然都不一樣……看來是不能說“會SQL,所有的數據庫用起來都一樣”了。 
 
1. ORACLE 
 
SELECT * FROM TABLE1 WHERE ROWNUM<=N  
2. INFORMIX  
SELECT FIRST N * FROM TABLE1  
3. DB2


 
SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=
N  
DB2  
SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY  
4. SQL SERVER  
SELECT TOP N * FROM TABLE1  
5. SYBASE  
SELECT TOP N * FROM TABLE1  
6. mysql:  
select * from table_name limit N 

 

為什么SQL不許在視圖定義ORDER BY子句

 

 

 

發布時間:2007.08.03 05:01     來源:賽迪網    作者:luoyingshu

 

問:為什么SQL Server不允許在視圖定義使用ORDER BY子句?

答: SQL Server之所以不允許在視圖定義中使用ORDER BY子句是為了遵守ANSI SQL-92標准。因為對該標准的原理分析需要對結構化查詢語言(SQL)的底層結構和它所基於的數學理論進行討論,我們不能在這里對它進行充分的解釋。但是,如果你需要在視圖中指定ORDER BY子句,可以考慮使用以下方法:

USE pubs
GO 
 
CREATE VIEW AuthorsByName
AS
SELECT TOP 100 PERCENT *
FROM authors 
ORDER BY au_lname, au_fname
GO

Microsoft在SQL Server 7.0中引入的TOP結構在同ORDER BY子句結合使用時是非常有用的。只有在同TOP關鍵詞結合使用時,SQL Server才支持在視圖中使用ORDER BY子句。

注意:TOP關鍵詞是SQL Server對ANSI SQL-92標准的擴展。

一條SQL語句變得巨慢的原因及其解決方法

 

 

 

發布時間:2008.01.30 04:58     來源:賽迪網    作者:趙震

 

現象:一條SQL突然運行的特別慢。

select uidTable.column_value, first_name||' '
||last_name, company, job_title, upper(member_level), 
upper(service_value)
from (select * from table(select cast(multiset
(select b from bbb)as Taaa) from dual)) uidTable,member
where uidTable.column_value = member.login_id(+) 
and member.site='alibaba' and member.site='test';

出錯原因:用戶增加了一個條件member.site=test,造成連接的順序變化了,原來的驅動表是uidTable(最多1024條記錄),現在變成了member表做驅動(600W條)。所以這條語句變的巨慢。

但是既然是外連接,為什么連接的順序會改變呢?因為外連接的連接順序不是由COST決定的,而是由連接的條件決定的。發現執行計划如下:

-------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------
| 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 |
| 1 | NESTED LOOPS | | 1018 | 72278 | 8155 |
| 2 | VIEW | | 4072 | 69224 | 11 |
| 3 | COLLECTION ITERATOR SUBQUERY FETCH| | | | |
| 4 | TABLE ACCESS FULL | DUAL | 4072 | | 11 |
| 5 | TABLE ACCESS FULL | BBB | 41 | 287 | 2 |
| 6 | TABLE ACCESS BY INDEX ROWID | MEMBER | 1 | 54 | 2 |
|* 7 | INDEX UNIQUE SCAN | MEMBER_SITE_LID_PK | 4 | | 1 |
-------------------------------------------------

為什么根本就沒有執行外連接呢?問題出在member.site='test'這個條件上,因為對外連接的表加了條件,造成外連接失效。改為member.site(+)='test'后,問題徹底解決。

---------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
-----------------------------------------------------
| 0 | SELECT STATEMENT | | 1018 | 72278 | 8155 |
| 1 | NESTED LOOPS | | 1018 | 72278 | 8155 |
| 2 | VIEW | | 4072 | 69224 | 11 |
| 3 | COLLECTION ITERATOR SUBQUERY FETCH| | | | |
| 4 | TABLE ACCESS FULL | DUAL | 4072 | | 11 |
| 5 | TABLE ACCESS FULL | BBB | 41 | 287 | 2 |
| 6 | TABLE ACCESS BY INDEX ROWID | MEMBER | 1 | 54 | 2 |
|* 7 | INDEX UNIQUE SCAN | MEMBER_SITE_LID_PK | 4 | | 1 |
-----------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM