Comment utiliser existe, unique, distinct, et les chevauchements dans les instructions SQL

Dans la clause WHERE trouve de nombreuses possibilités pour modifier votre instruction SQL. Parmi ces possibilités sont EXISTS, unique, distinct, et les chevauchements prédicats. Voici quelques exemples de la façon de les utiliser dans vos instructions SQL.

Sommaire

EXISTE

Vous pouvez utiliser le EXISTE prédicat en conjonction avec une sous-requête pour déterminer si la sous-requête renvoie toutes les lignes. Si les sous-requête renvoie au moins une rangée, ce résultat satisfait la EXISTE état, et les exécute requête externe. Prenons l'exemple suivant:

SELECT Prénom, LastNameFROM CUSTOMERWHERE existe (SELECT DISTINCT CustomerIDFROM SALESWHERE SALES.CustomerID = Client.IDClient) -

Voici la table de vente contient toutes les opérations de vente de votre entreprise. Le tableau comprend le N ° de client du client qui fait de chaque achat, ainsi que d'autres informations pertinentes. La table Customer contient les noms et prénoms de chaque client, mais aucune information sur des transactions spécifiques.

La sous-requête dans l'exemple précédent renvoie une ligne pour chaque client qui a fait au moins un achat. La requête externe renvoie les noms et prénoms des clients qui ont fait les achats que les enregistrements de la table VENTE.

EXISTE est équivalent à une comparaison entre COUNT avec zéro, comme la requête suivante montre:

SELECT Prénom, LastNameFROM CUSTOMERWHERE 0 lt;> (SELECT COUNT (*) FROM SALESWHERE SALES.CustomerID = Client.IDClient) -

Pour chaque ligne de la table de vente qui contient une N ° de client qui est égale à une N ° de client dans le tableau de CLIENT, cette déclaration l'affiche Prénom et Nom de famille colonnes dans la table du client. Pour chaque vente dans la table des ventes, par conséquent, la déclaration indique le nom du client qui a fait l'achat.

UNIQUE




Comme vous le faites avec le EXISTE prédicat, vous utilisez le UNIQUE prédicat avec une sous-requête. Bien que le EXISTE prédicat est évaluée à True uniquement si les sous-requête renvoie au moins une rangée, la UNIQUE prédicat est évaluée à True seulement si aucun des deux lignes renvoyées par la sous-requête sont identiques. En d'autres termes, la UNIQUE prédicat est évaluée à True uniquement si toutes les lignes que ses sous-requête renvoie sont uniques.

Prenons l'exemple suivant:

SELECT Prénom, LastNameFROM CUSTOMERWHERE UNIQUE (SELECT client à partir SALESWHERE SALES.CustomerID = Client.IDClient) -

Cette déclaration récupère les noms de tous les nouveaux clients pour lesquels les records de ventes de table une seule vente. Parce que une valeur nulle est une valeur inconnue, deux valeurs NULL ne sont pas considérées comme égales à chaque autre- lorsque le UNIQUE mot-clé est appliqué à une table de résultats qui ne contient que deux rangées nul, la UNIQUE prédicat est évaluée à True.

DISTINCT

La DISTINCT prédicat est similaire à la UNIQUE prédicat, sauf dans la façon dont elle traite les valeurs NULL. Si toutes les valeurs dans une table de résultats sont UNIQUE, puis ils sont aussi DISTINCT de chacun d'eux.

Cependant, contrairement au résultat de la UNIQUE prédicat, si le DISTINCT mot-clé est appliqué à une table de résultats qui ne contient que deux rangées nul, la DISTINCT prédicat est évaluée à False. Deux valeurs sont nulles pas considérées comme distinctes l'une de l'autre, tandis que dans le même temps, ils sont considérés comme étant unique.

Cette situation étrange semble contradictoire, mais il ya une raison à cela. Dans certaines situations, vous pourriez choisir de traiter deux valeurs nulles aussi différents les uns des autres - dans ce cas, utiliser le UNIQUE prédicat. Lorsque vous voulez traiter les deux valeurs NULL comme si ils sont la même chose, l'utiliser DISTINCT prédicat.

OVERLAPS

Vous utilisez le OVERLAPS prédicat pour déterminer si deux intervalles de temps se chevauchent. Ce prédicat est utile pour éviter les conflits d'horaire. Si les deux intervalles se chevauchent, le prédicat renvoie une valeur True. Si elles ne se chevauchent pas, le prédicat renvoie une valeur False.

Vous pouvez spécifier un intervalle de deux façons: soit comme une heure de début et une heure de fin ou comme une heure de début et une durée. Voici quelques exemples:

(TIME '2:55:00', INTERVALLE '1' HEURE) recouvre (TIME '3:30:00', INTERVALLE '2' HEURE)

Ce premier exemple renvoie un vrai parce que 03h30 est moins d'une heure après 2h55.

(TIME '9:00:00', TIME '09:30:00') recouvre (TIME '9:29:00', TIME '09:31:00')

Cet exemple renvoie un vrai parce que vous avez un chevauchement d'une minute entre les deux intervalles.

(TIME '9:00:00', '10 HEURE: 00: 00 ') recouvre (TIME '10: 15: 00', INTERVALLE '3' HEURE)

Cet exemple renvoie un faux parce que les deux intervalles ne se chevauchent pas.

(TIME '9:00:00', TIME '09:30:00') recouvre (TIME '9:30:00', TIME '09:35:00')

Cet exemple renvoie un faux parce que même si les deux intervalles sont contigus, ils ne se chevauchent pas.


» » » » Comment utiliser existe, unique, distinct, et les chevauchements dans les instructions SQL