آموزش SQL

عملگر UNION

عملگر UNION برای ترکیب نتایج دو یا چند SELECT بکار برده می شود.
همه SELECT هایی که با عملگر UNION بکار می روند باید تعداد ستون یکسان با نوع داده مشابه داشته باشند. همچنین ستون های SELECT های همراه UNION باید با ترتیب یکسان نوشته شوند. مثال های بعدی قضیه را روشنتر خواهد کرد.

نحوه کلی استفاده از UNION بدون پارامتر ALL

SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; نحوه کلی استفاده از UNION به همراه ALL SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; استفاده از UNION در حالت عادی رکوردهای تکراری را نشان نمی دهد. استفاده از پارامتر ALL باعث نمایش همه رکوردها می شود.

دو جدول suppliers و customers را برای مثال ها در نظر بگیرید:
جدول customers:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F. 05021 Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
جدول suppliers:
SupplierIDSupplierNameContactNameAddressCityPostalCodeCountry
1Exotic LiquidCharlotte Cooper49 Gilbert St. LondonEC1 4SDUK
2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA
3Grandma Kelly's HomesteadRegina Murphy707 Oxford Rd. Ann Arbor48104USA

مثال زیر شهرهای هر دو جدول را بر می گرداند و چونکه UNION خالی بدون ALL بکار رفته، تکراری ها را نمایش نمی دهد.

SELECT City FROM Customers UNION SELECT City FROM Suppliers ORDER BY City;

مثال زیر نیز شهرهای هر دو جدول را بر می گرداند؛ با این تفاوت که به دلیل استفاده از UNION ALL رکوردهای تکراری هم نمایش داده می شوند.

SELECT City FROM Customers UNION ALL SELECT City FROM Suppliers ORDER BY City;

مثال زیر از عبارت WHERE هم به همراه UNION استفاده کرده است و شرطش این است که فقط شهرهای کشور آلمان را از دو جدول بر گرداند.

SELECT City, Country FROM Customers WHERE Country='Germany' UNION SELECT City, Country FROM Suppliers WHERE Country='Germany' ORDER BY City;

مثال زیر یک راهکار جالب برای نشان دادن نام جدول در ابتدای رکوردهای نتیجه را نشان می دهد.

SELECT 'Customer' AS Type, ContactName, City, Country FROM Customers UNION SELECT 'Supplier', ContactName, City, Country FROM Suppliers; در این مثال یک ستون ساختگی (همانطور که می دانید AS برای قرار دادن نام مستعار است) در ابتدای رکوردهای هر دو جدول ایجاد شده که مقدار آن به صورت ثابت نام جدول ها است. اینگونه متوجه می شویم رکورد بازگشتی از کدام جدول است.