خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
استفاده از تابع UNION ALL در SQL Server
در پست قبلی در مورد تابع UNION در SQL Server صحبت کردیم و تابع دیگری که عملکردی مشابه با UNION را دارد، UNION ALL می باشد. در ادامه با ذکر مثال هایی به طور کامل با UNION ALL هم آشنایی پیدا خواهید کرد و در برنامه ها در صورت نیاز می توانید از آن استفاده کنید.
SYNTAX استفاده از UNION ALL به صورت زیر می باشد:
حالا با مثال های ساده ای به بررسی UNION ALL می پردازیم. در ابتدا دو جدول با نام های tblA و tblB ایجاد خواهیم کرد و سپس رکوردهایی را در آن اضافه می کنیم.
حال به رکوردهایی که در این جدوال اضافه کرده ایم، با دستور Select نگاهی بدان ها خواهیم داشت.
تابع UNION ALL مقادیر تکراری را نیز از tblA و tblB برمی گرداند ، بر خلاف UNION که رکوردهای تکراری را حذف می کند.
همانطور که در Result set فوق مشاهده می کنید، رکورد تکراری شماره های 1 و 4 هستند و UNION ALL رکوردهای کپی را حذف نمی کند ، به همین دلیل ما برای نام و کد ردیف های تکراری داریم.
همانطور که در select اول مشاهده می کنید، ستون اول sno است که از نوع int می باشد و در Select دوم، ستون اول name می باشد که نوع آن varchar می باشد. بنابراین در چنین حالتی تابع UNION ALL خطا نمایش خواهد داد.
برای UNION ALL ، ستون ها باید دیتاتایپ های مشابه داشته باشند.
در مثال زیر مرتب سازی بصورت نزولی یا desc می باشد.
دستور Order by همیشه باید در خرین دستور Select قرار داشته باشد و در هر جایی غیر از آن باشد، خطا تولید خواهد شد:
SYNTAX استفاده از UNION ALL به صورت زیر می باشد:
select column1, column2 ,... from table1
UNION ALL
select column1, column2 ,... from table2
حالا با مثال های ساده ای به بررسی UNION ALL می پردازیم. در ابتدا دو جدول با نام های tblA و tblB ایجاد خواهیم کرد و سپس رکوردهایی را در آن اضافه می کنیم.
CREATE TABLE tblA (SNO INT NOT NULL, NAME VARCHAR(30), CODE VARCHAR(15))
INSERT INTO tblA (SNO, NAME, CODE)
VALUES(1, 'JOY','JO_FTX'),(2, 'RAHEJA', 'RAH_FTX'),(3, 'JOHN D', 'JHN_FTX')
CREATE TABLE tblB (SNO INT NOT NULL, NAME VARCHAR(30), CODE VARCHAR(15))
INSERT INTO tblB (SNO, NAME, CODE)
VALUES (1,'JOY','JO_FTX'),(2,'MARK JACK', 'MA_FTX')
حال به رکوردهایی که در این جدوال اضافه کرده ایم، با دستور Select نگاهی بدان ها خواهیم داشت.
SELECT * FROM tblA
SELECT * FROM tblB
تابع UNION ALL مقادیر تکراری را نیز از tblA و tblB برمی گرداند ، بر خلاف UNION که رکوردهای تکراری را حذف می کند.
select Name, code from tblA
UNION ALL
select Name,Code from tblB
همانطور که در Result set فوق مشاهده می کنید، رکورد تکراری شماره های 1 و 4 هستند و UNION ALL رکوردهای کپی را حذف نمی کند ، به همین دلیل ما برای نام و کد ردیف های تکراری داریم.
UNION ALL on tables when column have different datatype
select sno , code from tblA
UNION ALL
select Name ,Code from tblB
همانطور که در select اول مشاهده می کنید، ستون اول sno است که از نوع int می باشد و در Select دوم، ستون اول name می باشد که نوع آن varchar می باشد. بنابراین در چنین حالتی تابع UNION ALL خطا نمایش خواهد داد.
برای UNION ALL ، ستون ها باید دیتاتایپ های مشابه داشته باشند.
UNION ALL on tables but both table have different number of columns in select statement
همانطور که مشاهده می کنید ، هر دو جدول دارای تعداد ستون های متفاوت هستند ، جدول اول دارای 3 ستون در Select است در حالی که جدول دوم فقط 2 ستون در Select دارد. پس مواجه شدن با خطا بدیهی است.select sno ,Name ,code from tblA
UNION ALL
select Name ,Code from tblB
UNION ALL with order by clause
خروجی Select همراه با union all را می توانید با order by مرتب سازی کنید.در مثال زیر مرتب سازی بصورت نزولی یا desc می باشد.
select Name, code from tblA
UNION ALL
select Name, Code from tblB order by name desc
دستور Order by همیشه باید در خرین دستور Select قرار داشته باشد و در هر جایی غیر از آن باشد، خطا تولید خواهد شد:
select Name ,code from tblA order by name desc
UNION ALL
select Name ,Code from tblB
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: