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

sql се присъединява като диаграма на Venn

Съгласен съм с Кейд относно ограниченията на диаграмите на Вен тук. Това може да бъде по-подходящо визуално представяне.

Таблици

ИЗБЕРЕТЕ A.Colour, B.Colour ОТ КРЪСТО ПРИСЪЕДИНЯВАНЕ B SQL Fiddle

Кръстосаното свързване (или декартово произведение) дава резултат с всяка комбинация от редовете от двете таблици. Всяка таблица има 4 реда, така че това дава 16 реда в резултата.

ИЗБЕРЕТЕ A.Colour, B.Colour ОТ A INNER JOIN B ON A.Colour =B.Colour SQL Fiddle

Вътрешното съединение връща логически всички редове от кръстосаното съединение, които отговарят на условието за свързване. В този случай пет го правят.

ИЗБЕРЕТЕ A. Цвят, B. Цвят ОТ ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ B ВЪРХУ A. Цвят НЕ ВЪВ ('Green','Blue') SQL Fiddle

Вътрешното условие за свързване не е задължително да бъде условие за равенство и не е необходимо да препраща към колони от двете (или дори от едната) от таблиците. Оценяване на A.Colour NOT IN ('Green','Blue') на всеки ред от кръстосаното съединение се връща.

Условие за вътрешно присъединяване на 1=1 ще се оцени на true за всеки ред в кръстосаното съединение, така че двете са еквивалентни (SQL Fiddle ).

ИЗБЕРЕТЕ A.Colour, B.Colour ОТ A LEFT OUTER JOIN B ON A.Colour =B.Colour SQL цигулка

Външните обединявания се оценяват логически по същия начин като вътрешните свързвания, с изключение на това, че ако ред от лявата таблица (за ляво присъединяване) изобщо не се съединява с никакви редове от дясната таблица, той се запазва в резултата с NULL стойности за десните колони.

ИЗБЕРЕТЕ A.Colour, B.Colour ОТ A LEFT OUTER JOIN B ON A.Colour =B.Colour WHERE B.Colour IS NULL SQL Fiddle

Това просто ограничава предишния резултат, за да върне само редовете, където B.Colour IS NULL . В този конкретен случай това ще бъдат редовете, които са били запазени, тъй като не са имали съвпадение в дясната таблица и заявката връща единичния червен ред, който не е съвпаден в таблица B . Това е известно като анти полусъединяване.

Важно е да изберете колона за IS NULL тест, който или не е нулев, или за който условието за присъединяване гарантира, че всеки NULL стойностите ще бъдат изключени, за да може този модел да работи правилно и да се избегне просто връщане на редове, които случайно имат NULL стойност за тази колона в допълнение към несъпоставените редове.

ИЗБЕРЕТЕ A.Colour, B.Colour ОТ ДЯСНО ВЪНШНО ПРИСЪЕДИНЕНИЕ B НА A.Colour =B.Colour SQL Fiddle

Десните външни съединения действат подобно на лявото външни съединения, с изключение на това, че запазват несъответстващи редове от дясната таблица и нула разширяват левите колони.

ИЗБЕРЕТЕ A.Colour, B.Colour ОТ ПЪЛНО ВЪНШНО ПРИСЪЕДИНЕНИЕ B НА A.Colour =B.Colour SQL Fiddle

Пълните външни свързвания комбинират поведението на лявото и дясното свързване и запазват несъответстващите редове както от лявата, така и от дясната таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да манипулирам уместността на MySQL пълнотекстово търсене, за да направя едно поле по-ценно от друго?

  2. конфигурацията на mysql спира при стартиране на сървъра

  3. ГРЕШКА 1045 (28000):Достъпът е отказан за потребител 'root'@'localhost' (използвайки парола:ДА)

  4. MySql Единична таблица, Изберете последните 7 дни и включете празни редове

  5. PyMySQL не може да се свърже с MySQL на localhost