MIDOONY Logo

Sql (بخش سوم - شرح کامل نحوه اصلاح و ترکیب جداول Joining Tables)

1400/05/08
Sql (بخش سوم - شرح کامل نحوه اصلاح و ترکیب جداول Joining Tables)

دستور #INSERT
با این دستور می توان سطرهای جدیدی به جدول اضافه نمود. شکل کلی دستور به این صورت است:


INSERT [INTO] Table_name | view name [column_list]
DEFAULT VALUES | values_list | select statement


•    Table|view name = نام جدول یا نمای مورد نظر برای درج اطلاعات
•    Column list = لیست ستون های مورد نظر برای درج داده ها
•    Values list = لیست مقادیر مورد نظر برای ستون ها جهت درج شدن
•    Select list = مشخص نمودن مقادیر ستون ها توسط دستور select
•    قیلد های با ویژگی IDENTITY نباید در لیست ستون ها یا لیست مقادیر ذکر شوند

این مثال یک سطر به جدول Authors اضافه می نماید:


INSERT INTO Authors
VALUES(‘555-093-467’, ‘Martin’, ‘April’, ‘281 555-5673’, ‘816 Market St.,’ , ‘Vancouver’, ‘BC’, ‘V7G3P4’, 0)

مثال بعدی نحوه استفاده از لیست ستون ها را برای اضافه کردن یک سطر به جدول Publishers نشان می دهد:


INSERT INTO Publishers (PubID, PubName, city, province)
VALUES (‘9900’, ‘Acme Publishing’, ‘Vancouver’, ‘BC’)

هنگام اضافه کردن سطری که حاوی ستون IDENTITY می باشد از ذکر نام آن ستون خودداری می شود. مانند:


INSERT INTO jobs
VALUES (‘DBA’, 100, 175)

ولی اگر بخواهیم برای چنین ستون هایی مقدار تعیین کنیم از گزینه IDENTITY_INSERT استفاده می شود. مانند:


SET IDENTITY_INSERT jobs ON
INSERT INTO jobs (job_id, job_desc, min_lvl, max_lvl)
VALUES (19, ’DBA2’, 100, 175)
SET IDENTITY_INSERT jobs OFF

در اینجا برای ستون job_id مقدار 19 لحاظ شده است.

اضافه نمودن سطرها با دستور #SELECT
گاهی اوقات می توانیم با استفده از دستور select یک جدول کوچک موقت از یک جدول بزرگ ایجاد نماییم. در مثال زیر ابتدا یک جدول موقت  انتشارات ایجاد نموده سپس با دستور select رکوردها را از جدول انتشارات اصلی به آن اضافه می نماییم:


CREATE TABLE dbo.tmpPublishers (
PubID char (4) NOT NULL ,
PubName varchar (40) NULL ,
city varchar (20) NULL ,
province char (2) NULL ,
country varchar (30) NULL DEFAULT (‘Canada’))

INSERT tmpPublishers
SELECT * FROM Publishers

در مثال بعدی زیرمجموعه ای از اطلاعات کپی می شود:


INSERT tmpPublishers (pub_id, pub_name)
SELECT PubID, PubName
FROM Publishers 

در مثال بعدی اطلاعات به جدول tmpPublishers کپی شده و مقدار ستون کشور برابر Canada قرار می گیرد:


INSERT tmpPublishers (PubID, PubName, city, province, country)
SELECT PubID, PubName, city, province, ‘Canada’
FROM Publishers 

 

دستور #UPDATE
این دستور برای تغییر مقادیر موجود ستون ها استفاده می شود. مثلا دستور زیر مقدار ستون کشور در تمام سطرهای جدول Publishers را برابر Canada قرار می دهد:


UPDATE Publishers 
SET country = ‘Canada’

در مثال بعدی مقدار ستون royalty به 10 درصد ان و برای مقادیر بین 10 و 20 اصلاح می گردد:


UPDATE roysched
SET royalty = royalty + (royalty * .10)
WHERE royalty BETWEEN 10 and 20

در مثال زیر مقدار سطح شغلی کارمندان استخدام شده در سال 2010 به بالاترین سطح شغل اصلاح می شود 


UPDATE Employees
SET job_lvl =
(SELECT max_lvl FROM jobs
WHERE employee.job_id = jobs.job_id)
WHERE DATEPART(year, employee.hire_date) = 2010

 

دستور #DELETE
این دستور برای حذف سطرها از جداول یا نماها استفاده می شود. می توان سطرهای حذف شده را با where محدود کرد. شکل کلی دستور به این صورت است:


DELETE [FROM] {table_name | view_name } 
[WHERE clause]

اگر عبارت WHERE استفاده نشود تمام سطرهای جدول حذف می گردند. در مثال زیر تمام سطرهای جدول Discounts حذف می شوند:


