1. sql多表查詢語句怎麼寫
SQL多表查詢語句的步驟如下:
我們需要准備的材料分別是:電腦、sql查詢器。
1、首先,打開sql查詢器,連接上相應的資料庫表,例如m1表和m2表。
2. sql 語句操作三個表
很簡單的,三個表關聯下再sum、group下就可以了。
表及其表中欄位命名如下:
銷售單
表(XSJL)
商品編碼
(SPCODE)
金額(XSJE)
時間(XSSJ)
倉位號(CWH)
商品表(SP)
商品編碼(SPCODE)
廠商編碼(CSCODE)
廠商表(CSB)
廠商編碼(CSCODE)
廠商名稱
(CSNAME)
查詢語句:
select
C.CSCODE,C.CSNAME,SUM(A.XSJE)
from
XSJL
A
,SP
B
,CSB
C
WHERE
A.SPCODE=B.SPCODE
AND
B.CSCODE=C.CSCODE
GROUP
BY
C.CSCODE,C.CSNAME
3. oracle 資料庫sql 查詢語句。通過一個sql語句對多個表分別進行查詢。
用union,舉例有S1表(a,b,c,d)和S2表(a,c,d,e)和S3表(f,g),里頭的欄位不同,但在邏輯上有關系
(如有
s1.b=s2.e
s1.a=s3.f
s1.b=s3.g)
示例如下:
------------------------------------------------------------------------------
select
S1.a
as
x,S1.b
as
y,S1.c
as
z
from
S1
union
select
S2.a
as
x,S2.e
as
y,S2.c
as
z
from
S2
union
select
S3.f
as
x,S3.g
as
y,''
as
z
from
S3
------------------------------------------------------------------------------
最終結果會是三張表的和,如果S1有10條記錄,S2有3條記錄,S3有4條記錄,則執行本SQL後會得到17條記錄,其中來自S3表的數據,第三列一定為空的。
4. oracle 資料庫sql 查詢語句。通過一個sql語句對多個表分別進行查詢。
用union,舉例有S1表(a,b,c,d)和S2表(a,c,d,e)和S3表(f,g),里頭的欄位不同,但在邏輯上有關系
(如有
s1.b=s2.e
s1.a=s3.f
s1.b=s3.g)
示例如下:
------------------------------------------------------------------------------
select S1.a as x,S1.b as y,S1.c as z from S1
union
select S2.a as x,S2.e as y,S2.c as z from S2
union
select S3.f as x,S3.g as y,'' as z from S3
------------------------------------------------------------------------------
最終結果會是三張表的和,如果S1有10條記錄,S2有3條記錄,S3有4條記錄,則執行本SQL後會得到17條記錄,其中來自S3表的數據,第三列一定為空的。
5. 一句sql語句,同時修改多個表的數據
1.可以多寫幾個update語句
2.在一張表上,建個觸發器,修改一張表的同時,利用觸發器關聯的修改其他的表。
三個表的關聯修改,用觸發器完全可以實現了。修改一個表的同時,觸發其他兩個表的修改。
6. 使用SQL的更新語句時,一次可以對幾個表進行更新
1、一句SQL是無法對多表進行更新的,只能一句SQL只更新一張表的數據
2、可以使用多個SQL語句對多個表進行數據更新
3、建議在更新前使用事務,更新後,提交事務。
7. 在一條SQL語句中同時對兩個資料庫中的不同表進行操作,有什麼好的解決方法嗎
解決辦法:事務和存儲過程。
具體操作:
create PROCEDURE [存儲過程名]
(
@Title nvarchar(50),
@Content nvarchar(1000),
@Publisher nvarchar(200),
@UserID varchar(10)
)
AS
BEGIN
declare @posid int
SET NOCOUNT ON
begin transaction [事務名稱]
insert into Bulletin(....) --向Bulletin表添加記錄
if @@error $amp;<amp;$gt; 0="""" begin rollback transaction [事務名稱]
select N '添加失敗! ' as msg
return(0)
end
set @posid = @@identity --得到BulletinId的值
insert into ButtetinAuth(....) --向ButtetinAuth表添加記錄
if @@error $amp;<amp;$gt; 0="""" begin rollback transaction [事務名稱]
select N '添加失敗! ' as msg
return(0)
end
commit transaction [事務名稱]
select N '添加成功! ' as msg
END
"insert 表1;insert 表2 "這種方式是可以,但不能保證同步(如插入第一個表後就停電了,第二個表還沒來得及插入,所以就不同步了),要數據同步就要用資料庫事務。
private SqlConnection myConn = new SqlConnection(); //連接
private SqlTransaction Transaction = null; //事務
private SqlCommand Cmd = new SqlCommand();
假設myConn已經配置好
事務開始:
try
{
myConn.Open();
Transaction = myConn.BeginTransaction(); //事務開始
Cmd.Transaction = Transaction; //將Cmd指向Transaction事務
string strSQL= "insert 表1 ";
Cmd.CommandText = strSQL; //插入第一個表
Cmd.ExecuteNonQuery();
strSQL= "insert 表2 ";
Cmd.CommandText = strSQL; //插入第一個表
Cmd.ExecuteNonQuery();
Transaction.Commit(); //提交事務
}
catch (Exception e)
{
Transaction.Rollback(); //撇消事務
throw new Exception(e.Message);