Ⅰ 怎麼利用sql語句把幾個表合為一個虛擬表~!
使用視圖呀
參見別人說法
SQL視圖
視圖可以被看成是虛擬表或存儲查詢。可通過視圖訪問的數據不作為獨特的對象存儲在資料庫內。資料庫內存儲的是 SELECT 語句。SELECT 語句的結果集構成視圖所返回的虛擬表。用戶可以用引用表時所使用的方法,在 Transact-SQL 語句中通過引用視圖名稱來使用虛擬表。使用視圖可以實現下列任一或所有功能:
將用戶限定在表中的特定行上。
例如,只允許雇員看見工作跟蹤表內記錄其工作的行。
將用戶限定在特定列上。
例如,對於那些不負責處理工資單的雇員,只允許他們看見雇員表中的姓名列、辦公室列、工作電話列和部門列,而不能看見任何包含工資信息或個人信息的列。
將多個表中的列聯接起來,使它們看起來象一個表。
聚合信息而非提供詳細信息。
例如,顯示一個列的和,或列的最大值和最小值。
通過定義 SELECT 語句以檢索將在視圖中顯示的數據來創建視圖。SELECT 語句引用的數據表稱為視圖的基表。在下例中,pubs 資料庫中的 titleview 是一個視圖,該視圖選擇三個基表中的數據來顯示包含常用數據的虛擬表:
CREATE VIEW titleview
AS
SELECT title, au_ord, au_lname, price, ytd_sales, pub_id
FROM authors AS a
JOIN titleauthor AS ta ON (a.au_id = ta.au_id)
JOIN titles AS t ON (t.title_id = ta.title_id)
之後,可以用引用表時所使用的方法在語句中引用 titleview。
SELECT *
FROM titleview
一個視圖可以引用另一個視圖。例如,titleview 顯示的信息對管理人員很有用,但公司通常只在季度或年度財務報表中才公布本年度截止到現在的財政數字。可以建立一個視圖,在其中包含除 au_ord 和 ytd_sales 外的所有 titleview 列。使用這個新視圖,客戶可以獲得已上市的書籍列表而不會看到財務信息:
CREATE VIEW Cust_titleview
AS
SELECT title, au_lname, price, pub_id
FROM titleview
視圖可用於在多個資料庫或 Microsoft? SQL Server? 2000 實例間對數據進行分區。分區視圖可用於在整個伺服器組內分布資料庫處理。伺服器組具有與伺服器聚集相同的性能優點,並可用於支持最大的 Web 站點或公司數據中心的處理需求。原始表被細分為多個成員表,每個成員表包含原始表的行子集。每個成員表可放置在不同伺服器的資料庫中。每個伺服器也可得到分區視圖。分區視圖使用 Transact-SQL UNION 運算符,將在所有成員表上選擇的結果合並為單個結果集,該結果集的行為與整個原始表的復本完全一樣。例如在三個伺服器間進行表分區。在第一個伺服器上定義如下的分區視圖:
CREATE VIEW PartitionedView AS
SELECT *
FROM MyDatabase.dbo.PartitionTable1
UNION ALL
SELECT *
FROM Server2.MyDatabase.dbo.PartitionTable2
UNION ALL
SELECT *
FROM Server3.MyDatabase.dbo.PartitionTable3
在其它兩個伺服器上定義類似的分區視圖。利用這三個視圖,三個伺服器上任何引用 PartitionedView 的 Transact-SQL 語句都將看到與原始表中相同的行為。似乎每個伺服器上都存在原始表的復本一樣,而實際上每個表只有一個成員表和分區視圖。有關更多信息,請參見視圖使用方案。
只要所做的修改隻影響視圖所引用的其中一個基表,就可以更新所有 SQL Server 版本內的視圖(可以對其執行 UPDATE、DELETE 或 INSERT 語句)。
-- Increase the prices for publisher 』0736』 by 10%.
UPDATE titleview
SET price = price * 1.10
WHERE pub_id = 』0736』
GO
SQL Server 2000 支持可引用視圖的更復雜的 INSERT、UPDATE 和 DELETE 語句。可在視圖上定義 INSTEAD OF 觸發器,指定必須對基表執行的個別更新以支持 INSERT、UPDATE 或 DELETE 語句。另外,分區視圖還支持 INSERT、UDPATE 和 DELETE 語句修改視圖所引用的多個成員表。
索引視圖是 SQL Server 2000 具有的功能,可顯著提高復雜視圖類型的性能,這些視圖類型通常在數據倉庫或其它決策支持系統中出現。
視圖的結果集通常不保存在資料庫中,因此視圖也稱為虛擬表。視圖的結果集動態包含在語句邏輯中並在運行時動態生成。有關更多信息,請參見視圖解析。
復雜的查詢(如決策支持系統中的查詢)可引用基表中的大量行,並將大量信息聚積在相對較簡潔的聚合中,如總和或平均值。SQL Server 2000 支持在執行此類復雜查詢的視圖上創建聚集索引。當執行 CREATE INDEX 語句時,視圖 SELECT 的結果集將永久存儲在資料庫中。SQL 語句此後若引用該視圖,響應時間將會顯著縮短。對基本數據的修改將自動反映在視圖中。
SQL Server 2000 CREATE VIEW 語句支持 SCHEMABINDING 選項,以防止視圖所引用的表在視圖未被調整的情況下發生改變。必須為任何創建索引的視圖指定 SCHEMABINDING。
例:創建視圖
Create View TitleView
AS
Select ID,Title,PostTime,Hits From [List]
然後引用Select Top 100 * From TitleView
用循環輸出數據與直接Select Top 100 * From [List]相比速度提高將近30毫秒!
當然我這里只是舉例子,一般情況下對單個表沒必要去用視圖
Ⅱ 在查詢結果里 創建mysql 自動增長虛擬列,sql語句 145
select (@i:=@i+1) as i,table_name.* from table_name,(select @i:=0) as it
Ⅲ sql 查詢顯示虛擬列
有點類似於分頁存儲過程裡面的代碼.with tempTable as ( select * , Row_number() over (order by 要排序的欄位名) as rowNumber from 表名 where 1 = 1)select * from tempTable --注意後面的條件查詢 where 1 = 1可不寫也可以進行擴展.
--select * from tempTable 後面可以按虛擬的列標識查詢例如改成select * from tempTable where rowNumber between 1 and 10 是不是要做分頁的效果呢?2000的話會比較麻煩,不過還是可以做的,select top 1 * from table
where 某欄位 not in (select top(分頁的條目) 某欄位 from table)這樣就能達到效果,不過效率不高。。。針對樓主的虛擬列的標識,我寫了個存儲過程,希望對樓主有所幫助吧~是以northwind為實例庫的,有這個資料庫吧select * into ##temp from Categories
go
alter table ##temp add row int
go
create proc row_number
as
begin
declare @id int
set @id=0
while @id < (select count(*) from ##temp)
begin
set @id=@id+1
update ##temp set row=@id where CategoryId=(select top 1 CategoryId from ##temp
where CategoryId not in (select top(@id-1) CategoryId from ##temp))
end
end
go
exec row_number
go
select * from ##temp經測試,可行。。。不過效率不高,個人不推薦使用。。
Ⅳ linq 虛擬列 怎麼實現
可以的,C#有匿名類型,給你寫個示例:
classProgram
{
staticvoidMain(string[]args)
{
List<C>lst=newList<C>(){
newC(11,12),
newC(21,22)};
varv=fromarrinlst
selectnew
{
arr.A,
arr.B,
Sum=(arr.A+arr.B)
};
foreach(varxinv)
Console.WriteLine("{0} {1} {2} ",x.A,x.B,x.Sum);
Console.ReadLine();
}
}
publicclassC
{
publicC(inta,intb)
{
this.A=a;
this.B=b;
}
publicintA;
publicintB;
}
Ⅳ sql2005創建一個虛擬列排序
SQL語句:
select*,ROW_NUMBER()over(orderby列名)asNew_IDfrom表名
其中的ROW_NUMBER() over(order by 列名)就能為你新建一列New_ID,此列為連續的數字,從1開始,不會間斷。
希望對你有所幫助。此語句只適用於SQL2005和以上版本
Ⅵ SQL中表沒有列名稱的情況下如何創建一個虛擬列名稱
如圖所示為原表格結構。