DELETE 
FROM Discounts

در مثال بعدی فقط سطرهای خاصی از جدول حذف می شوند:


DELETE 
FROM Sales 
WHERE stor_id = ‘6380’

در این مثال محدود کردن سطرها برای حذف توسط دستور select انجام می شود:


DELETE FROM Sales
WHERE title_id IN
(SELECT title_id FROM Books WHERE type = ‘mod_cook’)

 

تابع #CONVERT
این برای تبدیل یک نوع داده به نوع دیگر استفاده می گردد. مثلا در دستور زیر تاریخ به یک رشته 12 حرفی تبدیل می شود:


SELECT ‘The date is ‘ + CONVERT(varchar(12), getdate())

در مثال بعد مقدار عددی اعشاری به صحیح تبدیل می شود:


SELECT CONVERT(int, 10.6496)

در این مثال مقدار عددی فروش به نوع حرفی با طول چهار تبدیل می شود:


SELECT title_id, CONVERT(char(4), ytd_sales) as ‘Sales’
FROM Books
WHERE type LIKE ‘%cook’

 

تابع #Date
این تابع مقداری به یک تاریخ اضافه می نماید. نتیجه برگشتی از نوع datetime می باشد. شکل کلی این تابع به این صورت است:

DATEADD(datepart,number, date)

مثال زیر 3 روز به تاریخ استخدام اضافه می نماید:


SELECT DATEADD(day, 3, hire_date)
FROM Employees

برای بدست آوردن اختلاف دو تاریخ از تابع DATEDIFF استفاده می گردد. نتیجه برگشتی شامل اجزای تاریخ مانند دقیقه، ثانیه و میلی ثانیه است. به مثال زیر توجه نمایید:


SELECT DATEDIFF(day, HireDate, ‘Nov 30 1995′)
FROM Employees

اولین پارامتر این توابع، واحد محاسبه را نشان می دهد و شامل موارد زیر هست:

DATE PART    ABBREVIATION    VALUES
Year                 yy                              1753-9999
Quarter            qq                              1-4
Month             mm                            1-12
Day of year    dy                               1-366
Day                 dd                               1-31
Week              wk                               1-53
Weekday        dw                               1-7 (Sun.-Sat.)
Hour               hh                                0-23
Minute           mi                                0-59
Second           ss                                 0-59
Millisecond    ms                               0-999


Joining Tables
ترکیب دو یا بیشتر جدول عبارتست از فرایند مقایسه مقادیر ستون های خاصی از جداول و تشکیل یک جدول جدید با استفاده از نتیجه مقایسه. عملکرد این دستور به این صورت است:
•    مشخص کردن یک ستون از هر جدول
•    مقایسه سطر به سطر مقادیر این ستون ها
•    ترکیب سطرهای حائز شرایط در یک سطر جدید
انواع ترکیب جداول شامل inner، left outer، right outer و cross به شرح زیر می باشند.

#Inner_join
این دستور دو جدول را براساس ستونی با نوع مشابه بهم متصل می کند و فقط سطرهایی با مقادیر یکسان آن ستون را شامل می شود، سایر سطرها لحاظ نمی گردند.
مثال اول:


SELECT jobs.job_id, job_desc
FROM jobs
INNER JOIN Employees ON employee.job_id = jobs.job_id
WHERE jobs.job_id < 7

مثال دوم


SELECT authors.au_fname, authors.au_lname, books.royalty, title
FROM authorsINNER JOIN titleauthor ON authors.au_id=titleauthor.au_id
INNER JOIN books ON titleauthor.title_id=books.title_id
GROUP BY authors.au_lname, authors.au_fname, title, title.royalty
ORDER BY authors.au_lname


#Left_outer_join

تمام سطرها از جدول اول و سطرهایی از جدول دوم که در شرط صدق می کنند را شامل می شود. به ازای سطرهای غیر منطبق از جدول دوم سطر خالی لحاظ می شود. به مثال زیر توجه نمایید:


SELECT publishers.pub_name, books.title
FROM Publishers
LEFT OUTER JOIN Books On publishers.pub_id = books.pub_id

#Right_outer_join
تمام سطرها از جدول دوم و سطرهایی از جدول اول که در شرط صدق می کنند را شامل می شود. به ازای سطرهای غیر منطبق از جدول اول سطر خالی لحاظ می شود. به مثال زیر توجه نمایید:


SELECT titleauthor.title_id, authors.au_lname, authors.au_fname
FROM titleauthor
RIGHT OUTER JOIN authors ON titleauthor.au_id = authors.au_id
ORDERY BY au_lname
 

#Database

#SQL

0 1172
دیدگاه کاربران
0 دیدگاه
شما هم دیدگاه خود را ارسال کنید