sql >> Databáze >  >> RDS >> Database

Výukový program SQL JOINs s příklady

V tomto článku se podrobně podíváme na SQL Server JOINs. Zkontrolujeme všechny podporované typy JOIN SQL Server se syntaxí, vizuálními ilustracemi a příklady.

Jak všichni víme, tabulková data jsou jádrem každé SQL databáze. Aby jej mohli správci databází efektivně využívat, potřebují pravidelně extrahovat záznamy z několika tabulek na základě určitých podmínek. A přesně k tomu slouží SQL JOINs.

JOIN je klauzule SQL používaná k načtení data ze dvou nebo více tabulek na základě logických vztahů mezi tabulkami. Spojení označují, jak by měl SQL Server používat data z jedné tabulky k výběru řádků v jiné tabulce.

Různé typy JOINů v SQL

SQL Server podporuje různé typy spojení JOIN, včetně INNER JOIN , SAMOTNÉ PŘIPOJENÍ , PRŮBĚŽNÉ PŘIPOJENÍ a OUTER JOIN . Ve skutečnosti každý typ spojení definuje způsob, jakým dvě tabulky souvisí v dotazu. OUTER JOINS lze zase rozdělit na LEVÁ VNĚJŠÍ SPOJE , PRÁVA VNĚJŠÍ SPOJENÍ a ÚPLNÉ VNĚJŠÍ PŘIPOJENÍ .

Abychom lépe demonstrovali, jak fungují JOINy, vytvoříme dvě tabulky.

CREATE TABLE AdventureWorks2019.dbo.users (
auid INT IDENTITY
,username VARCHAR(50) NOT NULL
,password VARCHAR(50) NOT NULL
,createdate DATETIME NOT NULL
,isActive TINYINT NOT NULL
);

CREATE TABLE AdventureWorks2019.dbo.userprofile (
apid INT NOT NULL
,auid INT NOT NULL
,firstname VARCHAR(50) NOT NULL
,lastname VARCHAR(50) NOT NULL
,email VARCHAR(100) NOT NULL
,phone VARCHAR(45) NOT NULL
);

Dále musíme vložit data do vytvořených tabulek.

USE AdventureWorks2019
GO
Insert into dbo.users
(auid, username,password, createdate, isActive)
values
(1,'admin','pswrd123', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(1,1,'Jack', 'Wolf', '[email protected]','600075764216');
Insert into dbo.users
(auid,username,password, createdate, isActive)
values
(2, 'admin1','pass506', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(2, 3, 'Tom', 'Collins', '[email protected]','878511311054');
Insert into dbo.users
(auid, username,password, createdate, isActive)
values
(4,'fox12','[email protected]', GETDATE(), 1);
Insert into userprofile
(apid, auid, firstname, lastname, email, phone)
values
(4,5,'Bill', 'Fonskin', '[email protected]','450985764216');
Insert into dbo.users
(auid,username,password, createdate, isActive)
values
(6, 'lexus1267','98hnfRT6', GETDATE(), 1);
Insert into dbo.userprofile
(apid, auid, firstname, lastname, email, phone)
values
(7, 7, 'John', 'Hopkins', '[email protected]','878511311054');

VNITŘNÍ PŘIPOJENÍ k SQL

Příkaz INNER JOIN vrací záznamy, které mají shodné hodnoty v obou tabulkách.

Syntaxe klauzule SQL INNER JOIN je následující:

SELECT column_name(s)
FROM table1
INNER JOIN table2
 ON table1.column_name = table2.column_name;

VNĚJŠÍ JOINY SQL

Na rozdíl od klauzulí INNER JOIN vracejí OUTER JOIN nejen odpovídající záznamy, ale i ty, které se neshodují. V případě, že ve spojené tabulce existují neodpovídající řádky, zobrazí se pro ně hodnoty NULL.

Existují následující dva typy OUTER JOIN v SQL Server:SQL LEFT JOIN a SQL RIGHT JOIN. Pojďme se na každou z nich podívat blíže.

SQL LEVÉ PŘIPOJENÍ

SQL LEFT JOIN vrátí všechny záznamy z levé tabulky (tabulka A) a odpovídající záznamy z pravé tabulky (tabulka B). Pokud neexistuje žádná shoda, výsledkem je 0 záznamů z pravé strany.

Syntaxe klauzule SQL LEFT JOIN je následující:

SELECT column_name(s)
FROM tableA
LEFT JOIN tableB
 ON tableA.column_name = tableB.column_name;

SPRÁVNÉ PŘIPOJENÍ k SQL

Klíčové slovo RIGHT JOIN vrátí všechny záznamy z pravé tabulky (tabulka2) a odpovídající záznamy z levé tabulky (tabulka1). Pokud neexistuje žádná shoda, výsledkem je 0 záznamů z levé strany.

Syntaxe klauzule SQL RIGHT JOIN je následující:

SELECT column_name(s)
FROM tableA
RIGHT JOIN tableB
 ON tableA.column_name = tableB.column_name;

PLNÉ VNĚJŠÍ PŘIPOJENÍ k SQL

FULL OUTER JOIN vrátí všechny záznamy, když se v záznamech tabulky vlevo (tabulka A) nebo vpravo (tabulka B) shodují.

Syntaxe klauzule SQL FULL OUTER JOIN je následující:

SELECT column_name(s)
 FROM tableA
 FULL OUTER JOIN tableB
 ON tableA.column_name = tableB.column_name
  WHERE condition;

SQL CROSS JOIN

SQL CROSS JOIN, také známý jako kartézské JOIN, načte všechny kombinace řádků z každé tabulky. V tomto typu JOIN je sada výsledků vrácena vynásobením každého řádku tabulky A všemi řádky v tabulce B, pokud není zavedena žádná další podmínka.

Pro lepší pochopení CROSS JOINů se podívejme na Vennův diagram níže.

Syntaxe SQL CROSS JOIN je následující:

SELECT * 
FROM tableA 
CROSS JOIN tableB;

Vlastní připojení k SQL

Self-join je normální JOIN, ale stůl je spojen sám se sebou. To znamená, že každý řádek tabulky je kombinován sám se sebou as každým dalším řádkem tabulky.

Syntaxe SQL self JOIN je následující:

SELECT column_name(s)
FROM table1 T1, table1 T2
  WHERE condition;

Závěr

Znalosti a odborné znalosti v používání klauzulí SQL JOIN jsou základními dovednostmi každého DBA nebo analytika. S jeho hvězdnou funkcí dokončování kódu, dbForge Studio pro SQL Server může ušetřit váš čas a úsilí při psaní i těch nejsložitějších JOIN doložek. Nemusíte mít na paměti stovky názvů sloupců nebo aliasů, dbForge Studio pro SQL vás vyzve k úplné klauzuli SQL JOIN. Díky bohaté funkčnosti tohoto nástroje je navrhování složitých SQL dotazů a správa podmínek JOIN rychlé, snadné a pohodlné.


  1. SQLite – ORDER BY RAND()

  2. Jak vytvořit index v Django bez výpadků

  3. Co to znamená, když je proces PostgreSQL v transakci nečinný?

  4. jak nakonfigurovat konfigurační soubor hibernace pro sql server