--就做个简单的例子吧(从简):
--建立数据环境:
USE PUBS
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Artist')
DROP TABLE Artist
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Ablem')
DROP TABLE Ablem
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Song')
DROP TABLE Song
GO
CREATE TABLE Artist(
RowId INT IDENTITY(1,1) NOT NULL,
ArtistId INT PRIMARY KEY NOT NULL,
ArtistName CHAR(20) NOT NULL,
Sex CHAR(4),
Born CHAR(100)
)
GO
CREATE TABLE Ablem(
RowId INT IDENTITY(1,1) NOT NULL,
AblemId INT PRIMARY KEY NOT NULL,
ArtistId INT NOT NULL,
AblemName CHAR(50),
AblemEName CHAR(50),
AblemTime DATETIME
)
GO
CREATE TABLE Song(
RowId INT IDENTITY(1,1) NOT NULL,
SongId INT PRIMARY KEY NOT NULL,
SongName CHAR(50),
SongEname CHAR(50),
ArtistId INT NOT NULL,
AblemId INT NOT NULL,
SongTime DATETIME
)
--创建外键约束
ALTER TABLE Ablem ADD CONSTRAINT [FK_Ablem_Artist] FOREIGN KEY
(
[ArtistId]
)REFERENCES Artist
(
[ArtistId]
)
GO
ALTER TABLE Song ADD CONSTRAINT [FK_Song_Artist] FOREIGN KEY
(
[ArtistId]
)REFERENCES Artist
(
[ArtistId]
)
GO
ALTER TABLE Song ADD CONSTRAINT [FK_Song_Ablem] FOREIGN KEY
(
[AblemId]
)REFERENCES Ablem
(
[AblemId]
)
GO
--插入测试数据:
INSERT Artist SELECT 0001,'张学友','男','香港'
UNION ALL SELECT 0002,'周杰伦','男','台湾'
UNION ALL SELECT 0003,'王菲','女','香港'
UNION ALL SELECT 0004,'韩红','女','大陆'
GO
INSERT Ablem SELECT 0001,0001,'他在那里','WHERE IS HE','20021130'
UNION ALL SELECT 0002,0002,'叶惠美','不祥','20031001'
UNION ALL SELECT 0003,0003,'将爱','不祥','20031101'
UNION ALL SELECT 0004,0004,'天亮了','不祥','20020505'
GO
INSERT Song SELECT 0001,'咖啡','COFFER',0001,0001,'20021130'
UNION ALL SELECT 0002,'叶惠美','',0002,0002,'20031001'
UNION ALL SELECT 0003,'将爱','',0003,0003,'20031101'
UNION ALL SELECT 0004,'天亮了','',0004,0004,'20020505'
GO
--简要查询举例1:
SELECT ArtistName 歌手,Sex 性别,Born 出身,'《'+LEFT(AblemName,5)+'》' 专辑名称,AblemEName 专辑英文名称
FROM Artist A,Ablem B,Song C
WHERE A.ArtistId=B.ArtistId AND A.ArtistId=B.ArtistId AND B.AblemId=C.AblemId
--结果集:
歌手 性别 出身 专辑名称 专辑英文名称
---------- ---- --------- --------- -----------
张学友 男 香港 《他在那里》 WHERE IS HE
周杰伦 男 台湾 《叶惠美》 不祥
王菲 女 香港 《将爱》 不祥
韩红 女 大陆 《天亮了》 不祥
(所影响的行数为 4 行)
--简要查询举例2:
SELECT ArtistName 歌手,'《'+LEFT(AblemName,5)+'》' 专辑名称
FROM Artist A,Ablem B,Song C
WHERE A.ArtistId=B.ArtistId AND A.ArtistId=B.ArtistId AND B.AblemId=C.AblemId
AND SongName LIKE '%将爱%'
--结果集:
歌手 专辑名称
-------------------- --------------
王菲 《将爱 》
/*专辑数据*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'Ablem_Table' AND Type = 'U')
DROP TABLE Ablem_Table
GO
CREATE TABLE Ablem_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*专辑编号*/
CONSTRAINT PK_Ablem PRIMARY KEY CLUSTERED(No),
Name VARCHAR(30) NOT NULL DEFAULT '', /*专辑名称*/
Kind INTEGER NOT NULL CHECK(Kind IN(1,2,3,4)) DEFAULT 1,/*1.正式专辑、2.合辑、3.参与专辑、4.电影原声*/
... ...
)
GO
GRANT ALL ON Ablem_Table TO PUBLIC
GO
/*歌手数据*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'Artist_Table' AND Type = 'U')
DROP TABLE Artist_Table
GO
CREATE TABLE Artist_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*歌手编号*/
CONSTRAINT PK_Artist PRIMARY KEY CLUSTERED(No),
Name VARCHAR(30) NOT NULL DEFAULT '', /*姓名 */
Sex bit NOT NULL DEFAULT 0, /*性别(0.女 1.男)*/
... ...
)
GO
GRANT ALL ON Artist_Table TO PUBLIC
GO
/*歌曲数据*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'Song_Table' AND Type = 'U')
DROP TABLE Song_Table
GO
CREATE TABLE Song_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*歌曲编号*/
CONSTRAINT PK_Song PRIMARY KEY CLUSTERED(No,SeqNo),
Name VARCHAR(30) NOT NULL DEFAULT '', /*歌曲名称*/
Kind bit NOT NULL DEFAULT 0, /*0.单唱,1.合唱*/
... ...
)
GO
GRANT ALL ON Song_Table TO PUBLIC
GO
/*专辑明细*/
IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'AblemDtl_Table' AND Type = 'U')
DROP TABLE AblemDtl_Table
GO
CREATE TABLE AblemDtl_Table(
No VARCHAR(10) NOT NULL CHECK(No <> ''), /*专辑编号*/
SeqNo INTEGER NOT NULL CHECK(SeqNo >=0) DEFAULT 0,/*序号 */
CONSTRAINT PK_AblemDtl PRIMARY KEY CLUSTERED(No,SeqNo),
AtNo VARCHAR(10) NOT NULL CHECK(No <> ''), /*歌手编号*/
SgNo VARCHAR(10) NOT NULL CHECK(SgNo <> ''), /*歌曲编号*/
CONSTRAINT CNT_AblemDtl_01 UNIQUE(No,AtNo,SgNo),