مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

codec

عضویت از 1393/08/28

فراحوانی داده ها از چند جدول

  • یکشنبه 19 مهر 1394
  • 20:56
تشکر میکنم

سلام.
مطابق شکل زیر, فرض کنیم دیتابیس از یک جدول اصلی , یک جدول نویسندگان و چندین جدول که هر کدام مربوط به کتابهای چاپی هر ناشر میباشد, تشکیل شده است. از افزونگی در جدول نویسندگان چشم پوشی میکنیم. در جدول اصلی, آی دی جدول نویسندگان و آی دی جدول ناشر (که فیلد نام ناشر از جدول نویسندگان تعیین میکند که از کدام جدول ناشر آی دی گرفته شود) ذخیره می شود. حال میخواهیم جستجو را طوری طراحی کنیم که شامل موارد زیر باشد:
1. آی دی جدول الی
2. نام نویسنده
3. نام خانوادگی نویسنده
4. نام ناشر
5. نام کتاب
کوئری اس کیو ال مورد نظر رو چطور باید نوشت؟
آیا راه حل بهینه تری وجود دارد؟

پاسخ های این پرسش

تعداد پاسخ ها : 1 پاسخ
کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • دوشنبه 20 مهر 1394
  • 07:44

با سلام جدول مورد نظر شما می بایست به شکل زیر باشد ، براتون همین تصویر رو ضمیمه می کنم و کد اسکریپت رو هم براتون در پایین تصویر قرار می دهم :

USE [dbBookTest]
GO
/****** Object:  Table [dbo].[Authors]    Script Date: 10/12/2015 07:34:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Authors](
	[AuthorID] [int] IDENTITY(1,1) NOT NULL,
	[AuthorFirstName] [nvarchar](500) NULL,
	[AuthorLastName] [nvarchar](500) NULL,
 CONSTRAINT [PK_Authors] PRIMARY KEY CLUSTERED 
(
	[AuthorID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Publishers]    Script Date: 10/12/2015 07:34:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Publishers](
	[PublisherID] [int] IDENTITY(1,1) NOT NULL,
	[PublisherName] [nvarchar](500) NOT NULL,
 CONSTRAINT [PK_Publishers] PRIMARY KEY CLUSTERED 
(
	[PublisherID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Bookes]    Script Date: 10/12/2015 07:34:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Bookes](
	[BookID] [int] IDENTITY(1,1) NOT NULL,
	[AuthorID] [int] NOT NULL,
	[PublisherID] [int] NOT NULL,
	[BookName] [nvarchar](500) NOT NULL,
 CONSTRAINT [PK_Bookes] PRIMARY KEY CLUSTERED 
(
	[BookID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  ForeignKey [FK_Bookes_Authors]    Script Date: 10/12/2015 07:34:21 ******/
ALTER TABLE [dbo].[Bookes]  WITH CHECK ADD  CONSTRAINT [FK_Bookes_Authors] FOREIGN KEY([AuthorID])
REFERENCES [dbo].[Authors] ([AuthorID])
GO
ALTER TABLE [dbo].[Bookes] CHECK CONSTRAINT [FK_Bookes_Authors]
GO
/****** Object:  ForeignKey [FK_Bookes_Publishers]    Script Date: 10/12/2015 07:34:21 ******/
ALTER TABLE [dbo].[Bookes]  WITH CHECK ADD  CONSTRAINT [FK_Bookes_Publishers] FOREIGN KEY([PublisherID])
REFERENCES [dbo].[Publishers] ([PublisherID])
GO
ALTER TABLE [dbo].[Bookes] CHECK CONSTRAINT [FK_Bookes_Publishers]
GO

کوئری مورد نظر شما هم جهت گرفتن اطلاعات فوق به صورت زیر می باشد :

Select a.AuthorFirstName, a.AuthorLastName, p.PublisherName, b.BookName From Bookes as b
Full Join Authors as a On b.AuthorID = a.AuthorID
Full Join Publishers as p On b.PublisherID = p.PublisherID
Order by a.AuthorFirstName

 

فایل های ضمیمه

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)