Database
 sql >> база данни >  >> RDS >> Database

Как да комбинирате резултатите от две заявки в SQL

Проблем:

Искате да покажете данни от дадени колони (от подобен тип данни) от две таблици в SQL.

Пример:

В нашата база данни има две таблици:employee и customer .

employee таблицата съдържа данни в следните колони:id , собствено_име , фамилно_име и възраст .

id first_name фамилно_име възраст
1 Том Милър 22
2 Джон Смит 26
3 Лиза Уилямс 30
4 Чарлз Дейвис 21
5 Джеймс Мур 22

customer таблицата съдържа данни в следните колони:id , собствено_име , фамилно_име и възраст .

id first_name фамилно_име възраст
1 Милано Смит 45
2 Чарлз Дейвис 21
3 Марк Подкрепител 19

В един набор от резултати нека покажем собственото име, фамилията и възрастта за всички хора в базата данни, както служители, така и клиенти.

Решение 1:

Ще използваме UNION ALL за обединяване на данни от колони в две таблици.

Ето заявката, която бихте написали:

SELECT first_name, last_name, age FROM employee
UNION ALL
SELECT first_name, last_name, age FROM customer;

Ето резултата:

first_name фамилно_име възраст
Том Милър 22
Джон Смит 26
Лиза Уилямс 30
Чарлз Дейвис 21
Джеймс Мур 28
Милано Смит 45
Чарлз Дейвис 21
Отметка Подкрепител 19

Дискусия:

Използвайте клаузата UNION ALL, за да обедините данни от колони в две или повече таблици. В нашия пример ние обединяваме данни от employee и customer маси. Отляво на ключовата дума UNION ALL поставете първия оператор SELECT, за да получите данни от първата таблица (в нашия пример таблицата employee ). Вдясно използвайте друг оператор SELECT, за да получите данни от втората таблица (в нашия пример, customer ).

Не забравяйте, че избраните данни в двете таблици трябва да са от един и същ тип данни във всяка колона. Например, ако първата колона в първия SELECT е низов тип данни, първата колона във втория SELECT трябва също да бъде низов тип данни. Ако втората колона в първия израз SELECT е цяло число, втората колона във втората таблица също трябва да е от целочислен тип.

В първата заявка избрахме възраст (възрастта на служителя, която е целочислен тип данни) за третата колона. Следователно, третата колона във втория SELECT също е целочислена стойност; това е възрастта на клиента.

Вторите колони и в двата оператора SELECT са от същия тип данни. Ако обаче стойностите са еднакви и в двете таблици, те ще бъдат показани няколко пъти; например „Чарлз Дейвис 21“ се показва два пъти в набора от резултати.

Ами ако не искате няколко еднакви записи в таблицата с резултати? В този случай използвайте UNION . Това е подобно на UNION ALL , но премахва дублиращи се записи. Вижте следния пример.

Решение 2:

Ето заявката, която избягва дублиращи се записи:

SELECT first_name, last_name FROM employee
UNION 
SELECT first_name, last_name FROM customer;

Ето резултата от горната заявка:

first_name фамилно_име
Маркиране Подкрепител
Джеймс Мур
Джон Смит
Чарлз Дейвис
Милано Смит
Том Милър
Лиза Уилямс

Забележка:

UNION ALL е по-бърз от UNION , но UNION премахва дублиращи се редове. Изборът зависи от данните за резултата, от които се нуждаем.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL AS:Използване, примери и как може да ви е от полза най-добре

  2. Как да изпълните необработен SQL в SQLAlchemy

  3. Улавяне на предупреждения за план за изпълнение с помощта на разширени събития

  4. Анонимизирайте детайлите на плана си по естествен начин в Plan Explorer

  5. От какви умения и знания се нуждаят дизайнерите на бази данни?