目的:繼上一篇:SQL開發中容易忽視的一些小地方(一) 總結SQL中的null用法後,本文我將說說表聯接查詢.
為了說明問題,我創建了兩個表,分別是學生信息表(student),班級表(classInfo).相關字段說明本人以SQL創建腳本說明:
測試環境:SQL2005
CREATE TABLE [dbo].[student](
[ID] [int] IDENTITY(1,1) NOT NULL,
[sUserName] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,--姓名
[sAddress] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,--地址
[classID] [int] NULL,--班級
[create_date] [datetime] NULL CONSTRAINT [DF_student_create_date] DEFAULT (getdate())--入班時間
) ON [PRIMARY]
學生表記錄:插入數據999999行.可以說的上是一個不大不小的表.
CREATE TABLE [dbo].[classInfo](
[classID] [int] IDENTITY(1,1) NOT NULL,--所屬班級ID
[sClassName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--班級名稱
[sInformation] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--班級相關信息
[sDescription] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--班級描述
[iSchooling] [int] NULL,--學費
CONSTRAINT [PK_classInfo] PRIMARY KEY CLUSTERED
(
[classID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
班級表:共插入100行,實際可能不存在這麼多的班級.
示例需求:查詢學生的基本信息以及所屬班級名稱,我們都會第一時間想到用表關聯,這裡我列出相關實現方法.
第一:將數據量較大的學生表放在前面.
--大表在前
select top 1000 a.sUserName,b.sClassName from student a
inner join classInfo b on
a.classID=b.classID
第二:將數據量較小的班級表放在前面.
--小表在前
select top 1000 a.sUserName,b.sClassName from classInfo b
inner join student a on
a.classID=b.classID
第三:用where 實現.
--join與where
select top 1000 a.sUserName,b.sClassName from classInfo b, student a
where a.classID=b.classID