Contacts

Intersectez des exemples SQL. Opérateur pour les ensembles de données intersect. Un exemple avec une expression

SQL fournit deux façons de combiner des tables:
  • spécification des tables connectées (y compris les sous-requêtes) dans la phrase de l'instruction SELECT. Premièrement, la connexion des tableaux est effectuée et seules les conditions spécifiées par la phrase du groupe par agrégation, la commande des données, etc., sont utilisées à l'ensemble résultant.
  • définition de l'intégration des ensembles résultants obtenus lors du traitement de l'instruction SELECT. Dans ce cas, les deux opérateurs sélectionnés sont connectés par la phrase syndicat, Couper., Sauf ou correspondant.

Syndicat syndical

Phrase syndicat Combine les résultats de deux demandes sur les règles suivantes:

La norme n'impose aucune restriction sur les lignes en streaming dans l'ensemble résultant. Donc, certains SGBD affichent d'abord le résultat de la première demande, puis le résultat de la deuxième requête. Le DBMS Oracle trie automatiquement les enregistrements de la première colonne spécifiée même si l'index n'est pas créé pour cela.

Afin de spécifier explicitement l'ordre de tri souhaité, la commande par phrase doit être utilisée. Dans ce cas, vous pouvez utiliser à la fois le nom de la colonne et son numéro (Fig. 4.3).


Figure. 4.3.

Phrase syndicat Tous effectuent l'union de deux sous-requêtes de la même manière que la phrase syndicale avec les exceptions suivantes:

  • les lignes coïncides ne sont pas retirées de l'ensemble résultant résultant;
  • les requêtes combinées sont affichées dans l'ensemble résultant séquentiellement sans commander.

Lors de la combinaison de plus de deux demandes de modification de l'ordre de l'opération de fusion, vous pouvez utiliser des crochets (Fig. 4.4).


Figure. 4.4.

Intersect-Association

Phrase Couper. Vous permet de sélectionner uniquement les lignes présentes dans chaque ensemble de résultats uni. En figue. 4.5 Un exemple de combinaison de demandes comme des ensembles d'intersection est donné.


Figure. 4.5.

À l'exception de l'union

Phrase Sauf Vous permet de sélectionner uniquement les lignes présentes dans le premier ensemble résultant combiné, mais sont absentes dans le deuxième ensemble de résultats.

Phrases Couper. et Sauf Ne doit être pris en charge qu'avec le niveau de conformité complet de la norme SQL-92. Donc, certains SGBD au lieu de la phrase

Il n'y a qu'une seule règle importante d'utiliser l'instruction sauf que vous devez vous rappeler.

La commande, la quantité et les types de colonnes de données doivent être le même type dans toutes les demandes.

Selon la norme ANSI, les opérateurs ayant un syndicat et à l'exception des ensembles ont la même priorité, mais la déclaration d'intersect est effectuée avant d'autres opérateurs pour les ensembles. Nous recommandons explicitement pour gérer la priorité des opérateurs à l'aide des crochets. C'est généralement très bonne pratique.

Selon la norme ANSI, une seule commande par offre peut être utilisée. Insérez-le au plus facile de la dernière déclaration de sélection. Pour éviter toute ambiguïté dans la spécification des colonnes et des tables, assurez-vous d'attribuer le même alias à toutes les colonnes correspondantes des tables. Par example:

Sélectionnez AU_LNAME comme "Nom", AU_FNAME comme "Prénom" des auteurs, sauf sélectionnez Emp_lname comme "Nom", Emp_Fname comme "Prénom" de l'ordre des employés par Nom, prénom;

De plus, comme dans chaque liste des colonnes, des colonnes peuvent être indiquées avec des types de données compatibles respectivement, diverses options de travail avec des colonnes de différentes longueurs peuvent survenir sur différentes plates-formes de Supd. Par exemple, si la colonne AU_LNAME de la première requête dans l'exemple précédent est beaucoup plus longue que la colonne EMP_LName de la deuxième requête, différentes plates-formes peuvent appliquer des règles différentes pour déterminer la longueur du résultat final. Mais d'une manière générale, les plates-formes choisiront le résultat d'une taille plus longue (moins limitée).

