資料庫操作筆記

2021-06-01 13:17:09 字數 4309 閱讀 2862

insert是t-sql中常用語句,insert into table(field1,field2,...) values(value1,value2,...)這種形式的在應用程式開發中必不可少。但我們在開發、測試過程中,經常會遇到需要表複製的情況,如將乙個table1的資料的部分字段複製到table2中,或者將整個table1複製到table2中,這時候我們就要使用

select into 和 insert into select 表複製語句了。

1.insert into select語句

語句形式為:insert into table2(field1,field2,...) select value1,value2,... from table1

要求目標表table2必須存在,由於目標表table2已經存在,所以我們除了插入源表table1的字段外,還可以插入常量。示例如下:

--1.建立測試表

create table table1

(a varchar(10),

b varchar(10),

c varchar(10),

constraint [pk_table1] primary key clustered

(a asc

)) on [primary]

create table table2

(a varchar(10),

c varchar(10),

d int,

constraint [pk_table2] primary key clustered

(a asc

)) on [primary]

go--2.建立測試資料

insert into table1 values('趙','asds','90')

insert into table1 values('錢','asds','100')

insert into table1 values('孫','asds','80')

insert into table1 values('李','asds',null)

goselect * from table2

--3.insert into select語句複製表資料

insert into table2(a, c, d) select a,c,5 from table1

go--4.顯示更新後的結果

select * from table2

go--5.刪除測試表

drop table table1

drop table table2

2.select into from語句

語句形式為:select vale1, value2 into table2 from table1

要求目標表table2不存在,因為在插入時會自動建立表table2,並將table1中指定字段資料複製到table2中。示例如下:

--1.建立測試表

create table table1

(a varchar(10),

b varchar(10),

c varchar(10),

constraint [pk_table1] primary key clustered

(a asc

)) on [primary]

go--2.建立測試資料

insert into table1 values('趙','asds','90')

insert into table1 values('錢','asds','100')

insert into table1 values('孫','asds','80')

insert into table1 values('李','asds',null)

go--3.select into from語句建立表table2並複製資料

select a,c into table2 from table1

go--4.顯示更新後的結果

select * from table2

go--5.刪除測試表

drop table table1

drop table table2

最常用的update語法是:

update

set = , set =

如果我的更新值value是從一條select語句拿出來,而且有很多列的話,用這種語法就很麻煩

第一,要select出來放在臨時變數上,有很多個哦

第二,再將變數進行賦值。

列多起來非常麻煩,能不能像insert那樣,把整個select語句的結果進行插入呢?就好象下面

insert into table1

(c1, c2, c3)

(select v1, v2, v3 from table2)

答案是可以的,具體的語法如下:

update

set(,)=(

select(,)

from

where =)

where ;

下面是這樣乙個例子:

兩個表a、b,想使b中的memo字段值等於a表中對應id的name值

表a:id, name

1 王

2 李

3 張

表b:id,clientname   

1 2

3 (ms sql server)語句:update b   set   clientname    = a.name    from a,b    where a.id = b.id  

(oralce)語句:update b   set   (clientname)    =   (select name from a where b.id = a.id)

update set from 語句格式

當where和set都需要關聯乙個表進行查詢時,整個update執行時,就需要對被關聯的表進行兩次掃瞄,顯然效率比較低。

對於這種情況,sybase和sql server的解決辦法是使用update...set...from...where...的語法,實際上就是從源表獲取更新資料。

在 sql 中,表連線(left join、right join、inner join 等)常常用於 select 語句,其實在 sql 語法中,這些連線也是可以用於 update 和 delete 語句的,在這些語句中使用 join 還常常得到事半功倍的效果。

update t_orderform sett_orderform.sellerid =b.l_tuserid

from t_orderform a left join t_productinfo   b on b.l_id=a.productid

用來同步兩個表的資料!

oralce和db2都支援的語法:

update

a set

(a1, a2, a3) =(

select

b1, b2, b3

from

b where

a.id

=b.id)

ms sql server不支援這樣的語法,相對應的寫法為:

update

a  seta1=

b1, a2

=b2, a3

=b3  

from

aleft

join

b on

a.id

=b.id

個人感覺ms sql server的update語法功能更為強大。ms sql server的寫法:

update

a seta1=

b1, a2

=b2, a3 = b3

from

a, b

where

a.id

=b.id

在oracle和db2中的寫法就比較麻煩了,如下:

update

aset

(a1, a2, a3)=(

select

b1, b2, b3

from

b where

a.id

=b.id)

where

id in

(select

b.id

from

b where

a.id

=b.id)

MFC資料庫操作筆記

1.建立乙個表的對映 建立乙個類,如cuserset讓它繼承於crecordset,建立完後vc讓選擇odbc中的庫,然後指定表我們選擇user表,這樣這個類基本上就和表user進行了對映.一定要在userset.h加入 include 不然會出一堆沒定義的錯誤。2.新增一條記錄 cuserset ...

資料庫的操作筆記

mysql的常見操作在這裡先做一下總結,已經整合到 裡面,經過檢驗無誤。建立乙個資料庫 create database xuning test 說明當時使用資料庫物件 use xuning test 向資料庫中新增表並且定義表的結構 create table person id int not nu...

mysql資料庫操作筆記

查詢最後生成的id select session.identity 建立檢視 create view v add friends as select u.userid,u.real name,u.d.college,d.academe,d.speciality,d.init college date...