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

В SQL каква е разликата между JOIN и CROSS JOIN?

SQL има следните типове съединения, всички от които идват направо от теорията на множествата:

  • Вътрешно присъединяване.
    From A inner join B е еквивалентът на A ∩ B, осигурявайки набор от елементи, общи за двата набора.

  • Ляво външно съединение.
    From A left outer join B е еквивалент на (A − B) ∪ (A ∩ B). Всеки A ще се появи поне веднъж; ако има няколко съответстващи B, A ще се повтори веднъж за всяко съответстващо B.

  • Дясно външно съединение.
    From A right outer join B е еквивалент на (A ∩ B) ∪ (B − A). Идентичен е на ляво съединение с размяна на местата на таблиците. Всеки B ще се появи поне веднъж; ако има няколко съвпадащи As, всяко B ще се повтори веднъж за всяко съвпадащо B.

  • Пълно външно свързване.
    From A full outer join B е еквивалент на (A − B) ∪ (A ∩ B) ∪ (B − A). Всяко A и всяко B ще се появи поне веднъж. Ако A съвпада с няколко B, то ще се повтаря веднъж на съвпадение; ако B съвпада с няколко As, ще се повтаря веднъж на съвпадение.

  • Кръстосано свързване.
    From A cross join B произвежда декартово произведение A × B. Всяко A ще се повтори веднъж за всяко B. Ако A има 100 реда и B има 100 реда, наборът от резултати ще се състои от 10 000 реда.

Трябва да се отбележи, че теоретичното изпълнение на select заявката се състои от следните стъпки, изпълнявани в този ред:

  1. Изчислете пълния декартов продукт на изходния набор(а) в from клауза за първичен набор от резултати кандидат.

  2. Приложете критериите за присъединяване в from клауза и намалете набора от резултати кандидат.

  3. Приложете критериите в where clause за допълнително намаляване на набора от резултати на кандидатите.

  4. разделяне на набора от резултати кандидат на групи въз основа на критериите в group by клауза.

  5. Премахнете от набора с резултати кандидат всички колони, различни от тези, които участват в group by клауза или включени в оценката на агрегатна функция.

  6. Изчислете стойността на всяка такава агрегатна функция за всяка група в набора от резултати кандидат.

  7. Свийте всяка група в набора от резултати кандидат в един ред, състоящ се от колоните за групиране и изчислените стойности за всяка агрегатна функция. Кандидатският набор от резултати вече се състои от един ред за всяка група, с всички колони, различни от group by колоните или изчислителните стойности на агрегатните функции за групата се елиминират.

  8. Приложете критериите в having клауза за намаляване на набора от резултати кандидат и създаване на набор от крайни резултати.

  9. Подредете крайния набор от резултати по критериите в order by клауза и я излъчете.

Има още стъпки, свързани с неща като compute и compute by клаузи, но това е достатъчно, за да получите теоретичната представа за това как работи.

Трябва също да се отбележи, че нищо освен най-наивното внедряване всъщност не би оценило select израз по този начин, но получените резултати трябва да са същите, както ако горните стъпки бяха изпълнени изцяло.



  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. Създайте домейн в MySQL

  4. Тригери за свързване на множество таблици

  5. Тричасови интервали от време в MySQL заявка