sql >> Database teknologi >  >> RDS >> Mysql

sql forbindes som venn-diagram

Jeg er enig med Cade om begrænsningerne af Venn-diagrammer her. En mere passende visuel repræsentation kunne være denne.

Tabeller

VÆLG A.Farve, B.Farve FRA ET KRYDS JOIN B SQL Fiddle

Krydsforbindelsen (eller kartesisk produkt) giver et resultat med hver kombination af rækkerne fra de to tabeller. Hver tabel har 4 rækker, så dette giver 16 rækker i resultatet.

VÆLG A.Farve, B.Farve FRA EN INDRE JOIN B PÅ A.Colour =B.Colour SQL Fiddle

Den indre sammenkædning returnerer logisk alle rækker fra krydssammenføjningen, der matcher sammenkædningsbetingelsen. I dette tilfælde gør fem det.

VÆLG A.Farve, B.Farve FRA EN INDRE JOIN B PÅ A.Colour NOT IN ('Grøn','Blå') SQL Fiddle

Den indre sammenføjningsbetingelse behøver ikke nødvendigvis at være en lighedsbetingelse, og den behøver ikke henvise til kolonner fra begge (eller endda nogen af) tabellerne. Evaluering af A.Colour NOT IN ('Green','Blue') på hver række af krydsforbindelsen vender tilbage.

En indre forbindelsesbetingelse på 1=1 ville evalueres til sand for hver række i krydssammenføjningen, så de to er ækvivalente (SQL Fiddle ).

VÆLG A.Farve, B.Farve FRA EN VENSTRE YDRE JOIN B PÅ A.Farve =B.Farve SQL Fiddle

Outer Joins vurderes logisk på samme måde som indre joinforbindelser, bortset fra at hvis en række fra venstre tabel (for en venstre join) slet ikke forbindes med nogen rækker fra højre tabel, bevares den i resultatet med NULL værdier for højre kolonner.

VÆLG A.Farve, B.Farve FRA EN VENSTRE YDRE JOIN B PÅ A.Farve =B.Farve HVOR B.Farve ER NULL SQL Fiddle

Dette begrænser simpelthen det forrige resultat til kun at returnere rækkerne, hvor B.Colour IS NULL . I dette særlige tilfælde vil disse være de rækker, der blev bevaret, da de ikke havde nogen match i den højre tabel, og forespørgslen returnerer den enkelte røde række, der ikke matches i tabel B . Dette er kendt som en anti semi join.

Det er vigtigt at vælge en kolonne for IS NULL test, der enten ikke er nullbar, eller for hvilken join-betingelsen sikrer, at enhver NULL værdier vil blive ekskluderet for at dette mønster kan fungere korrekt og undgå blot at bringe rækker tilbage, som tilfældigvis har en NULL værdi for den kolonne ud over de ikke-matchede rækker.

VÆLG A.Farve, B.Farve FRA EN HØJRE YDRE JOIN B PÅ A.Colour =B.Colour SQL Fiddle

Højre ydre joinforbindelser fungerer på samme måde som venstre ydre joinforbindelser, bortset fra at de bevarer ikke-matchende rækker fra den højre tabel og null udvider venstre kolonner.

VÆLG A.Farve, B.Farve FRA EN HELT YDRE JOIN B PÅ A.Colour =B.Colour SQL Fiddle

Fuld ydre joinforbindelser kombinerer adfærden for venstre og højre joins og bevarer de ikke-matchende rækker fra både venstre og højre tabel.



  1. Tilslutning til Oracle Database ved hjælp af SQL Server Integration Services

  2. Omarranger tabelkolonner i Oracle

  3. Opdater primær nøgleværdi ved hjælp af entity framework

  4. Ufølsom søgning i Oracle