Chaque cheombie peut appliquer ses propres règles pour utiliser le nom de la colonne si les noms des colonnes listent différent. Dans le cas général, les noms des premières colonnes de demande sont utilisés.

Les types de données ne doivent pas être identiques, mais ils doivent être compatibles. Par exemple, les types de char et de varchar sont compatibles. Par défaut, le jeu résultant dans chaque colonne sera utilisé la taille correspondant au type le plus important de chaque position spécifique. Par exemple, une demande qui extrait les données des colonnes contenant des valeurs de type Varcharchar (IO) et Varchar (15) utilisera le type et la taille de Varchar (15).

Aucune des plates-formes ne prend en charge l'offre correspondante) sauf

(Sélectionnez STATemenR.2 | Valeurs (expressl, expression2 [, ...])) sauf

Vous permet de spécifier une ou plusieurs colonnes définies manuellement, qui sont incluses dans le jeu de résultats final. (Ceci s'appelle le concepteur de lignes.) Dans la valeur des valeurs, il doit y avoir exactement de nombreuses colonnes qu'ils sont spécifiées dans les requêtes de l'opérateur à l'exception. Bien que l'instruction distincte sauf ne soit pas prise en charge, l'équivalent fonctionnel est sauf. L'offre correspondante n'est pas prise en charge. De plus, Long Varchar, Long Vargraphic, BLOB, CLOB, DBCLOB, DataLink, DataLink et Types de structure ne sont pas utilisés dans l'offre sauf, mais ils peuvent être utilisés à l'exception de tous.

Si l'ensemble des données résultant est une colonne qui a le même nom dans toutes les instructions de sélection, ce nom est utilisé comme nom final pour la colonne renvoyée par l'instruction. Si cette colonne s'appelle différemment dans différentes instructions de sélection, vous devez renommer la colonne dans toutes les demandes en utilisant la même chose qu'un pseudonyme dans tous.

Si plusieurs opérateurs sont utilisés dans une requête pour travailler avec des ensembles de données, la première qui est enfermée entre parenthèses est effectuée. Après cela, l'ordre d'exécution sera laissé à droite. Néanmoins, toutes les déclarations intersecteurs sont effectuées avant l'Union et à l'exception des opérateurs. Par example:

Sélectionnez EMPNO à partir de l'employé où le FoulaindDept comme "E%" sauf Sélectionnez Empno de Emp_act où Projno in (TF1000 ", TF2000", -AD3110 "))) Valeurs de l'Union (" AA0001 "), (" AB0002 "), (" AB0002 "), (" AB0002 "), (" AB0002 "), (" AB0002 "), ");

Dans l'exemple ci-dessus de la table des employés, des identifiants (ID) de tous les employés opérant dans le département, le nom qui commence par "E", puis l'ID de ceux engagés dans les projets IF1000, IF200 et AD3110 sont exclus de l'EMP_ACT Table de comptabilité (EMP_ACT). Et enfin, trois identifiants supplémentaires sont ajoutés - AA0001, AB0002 et AC0003 en utilisant l'opérateur des ensembles de l'Union.

Mysql

Dans MySQL, l'instruction SAUF n'est pas prise en charge. Alternativement, vous pouvez utiliser non pas dans les opérations ou n'existe pas.

L'opérateur intersect extrait des lignes identiques à partir des ensembles résultants d'une ou de plusieurs demandes. À certains égards, la déclaration interne est très rappelée par une jointure intérieure.

Intersect fait référence à la classe de classe pour travailler avec des ensembles de données (opérateur défini). D'autres opérateurs de ce type incluent sauf et union. Tous les opérateurs des ensembles de données sont utilisés pour manipuler simultanément les ensembles résultants de deux demandes ou plus, d'ici et de leur nom.

SQL2003 Syntaxe

Les restrictions techniques sur le nombre de demandes de la déclaration d'intersect n'existent pas. La syntaxe générale est la suivante.

Couper.

] Intersect.

Mots clés

Des lignes en double à partir de tous les ensembles de résultats sont incluses.

Distinct.

