Duplicaten beheren

De queryprestaties verbeteren in SQL Server

Dean Smith

Founder, Atamai Analytics

Query met duplicaten

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
De queryprestaties verbeteren in SQL Server

Duplicaten verwijderen met DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
De queryprestaties verbeteren in SQL Server

GROUP BY in plaats van DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
De queryprestaties verbeteren in SQL Server

GROUP BY in plaats van DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
SELECT PlayerName,
    COUNT(Team) AS TeamsPlayedFor
FROM PlayerStats 
GROUP BY PlayerName;
PlayerName TeamsPlayedFor
... ...
Emmanuel Mudiay 2
Enes Kanter 1
Eric Bledsoe 2
Eric Gordon 1
Eric Moreland 1
... ...
De queryprestaties verbeteren in SQL Server

Kan het ook anders?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
De queryprestaties verbeteren in SQL Server

Fruits-tabellen

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Steenvrucht
Strawberry Bes

Fruits2

FruitName FruitType
Marionberry Bes
Orange Citrus
Plum Steenvrucht
Strawberry Bes
De queryprestaties verbeteren in SQL Server

Dubbele vruchten

 

 

 

  • Orange en Strawberry zijn dubbel

Fruits1 toegevoegd aan Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Steenvrucht
Strawberry Bes
Strawberry Bes
De queryprestaties verbeteren in SQL Server

Duplicaten verwijderen met UNION

SELECT FruitName, FruitType
FROM Fruits1

UNION

SELECT FruitName, FruitType
FROM Fruits2
FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Steenvrucht
Strawberry Bes
Marionberry Bes
Plum Steenvrucht
De queryprestaties verbeteren in SQL Server

En UNION ALL dan?

 

  • UNION ALL
    • voegt rijen uit één of meer tabellen samen en verwijdert géén duplicaten

 

  • UNION
    • voegt rijen uit één of meer tabellen samen en verwijdert duplicaten
De queryprestaties verbeteren in SQL Server

DISTINCT() en UNION

  • Gebruik met zorg
  • Kan intern sorteren om op duplicaten te controleren
  • Kan de querytijd verhogen
De queryprestaties verbeteren in SQL Server

DISTINCT() gebruiken

Voordat je DISTINCT() gebruikt, vraag je af:

  • Is er een alternatief?
    • gebruik liever een tabel met een unieke sleutel
  • Gebruikt de query een aggregatiefunctie?
    • groepeer met GROUP BY
De queryprestaties verbeteren in SQL Server

UNION gebruiken

Voordat je UNION gebruikt, vraag je af:

  • Zijn dubbele rijen oké?
  • Levert samenvoegen dubbele rijen op?
  • Overweeg UNION ALL als dubbele rijen oké zijn of er geen duplicaten ontstaan
De queryprestaties verbeteren in SQL Server

Laten we oefenen!

De queryprestaties verbeteren in SQL Server

Preparing Video For Download...