SQL Server

UNION əmrinin istifadə olunması

UNION əmrinin istifadə olunması

UNION əmri sadəcə olaraq bir neçə sorğunu bir sorğu kimi birləşdirir. Məs, aşağıdakı sorğu sifarişçi və agentləri birləşdirir:

	SELECT snum, sname
	FROM Salespeople
	WHERE city = 'Москва'

	UNION

	SELECT cnum, cname
	FROM Customers
	WHERE city = 'Москва'

Nəticə:

	snum  sname              
	----- ------------------ 
	2001  ТОО Рога и копыта 
	1001  Иванов       

UNION əmrinin istifadəsi üçün iki qaydadan istifadə edilir.

  • Bütün sorğularda sütunların ardıcıllığı eyni olmalıdır.
  • Verilənlərin tipləri uyğun gəlməlidirlər.

Tiplərin uyğunluğu sadə təyin olunur.

Sütundakı verilənin tipi Nəticənin tipi
Hər iki sütun qeyd olunmuş L1 və L2 uzunluqlu char tiplidirlər. L1 və L2-dən ən böyük olan uzunluğa malik char
Hər iki sütun qeyd olunmuş L1 və L2 uzunluqlu binary tiplidirlər. L1 və L2 dən ən böyük olan uzunluğa malik binary
Bir və ya bir neçə varchar tipi L1 və L2 dən ən böyük olan uzunluğa malik varchar
Bir və ya bir neçə varbinary tipi L1 və L2 dən ən böyük olan uzunluğa malik varbinary
Hər iksi say tiplidir (smallint,moneyfloat) Verilənlərin tipi ən böyük dəqiqliklə (int=>float)

UNION avtomatik olaraq çıxışa verilən aşkar sətirləri silir. Əgər siz istəyirsiniz ki bütün sətirlər nəticəyə verilsin onda UNION ALL-dan istifadə edin.

	SELECT snum, city
	FROM Customers

	UNION ALL

	SELECT snum, city
	FROM Salespeople

Nəticə:

	snum  city        
	----- ----------- 
	1001  Москва     
	1003  Одесса     
	1002  Рязань     
	1002  Бобруйск   
	1001  Лондон     
	1004  ТОМСК      
	1007  Караганда  
	1001  Москва     
	1002  Хабаровск  
	1003  Караганда  
	1004  Сочи       
	1007  Красноярск 

UNION ilə nəticəni sıralamaq ümün ORDER BY-ı istifadə etmək olar. Bu vaxt ORDER BY, UNION-dan çıxan yalnız axırıncıdan sonrakı sorğunu göstərir.

	SELECT a.snum, sname, onum, 'Наибольший на ',odate
	FROM Salespeople a, Orders b
	WHERE a.snum = b.snum AND
	   b.amt = (
	       SELECT MAX(amt)
	       FROM Orders c
	       WHERE c.odate = b.odate
	   )

	UNION

	SELECT a.snum, sname, onum, 'Наименьший на ', odate
	FROM Salespeople a, Orders b
	WHERE a.snum = b.snum AND
	   b.amt = (
	       SELECT MIN(amt)
	       FROM Orders c
	       WHERE c.odate = b.odate
	   )

	ORDER BY 3

Nəticə:

	snum  sname   onum                 odate       
	----- ------- ----- -------------- ----------- 
	1007  Шилин   3001  Наименьший на  1999-10-03 
	1002  Петров  3005  Наибольший на  1999-10-03 
	1002  Петров  3007  Наименьший на  1999-10-04 
	1001  Иванов  3008  Наименьший на  1999-10-05 
	1001  Иванов  3008  Наибольший на  1999-10-05 
	1003  Егоров  3009  Наибольший на  1999-10-04 
	1002  Петров  3010  Наименьший на  1999-10-06 
	1001  Иванов  3011  Наибольший на  1999-10-06 

3 sadəcə olaraq çıxış sütununun nömrəsidir. Yazıları bu cür sadə sıralamaq olar, yəni ki UNION-u istifadə edərkən sütunların adları ixtiyari cür görünür.

İndi siz ixtiyari sayda soröunu birləşdirməyi bacarırsınız. Əgər sizdə müxtəlif istifadəçilərə aid olan bir-neçə cədvəl varsa, uyğunlaşma eyni cür qarışdırılır və sıralama üsuluna malikdir.

Bununla da suallar haqqında olan sorğunu qurtardıq. Növbəti addımda məlumatların cədvələ necə daxil olması, cədvəllər əsasən necə yaradılır və buna aid olan digər məlumatlar öyrənəcəksiniz. Sorğulara əsasən digər əmrlərdə rast gəlinəcək. Növbəti addım yazıların yerlləçdirmə, dəyişmə və pozulmasına aid olacaq.