SQL 如何實現一條sql語句插入1000行數據
用SQL的可編程性,作為測試數據用是吧:
declare @i int;--申明一個整形變量i
set @i = 1;--設置初始值為1
while(@i < 1000)--用while循環給定一個循環結束條件小于1000
begin
insert into tb_user values('user_no'+cast(@i as varchar),'user_name'+cast(@i as varchar));--開始插入
set @i = @i +1;--累加
end;
--單引號中的數據是自定義的,cast(@i as vaechar)是將整形的i轉換成數據庫中的varchar類型,可編程性中的變量前都用@定義,begin ,end相當于"{"和"}".整個數據采用拼接方式組成,雖然單一,但是可以滿足插入1000條的要求了,作為測試數據應該是沒問題的,在SQLServer2005的環境下完成.
高效率常用的OracleSQL語句是什么
1。
SELECT子句中避免使用 “*” 當你想在SELECT子句中列出所有的COLUMN時,使用動態SQL列引用 ‘*’ 是一個方便的方法。不幸的是,這是一個非常低效的方法。
實際上,ORACLE在解析的過程中, 會將“*” 依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間。 2。
使用DECODE函數來減少處理時間 使用DECODE函數可以避免重復掃描相同記錄或重復連接相同的表。 例如: Sql代碼 SELECT COUNT (*), SUM (SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAME LIKE 'SMITH%'; SELECT COUNT (*), SUM (SAL) FROM EMP WHERE DEPT_NO = 0030 AND ENAME LIKE 'SMITH%'; 你可以用DECODE函數高效地得到相同結果: Sql代碼 SELECT COUNT (DECODE(DEPT_NO,0020,'X', NULL )) D0020_COUNT, COUNT (DECODE(DEPT_NO,0030,'X', NULL )) D0030_COUNT, SUM (DECODE(DEPT_NO,0020,SAL, NULL )) D0020_SAL, SUM (DECODE(DEPT_NO,0030,SAL, NULL )) D0030_SAL FROM EMP WHERE ENAME LIKE 'SMITH%'; 類似的,DECODE函數也可以運用于GROUP BY 和ORDER BY子句中。
3。刪除重復記錄 最高效的刪除重復記錄方法 ( 因為使用了ROWID) Sql代碼 DELETE FROM EMP E WHERE E。
ROWID > ( SELECT MIN (X。ROWID) FROM EMP X WHERE X。
EMP_NO = E。EMP_NO); 4。
用TRUNCATE替代DELETE 當刪除表中的記錄時,在通常情況下,回滾段(rollback segments ) 用來存放可以被恢復的信息,如果你沒有COMMIT事務,ORACLE會將數據恢復到刪除之前的狀態(準確地說是恢復到執行刪除命令之前的狀況),而當運用TRUNCATE時, 回滾段不再存放任何可被恢復的信息。 當命令運行后,數據不能被恢復。
因此很少的資源被調用,執行時間也會很短。 5。
計算記錄條數 和一般的觀點相反, count(*) 比count (1)稍快 ,當然如果可以通過索引檢索,對索引列的計數仍舊是最快的。 例如 COUNT(EMPNO) 6。
用Where子句替換HAVING子句 避免使用HAVING子句,HAVING 只會在檢索出所有記錄之后才對結果集進行過濾,這個處理需要排序、總計等操作,如果能通過WHERE子句限制記錄的數目,那就能減少這方面的開銷, 例如: Sql代碼 --低效 SELECT REGION, AVG (LOG_SIZE) FROM LOCATION GROUP BY REGION HAVING REGION REGION != 'SYDNEY' AND REGION != 'PERTH' --高效 SELECT REGION, AVG (LOG_SIZE) FROM LOCATION WHERE REGION REGION != 'SYDNEY' ND REGION != 'PERTH' GROUP BY REGION 7。 用EXISTS替代IN 在許多基于基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接。
在這種情況下, 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率。 Sql代碼 --低效 SELECT * FROM EMP WHERE EMPNO > 0 AND DEPTNO IN ( SELECT DEPTNO FROM DEPT WHERE LOC = 'MELB') --高效: SELECT * FROM EMP WHERE EMPNO > 0 AND EXISTS ( SELECT 'X' FROM DEPT WHERE DEPT。
DEPTNO = EMP。DEPTNO AND LOC = 'MELB') 8。
用NOT EXISTS替代NOT IN 在子查詢中,NOT IN子句將執行一個內部的排序和合并。 無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷)。
為了避免使用NOT IN,我們可以把它改寫成外連接(Outer Joins)或NOT EXISTS。 例如: SELECT …FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT='A'); Sql代碼 --為了提高效率改寫為: (方法一: 高效) SELECT …。
FROM EMP A,DEPT B WHERE A。DEPT_NO = B。
DEPT(+) AND B。DEPT_NO IS NULL AND B。
DEPT_CAT(+) = 'A' -- (方法二: 最高效) SELECT …。 FROM EMP E WHERE NOT EXISTS ( SELECT 'X' FROM DEPT D WHERE D。
DEPT_NO = E。DEPT_NO AND DEPT_CAT = 'A'); 9。
用EXISTS替換DISTINCT 當提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在SELECT子句中使用DISTINCT。 一般可以考慮用EXIST替換 例如: Sql代碼 --低效: SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E WHERE D。
DEPT_NO = E。DEPT_NO --高效: SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT 'X' FROM EMP E WHERE E。
DEPT_NO = D。DEPT_NO); --EXISTS 使查詢更為迅速,因為RDBMS核心模塊將在子查詢的條件一旦滿足后,立刻返回結果。
10。 用索引提高效率 索引是表的一個概念部分,用來提高檢索數據的效率,實際上ORACLE使用了一個復雜的自平衡B-tree結構,通常通過索引查詢數據比全表掃描要快,當 ORACLE找出執行查詢和Update語句的最佳路徑時, ORACLE優化器將使用索引, 同樣在聯結多個表時使用索引也可以提高效率,另一個使用索引的。
挑選某表的前n列的sql語句怎么寫,n是傳進來的變量
Create Procedure sp_getTopN(@Table Varchar(100),@N int,@Where Varchar(1000)='')
As
Begin
declare @sql Varchar(8000)
set @sql='Select '
Select top (@N) @sql=@sql+name+',' from *s Where object_id=object_id(@Table)
order by column_id
set @sql=left(@sql,len(@sql)-1)+' From '+@Table
if @Where!=''
set @sql=@sql+' Where '+@Where
exec (@sql)
end
Exec sp_getTopN '表明',N
你可以建個數據字典,按照字典中表的列作為順序,顯示前N列,反正就是動態生成Select語句
查詢表中中間的一行數據的Sql語句
先把第二題給你
select *,*,isnull(*ment,'黑人') department,*
from testtable2 a left join testtable1 b
on *=*
第一題稍等
第一題
select pid,
sum(case when s_id='01' then 1 else 0 end) s1_id,
sum(case when s_id='02' then 1 else 0 end) s2_id,
sum(case when s_id='03' then 1 else 0 end) s3_id
from A
group by pid
請問SQL里面的嵌入語句是什么意思?嵌入語句主要是什么作用的呢?
嵌入語句,就是在SQL語句中再嵌入其它的SQL語句,嵌入的目的就是為了實現某種特定情況下的操作需求。
下面給你舉個例子,你就明白了: 假設有兩個表test1,test2,兩表有一個共同的關聯字段id。如果要保證兩表數據一致,刪除在test2表中不存在的test1表數據,可以按如下寫SQL語句: delete from table1 where id not in (select id from table2); 括號里面的就是嵌入語句。
當然,不僅僅是where條件,在select、from后面也可以嵌入其它的select語句。 例如:select * from (select * from test1) as tmp; 要注意一點,嵌入的SQL語句前后必須用括號括上才正確。
當然,不是所有的SQL語句都可以嵌入的,可嵌入的SQL語句一定是可以返回一個結果集的語句。
轉載請注明出處華閱文章網 » 選一張表里前1000行的sql語句是什么...