Les chaînes en double sont retirées de tous les ensembles résultants avant de comparer l'opérateur d'intersect. Les colonnes avec des valeurs vides (null) sont considérées comme dupliquées. Si ni le tout mot clé ni le distinct ne sont indiqués, la valeur par défaut est distincte.

Correspondant

Il est indiqué que seules ces colonnes ayant un nom dans les deux demandes seront renvoyées, même si le symbole (*) est utilisé dans les deux demandes.

Il est indiqué que seules ces colonnes seront renvoyées, même si les demandes détectent d'autres colonnes avec les noms correspondants. Cette proposition doit être utilisée avec le mot-clé correspondant.

Règles générales

Il n'y a qu'une seule règle importante que vous souhaitez vous rappeler lorsque vous travaillez avec l'opérateur d'intersect.

La commande et le nombre de colonnes dans toutes les demandes devraient être égales. Les types de données des colonnes correspondantes doivent également être compatibles.

Par exemple, les types de char et de varchar sont compatibles. Par défaut, le jeu résultant dans chaque colonne sera utilisé la taille correspondant au type le plus important de chaque position spécifique.

Aucune des plates-formes ne prend en charge l'offre correspondante.

Selon la norme ANSI, la déclaration d'intersection a une priorité plus élevée que les autres opérateurs de travailler avec des ensembles, bien que sur différentes plates-formes, la priorité de ces opérateurs est traitée différemment. Vous pouvez explicitement gérer la priorité des opérateurs à l'aide des crochets. Sinon, le SGBD peut les exécuter dans l'ordre de gauche à droite ou du premier au dernier.

Selon la norme ANSI, une seule commande par offre peut être utilisée. Insérez-le au plus facile de la dernière déclaration de sélection. Pour éviter toute ambiguïté dans la spécification des colonnes et des tables, assurez-vous d'attribuer le même alias à toutes les colonnes correspondantes des tables. Par example:

Sur les plates-formes qui ne prennent pas en charge la déclaration d'intersect, vous pouvez le remplacer par une adhésion complète de sous-requête.

Sélectionnez A.Au_LName comme "Nom", a.au_fname comme "FirstName" des auteurs en tant qu'interseect Sélectionnez E.emp_lname comme "Nom", e.emp_fname comme "Prénom" des employés en tant qu'indec commandé par nom Nom, prénom;

Étant donné que les types de données de colonne dans différentes demandes de l'opérateur intersect peuvent être compatibles, diverses options de travail avec des colonnes de différentes longueurs peuvent survenir sur différentes plates-formes SURBD. Par exemple, si la colonne Aujname de la première requête dans l'exemple précédent est beaucoup plus longue que la colonne Empjname de la deuxième requête, les différentes plates-formes peuvent appliquer des règles différentes pour déterminer le résultat final. Mais d'une manière générale, les plates-formes choisiront le résultat d'une taille plus longue (moins limitée).

Chaque cheombie peut appliquer ses propres règles pour utiliser le nom de la colonne si les noms des colonnes listent différent. Les noms des premières colonnes de demande sont généralement utilisés.

DB2.

La plate-forme DB2 prend en charge les mots-clés intersect et intersect AlSi Standard plus une valeur supplémentaire de valeurs.

(Instruction._Select_7 | Valeurs (Exprimant7 [, ...])) Intersect

] (Instruction_SCJ_2 | Valeurs (exprimer 2 [, ...])) Intersect

Bien que l'instruction distincte intersect ne soit pas prise en charge, l'équivalent fonctionnel est intersect. L'offre correspondante n'est pas prise en charge.

De plus, Long Varchar, Long Vargraphic, BLOB, CLOB, DBCLOB, DataLink et Types de structure ne sont pas utilisés dans l'offre d'intersect, mais vous pouvez utiliser tout l'intersect.

Si l'ensemble des données résultant est une colonne qui a le même nom dans toutes les instructions de sélection, ce nom est utilisé comme nom final pour la colonne renvoyée par l'instruction. Si des noms différents sont utilisés dans les requêtes pour la colonne, la plate-forme DB2 générera un nouveau nom pour la colonne résultante. Après cela, il devient inapproprié d'utiliser dans l'ordre par et pour les offres de mise à jour.

