外鍵是用來實(shí)現(xiàn)“引用完整性”的,說白了就是一種約束,不能用來傳值。
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)雞澤免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
可以選擇觸發(fā)器或存儲過程。
如果兩個(gè)表字段相同可以用觸發(fā)器:
CREATE TRIGGER trigger_AToB on A
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO A(a,b,c) SELECT a,b,c FROM inserted
INSERT INTO B(a,b,c) SELECT a,b,c FROM inserted
END
GO
INSERT INTO a(a,b,c)VALUES('aaa','aaa','aaa')
在查詢分析器里執(zhí)行上面的語句后,向A表添加數(shù)據(jù)會(huì)同時(shí)向B表添加。觸發(fā)器比較方便,缺點(diǎn)是,一旦B表被刪除了,向A表添加數(shù)據(jù)會(huì)報(bào)錯(cuò)。
存儲過程就比較自由了:
CREATE PROC proc_InsertAToB
@a VARCHAR(10),
@b VARCHAR(20),
@c VARCHAR(30)
as
INSERT INTO A(a,b,c)VALUES(@a,@b,@c)
INSERT INTO B(a,b,c)VALUES(@a,@b,@c)
表B的字段和表A不一樣也沒關(guān)系,需要的話,可以再根據(jù)需要向存儲過程添加參數(shù)。
使用的時(shí)候不再用INSERT INTO了,用:
EXECUTE proc_InsertAToB 'aaa','aaa','aaa'就可以。
where ...and和join....on的區(qū)別
1、where 是在兩個(gè)表join完成后,再附上where條件
2、而 and 則是在表連接前過濾A表或B表里面哪些記錄符合連接條件,同時(shí)會(huì)兼顧是left join還是right join。即
假如是左連接的話,如果左邊表的某條記錄不符合連接條件,那么它不進(jìn)行連接,但是仍然留在結(jié)果集中(此時(shí)右邊部分的連接結(jié)果為NULL)。on條件是在生成臨時(shí)表時(shí)使用的條件,它不管on中的條件是否為真,都會(huì)返回左邊表中的記錄。
3、建議盡量用where來過濾條件
比較:
1、用AND后的SQL和結(jié)果集。還是有383這條結(jié)果集
2、用where后的SQL和結(jié)果集。沒有了這條記錄
擴(kuò)展資料
1、eft join :左連接,返回左表中所有的記錄以及右表中連接字段相等的記錄。
2、right join :右連接,返回右表中所有的記錄以及左表中連接字段相等的記錄。
3、inner join: 內(nèi)連接,又叫等值連接,只返回兩個(gè)表中連接字段相等的行。
4、full join:外連接,返回兩個(gè)表中的行:left join + right join。
5、cross join:結(jié)果是笛卡爾積,就是第一個(gè)表的行數(shù)乘以第二個(gè)表的行數(shù)。
關(guān)鍵字:?on
數(shù)據(jù)庫在通過連接兩張或多張表來返回記錄時(shí),都會(huì)生成一張中間的臨時(shí)表,然后再將這張臨時(shí)表返回給用戶。
在使用left?jion時(shí),on和where條件的區(qū)別如下:
1、?on條件是在生成臨時(shí)表時(shí)使用的條件,它不管on中的條件是否為真,都會(huì)返回左邊表中的記錄。
2、where條件是在臨時(shí)表生成好后,再對臨時(shí)表進(jìn)行過濾的條件。這時(shí)已經(jīng)沒有l(wèi)eft?join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。
在我們使用SQL Server數(shù)據(jù)庫的過程中,有時(shí)需要將SQL Server數(shù)據(jù)導(dǎo)出,導(dǎo)入到其他的數(shù)據(jù)庫中,比如導(dǎo)入到Oracle中。
假設(shè)要將SQL Server中的Northwind數(shù)據(jù)庫中的Products表導(dǎo)出到Oracle的Scott用戶
首先需要有安裝SQL Server企業(yè)版
1.打開工具:
開始-程序-
導(dǎo)入和SQL Server數(shù)據(jù)導(dǎo)出數(shù)據(jù)
2.下一步,選擇數(shù)據(jù)源
[數(shù)據(jù)源]選擇“用于SQL Server的Microsoft OLE DB提供程序”,這應(yīng)該是缺省值。
[服務(wù)器]選擇要導(dǎo)出數(shù)據(jù)的服務(wù)器,如果是本機(jī),選擇(local)
[數(shù)據(jù)庫]選擇要導(dǎo)出的數(shù)據(jù)所在的庫,這里選擇Northwind
3.下一步,選擇目的
[目的]選擇Microsoft ODBC for Oracle
[DSN]選擇用戶/系統(tǒng)DSN一項(xiàng),然后在下拉列表框中找一個(gè)已經(jīng)連接到了Scott用戶的DSN名稱。
如果下拉列表中沒有,點(diǎn)下拉列表框右側(cè)的[新建],出現(xiàn)創(chuàng)建新數(shù)據(jù)源界面。
接下來選擇系統(tǒng)數(shù)據(jù)源,下一步,在驅(qū)動(dòng)程序列表中選擇Microsoft ODBC for Oracle
下一步,完成,出現(xiàn)Microsoft ODBC for Oracle安裝界面
[數(shù)據(jù)源名稱]隨便輸入,比如sss
[說明]可以不填
[用戶名稱]填入要SQL Server數(shù)據(jù)導(dǎo)出到的Oracle用戶名稱,這里是scott
[服務(wù)器]填入要連接到Oracle服務(wù)器所使用的服務(wù)名,比方說使用sqlplus scott/tiger@server1可以連接到數(shù)據(jù)庫,那么這里就填入server1。如果本機(jī)就是服務(wù)器,使用sqlplus scott/tiger即可連接到數(shù)據(jù)庫,這里空著不填即可。
這樣就創(chuàng)建好了一個(gè)數(shù)據(jù)源sss,保證下拉列表框中選擇了sss一項(xiàng)。
[用戶名]填入SQL Server數(shù)據(jù)導(dǎo)出到的Oracle用戶名稱,這里是scott
[密碼]填入SQL Server數(shù)據(jù)導(dǎo)出到的Oracle用戶使用的密碼,這里是tiger
4.下一步,指定表復(fù)制或查詢
如果要導(dǎo)出的內(nèi)容是整個(gè)表,選擇[從源數(shù)據(jù)庫復(fù)制表和視圖]
如果要導(dǎo)出的內(nèi)容是表的一部分列,行,可以選擇[用一條查詢指定要傳輸?shù)臄?shù)據(jù)],這時(shí)需要寫出一個(gè)查詢語句
這里選擇第一項(xiàng)[從源數(shù)據(jù)庫復(fù)制表和視圖]
5.下一步,選擇源表和視圖
點(diǎn)中要導(dǎo)出的表Products一行的復(fù)選框,目的、轉(zhuǎn)換兩欄就會(huì)出現(xiàn)內(nèi)容。
目的可以用來選擇表名。轉(zhuǎn)換可以用來修改列的數(shù)據(jù)類型或是整個(gè)建表的SQL語句
6.下一步,保存、調(diào)度和復(fù)制包
選中立即運(yùn)行
7.下一步,正在完成DTS導(dǎo)入/導(dǎo)出向?qū)?/p>
8.完成
提示“成功地將n個(gè)表從Microsoft SQLServer復(fù)制到了Oracle”
9.完成,關(guān)閉導(dǎo)入導(dǎo)出程序
注意:因?yàn)閛racle的表名都是大寫的,而SQL的表可能是大小混寫的,所以導(dǎo)入后在oracle里查不到該表,比如這個(gè)Products表在oracle里查詢就應(yīng)該寫成select * from scott."Products";為了方便查詢可以通過批量修改表名為大寫以便后面導(dǎo)數(shù)據(jù)的工作。
---導(dǎo)完數(shù)據(jù)后執(zhí)行下面語句,生成把表名修改成大寫的操作
select 'ALTER TABLE '||'"'||table_name||'"'||' RENAME TO '|| upper(table_name)||';' from user_tab_comments;
把生成的文件執(zhí)行即可把此用戶下的所有表名修改成大寫。
select * from A inner join B
on A.aa = B.aa
inner join c on A.aa = C.aa
where A.cc = '1'
union
select * from A inner join B
on A.aa = B.aa
inner join d on A.aa = d.aa
where A.cc = '2'
union
select * from A inner join B
on A.aa = B.aa
inner join e on A.aa = e.aa
where A.cc = '3'
關(guān)聯(lián)兩個(gè)表的方式包含內(nèi)連接,外連接(左外連接,右外連接),交叉連接。
參考語句:
內(nèi)連接
select * from student a
inner join stuMarks b
on a.stuid=b.stuid
外連接
select * from student a
inner join stuMarks b
on a.stuid=b.stuid
交叉連接
select * from student a
crossjoin stuMarks b
首先你這種連接方式要導(dǎo)入一個(gè)jar包,里面是寫好數(shù)據(jù)庫連接配置的
然后代碼改成這樣
class.forname("com.microsoft.sqlserver.jdbc.sqlserverdriver");
("jdbc:sqlserver://localhost:1433;databasename=sutinfo","sa","200100421");