茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671303 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00022.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [轉貼]SQL Insert Into

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]SQL Insert Into
到目前為止,我們學到了將如何把資料由表格中取出。但是這些資料是如果進入這些表格的呢? 這就是這一頁 (INSERT INTO) 和下一頁 (UPDATE) 要討論的。

基本上,我們有兩種作法可以將資料輸入表格中內。一種是一次輸入一筆,另一種是一次輸入好幾筆。我們先來看一次輸入一筆的方式。

依照慣例,我們先介紹語法。一次輸入一筆資料的語法如下:
INSERT INTO "表格名" ("欄位1", "欄位2", ...)
VALUES ("值1", "值2", ...);

假設我們有一個架構如下的表格:

Store_Information 表格
欄位名稱 資料種類
Store_Name char(50)
Sales float
Txn_Date datetime

而我們要加以下的這一筆資料進去這個表格:在 January 10, 1999,Los Angeles 店有 $900 的營業額。我們就打入以下的 SQL 語句:
INSERT INTO Store_Information (Store_Name, Sales, Txn_Date)
VALUES ('Los Angeles', 900, 'Jan-10-1999');

第二種 INSERT INTO 能夠讓我們一次輸入多筆的資料。跟上面剛的例子不同的是,現在我們要用 SELECT 指令來指明要輸入表格的資料。如果您想說,這是不是說資料是從另一個表格來的,那您就想對了。

一次輸入多筆的資料的語法是:
INSERT INTO "表格1" ("欄位1", "欄位2", ...)
SELECT "欄位3", "欄位4", ...
FROM "表格2";

以上的語法是最基本的。這整句 SQL 也可以含有 WHERE、 GROUP BY、及 HAVING 等子句,以及表格連接及別名等等。

舉例來說,若我們想要將 1998 年的營業額資料放入 Sales_Information 表格,而我們知道資料的來源是可以由 Sales_Information 表格取得的話,那我們就可以鍵入以下的 SQL:
INSERT INTO Store_Information (Store_Name, Sales, Txn_Date)
SELECT Store_Name, Sales, Txn_Date
FROM Sales_Information
WHERE Year(Txn_Date) = 1998;

在這裡,我用了 SQL Server 中的函數來由日期中找出年。不同的資料庫會有不同的語法。舉個例來說,在 Oracle 上,您將會使用 WHERE TO_CHAR (Txn_Date,'yyyy') = 1998。\


原文出處:SQL INSERT INTO - 1Keydata SQL 語法教學
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]SELECT INTO 和 INSERT INTO SELECT 二種語法
[SQL語法] SELECT INTO 和 INSERT INTO SELECT 二種語法

1.INSERT INTO SELECT語法

語法為:
  Insert into Table2(field1,field2,...) select value1,value2,... from Table1

要求目標表Table2必須存在,由於目標表Table2已經存在,所以我們除了插入源表Table1的字段外,才可以插入常量。

2.SELECT INTO FROM語法

語法為:
  SELECT vale1, value2 into Table2 from Table1

要求目標表Table2不存在,因為在插入時會自動創建表Table2,並將Table1中指定字段數據復制到Table2中。


原文出處:[SQL語法] SELECT INTO 和 INSERT INTO SELECT 二種語法 @ I-Cloud程式攻略 :: 痞客邦 PIXNET ::
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]使用 INSERT 與 SELECT 加入資料列

使用 INSERT 與 SELECT 加入資料列

SQL Server 2008 R2

您可以透過下列方式使用 INSERT 與 SELECT 陳述式將資料列加入資料表:

  • 使用 INSERT 陳述式直接指定值或從子查詢指定值。

  • 使用含有 INTO 子句的 SELECT 陳述式。

使用 INSERT


INSERT 陳述式可新增一或多個資料列到資料表中。簡化後的 INSERT 具有下列格式:

INSERT [INTO] table_or_view [(column_list)] data_values

INSERT 陳述式會將 data_values 視為一或多個資料列,插入至指定資料表或檢視中。 column_list 是以逗號分隔的資料行名稱清單,可用來指定提供資料的資料行。若未指定 column_list,便由資料表或檢視的所有資料行來接收資料。