Si plusieurs opérateurs sont utilisés dans une requête pour travailler avec des ensembles de données, la première qui est enfermée entre parenthèses est effectuée. Après cela, l'ordre d'exécution sera laissé à droite. Cependant, toutes les déclarations intersect sont effectuées à l'union et à l'exception des déclarations, par exemple:

Sélectionnez EMPNO à partir de l'employé de l'intersect de "E%" (SELECT EMPNO de EMP_ACT de PROJNO IN ("IF1000", "IF2000", "AD3110") ("AA0001"), ("AB0002"), ("AB0002"), "AC0003"))

Dans l'exemple ci-dessus, les identifiants (ID) de tous les employés opérant dans le département, dont le nom commence par "E" est extrait de la table des employés. Toutefois, des identificateurs ne sont récupérés que si elles existent également dans la table des comptes d'employé avec le nom Emp_ACT et participent aux projets IF1000, IF200 et AD3110.

Dans ce tutoriel, vous apprendrez à utiliser sauf opérateur dans SQL Server (Transact-sql) avec syntaxe et exemples.

La description

Sauf opérateur SQL Server (Transact-SQL) Utilisé pour renvoyer toutes les lignes dans la première instruction SELECT, qui ne sont pas renvoyées par la deuxième instruction SELECT. Chaque instruction SELECT définira un ensemble de données. L'opérateur à l'exception extraire tous les enregistrements du premier jeu de données, puis supprimez tous les enregistrements du deuxième jeu de données à partir des résultats.

Sauf demande

Explication: Sauf Demande retournera l'enregistrement dans une zone ombragée grise. Ce sont les enregistrements qui existent dans SELECT 1, et non dans SELECT 2.
Chaque instruction SELECT dans une requête sauf doit avoir le même nombre de champs dans les résultats des résultats avec des types de données similaires.

Syntaxe

Sauf Syntaxe de l'opérateur dans SQL Server (Transact-SQL):

Paramètres ou arguments

expressions - colonnes ou calculs que vous souhaitez comparer entre deux opérateurs sélectionnés. Ils ne doivent pas être les mêmes champs dans chacune des instructions de sélection, mais les colonnes correspondantes doivent être avec des types de données similaires.
tables - Tables à partir desquelles vous souhaitez recevoir des enregistrements. Il doit y avoir au moins une table énumérée dans la phrase de la phrase.
Où conditions - facultatif. Conditions qui doivent être complétées pour des entrées sélectionnées.

Noter

  • Dans les deux opérateurs sélectionnés, il doit y avoir le même nombre d'expressions.
  • Les colonnes correspondantes de chacune des instructions de sélection doivent avoir des types de données similaires.
  • À l'exception de l'opérateur renvoie tous les enregistrements de la première instruction SELECT qui n'est pas incluse dans la deuxième instruction SELECT.
  • À l'exception de l'opérateur dans SQL Server équivaut à l'opérateur Minus à Oracle.

Un exemple avec une expression

Considérons un exemple d'opérateur à l'exception de SQL Server (Transact-SQL), qui renvoie un champ avec le même type de données.
Par example:

Transact-sql.

Sélectionnez Product_Id à partir de produits, sauf sélectionnez Product_Id à partir de l'inventaire;

Sélectionnez Product_ID.

Des produits.

Sélectionnez Product_ID.

De l'inventaire;

Cet exemple d'un opérateur sauf renvoie toutes les valeurs de produit_ID dans la table des produits et non dans la table d'inventaire. Cela signifie que si la valeur de produit_id existe dans la table des produits et existe également dans la table d'inventaire, la valeur de produit_id ne sera pas affichée dans les résultats de la requête, à l'exception des résultats.

Exemple avec plusieurs expressions

Ensuite, considérons ensuite un exemple d'une requête sauf dans SQL Server (Transact-SQL), qui retourne plus d'une colonne.
Par example:

Transact-sql.

Dans cet exemple, l'exsection requère renvoie les enregistrements de la table Contacts avec le nom contact_id, last_name et le nom_nuaire, qui ne correspond pas à la valeur Employee_id, Last_Name et Nom de la page de la table des employés.



Avez-vous aimé l'article? Partagez-le