column_list 並未指定資料表或檢視中的所有資料行時,則會將預設值 (若資料行有定義預設值) 或 NULL 插入未在清單中指定的資料行中。資料行清單中未指定的所有資料行都必須允許 Null 值或是指派預設值。

因為 SQL Server Database Engine 會為下列類型的資料行產生值,所以 INSERT 陳述式不會為這些資料行指定值:

  • 具有產生資料行值之 IDENTITY 屬性的資料行。

  • 使用 NEWID 函數來產生唯一 GUID 值而具有預設的資料行。

  • 計算資料行。

    計算資料行是虛擬資料行,在定義上是由 CREATE TABLE 陳述式中的一或多個其他資料行所計算出來的運算式,例如:




    CREATE TABLE TestTable
    (ColA INT PRIMARY KEY,
    ColB INT NOT NULL,
    ColC AS (ColA + ColB) * 2);

下列範例顯示如何將資料列插入含有會自動產生值或具有預設值的資料行之資料表中。 INSERT 陳述式會插入包含部份 (而非全部) 資料行值的資料列。在最後一個 INSERT 陳述式中,並未指定任何資料行,只插入預設值。



USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
column_1 AS 'Computed column ' + column_2,
column_2 varchar(30)
CONSTRAINT default_name DEFAULT ('my column default'),
column_3 rowversion,
column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4)
VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4)
VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2)
VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES;
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO

使用含有 VALUE 子句與 SELECT 子查詢的 INSERT

提供的資料值必須與資料行清單相符。資料值的數目必須與資料行的數目相同,且每個資料值必須符合對應資料行的資料類型、精確度 (Precision) 與小數位數 (Scale)。您可以利用下列方式指定資料值:

  • 使用 VALUES 子句來指定一個資料列的資料值。例如:



    INSERT INTO MyTable (PriKey, Description)
    VALUES (123, 'A description of part 123.');

    如需詳細資訊,請參閱< 使用 INSERT 和 Values 插入資料列>。

  • 使用 SELECT 子查詢來指定一或多個資料列的資料值,例如:



    INSERT INTO MyTable (PriKey, Description)
    SELECT ForeignKey, Description
    FROM SomeView;

    如需詳細資訊,請參閱< 使用 INSERT 和 SELECT 子查詢插入資料列

搭配 INTO 使用 SELECT

若要利用其他資料表的值建立新資料表,您可以使用 SELECT INTO。例如:



SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM dbo.Customers
WHERE Phone LIKE '492%'

如需詳細資訊,請參閱< 使用 SELECT INTO 插入資料列>。


原文出處: 使用 INSERT 與 SELECT 加入資料列
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]MySQL 中 INSERT INTO SELECT 的使用
語法:MySQL中INSERT INTO SELECT的使用

1. 語法介紹
有三張表a、b、c,現在需要從表b和表c中分別查幾個字段的值插入到表a中對應的字段。對於這種情況,可以使用如下的語句來實現:
INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name

上面的語句比較適合兩個表的數據互插,如果多個表就不適應了。對於多個表,可以先將需要查詢的字段JOIN起來,然後組成一個視圖後再SELECT FROM就可以了:
INSERT INTO a (field1,field2) SELECT * FROM(SELECT b.f1,c.f2 FROM b JOIN c) AS tb

其中f1是表b的字段,f2是表c的字段,通過JOIN查詢就將分別來自表b和表c的字段進行了組合,然後再通過SELECT嵌套查詢插入到表a中,這樣就滿足了這個場景了,如果需要不止2個表,那麼可以多個JOIN的形式來組合字段。

2. 語法錯誤注意
需要注意的是嵌套查詢部分最後一定要有設置表別名,如下:
SELECT * FROM (SELECT f1,f2 FROM b JOIN c) AS tb

即最後的AS tb是必須的(tb這個名稱可以隨意取),即指定一個別名。每個派生出來的新表都必須指定別名,否則在mysql中會報如下錯誤:
ERROR 1248 (42000): Every derived TABLE must have its own alias

另外,MySQL中INSERT INTO SELECT不能加VALUES,即不能寫成如下形式:
INSERT INTO db1_name(field1,field2) VALUES SELECT field1,field2 FROM db2_name

否則也會報錯:
You have an error in your SQL syntax


原文出處:语法:MySQL中INSERT INTO SELECT的使用 - Glawind - 博客园
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|