Home

Conjonctions Logiques et Disjunctions

 

Conjontions logiques et de Disjonction

 

Introduction

Jusqu'ici, nous avons mentionné les conditions alternatives. Cela a rendu leur interprétation plus facile. Parfois, vous devez tester une condition qui dépend d'une autre. L'algèbre de Boole vous permet de combiner les deux conditions et d'utiliser le résultat, ou essayer deux conditions, mais envisager si l'une ou l'autre est vraie.

 

Practical LearningEtude pratique : Utilisation des conditions avec l'analyse des données

  1. Démarrez Microsoft SQL Server et SQL Server Management Studio.
    Si vous ne l'avez pas encore, créez la RealEstate1 database
  2. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur bases de données, puis cliquez sur Nouvelle requête

Conjonctions logiques

Pour une société immobilière, supposons que vous avez un client qui envisage d'acheter une seule maison familiale autour de Silver Spring, Maryland, vous vérifierez la liste des propriétés et découvrirez ce que vous avez. Pour répondre à cette demande, vous devez examiner deux conditions pour chaque propriété :

  • La propriété doit être une seule famille
  • La propriété doit être située dans Silver Spring

Lorsque vous préparez votre annonce avant de voir le client, vous pouvez commencer par créer une requête qui répertorie les seules maisons familiales. Voici un exemple :

Filter

L'autre condition nécessite que la maison soit située dans Silver Spring. Vous pouvez la définir comme suit :

Conjunction

De ces deux résultats, notez qu'il n'existe aucune relation entre le fait qu'une propriété est une seule famille et qu'elle est située à Silver Spring. Mais notre client acheterait la propriété uniquement si LES DEUX conditions sont remplies : la propriété est une seule famille et la propriété se trouve dans Silver Spring. Ce type de condition est dénommée conjonction logique.

Pour créer une conjonction logique dans SQL, utilisez l'opérateur AND. Pour écrire l'instruction, vous utilisez la formule suivante :

SELECT WhatColumn(s) 
FROM WhatObject 
WHERE Condition1 AND Condition2

Les facteurs WhatColumn(s) et WhatObject sont les mêmes facteurs que nous avons utilisés jusqu'à présent. Le mot-clé AND est l'opérateur qui rejoint les conditions. Chaque condition est écrite comme une opération de SQL à l'aide de la formule :

Column operator Value

Dans ce cas, l'opérateur WHERE ressemble à l'instruction conditionnelle IF. La Condition1 est la première qui serait examinée. Si la première condition est False, l'instruction entière est fausse et il n'y a aucune raison d'examiner la deuxième condition. Si la première condition est True, puis la deuxième condition serait examinée.

Sur cette base, supposons que nous voulons obtenir une liste des étudiantes qui vivent dans le Maryland. L'instruction SQL utilisée pour obtenir cette liste peut être écrite comme suit :

SELECT FirstName, LastName, Gender, City, State 
FROM Students 
WHERE Gender = N'female' AND State = N'md' ;

Nous avons déclaré que chaque condition a été évaluée séparément. Pour cette raison, pour faciliter la lecture de l'instruction de conjonction, chaque condition devrait être incluse entre parenthèses. Par conséquent, la déclaration de SQL ci-dessus peut être écrite comme suit :

SELECT FirstName, LastName, Gender, City, State 
FROM Students 
WHERE (Gender = N'female') AND (State = N'md ')

Cela donnerait :

Conjunction

Vous pouvez également inverser une condition en la précèdant avec l'opérateur NOT.

Practical LearningEtude pratique : Avec une collaboration logique

  1. Pour voir une liste des maisons familiales situées à Silver Spring, saisissez l'instruction suivante :
    USE RealEstate1; 
    GO
    
    SELECT h.PropertyNumber AS [Prop #], 
           h.PropertyType AS type, 
           h.YearBuilt AS [Year Built], 
           h.City, 
           h.State, 
           h.ZIPCode AS [ZIP Code], 
           h.Bedrooms AS Beds, 
           h.Bathrooms AS Baths, 
           h.MarketValue AS Value 
    FROM Properties h 
    WHERE (h.PropertyType = N'Single Family') AND (City =  N'Silver Spring'); 
    GO
  2. Appuyez sur F5 pour exécuter l'instruction.
  3. Supposons qu'un acheteur potentiel envisage d'acheter une maison, mais ne peut pas dépenser plus de 400 000 $.
    Pour obtenir une liste des maisons de ville qui coûtent moins de 400 000 $, modifiez l'instruction comme suit :
    SELECT h.PropertyNumber AS [Prop #], 
           h.PropertyType AS Type, 
           h.YearBuilt AS [Year Built], 
           h.City, 
           h.State, 
           h.ZIPCode AS [ZIP Code], 
           h.Bedrooms AS Beds, 
           h.Bathrooms AS Baths, 
           h.MarketValue AS Value
    FROM Properties h 
    WHERE (h.PropertyType = N'Townhouse') AND (h.MarketValue < 400000) ;
  4. Appuyez sur F5 pour exécuter l'instruction.

    AND
  5. Supposons que le client ci-dessus préfère que la maison soit dans Rockville.
    Pour obtenir une liste des maisons municipales de Rockville au printemps qui coûtent moins de 400 000 $, modifiez l'instruction comme suit :
    SELECT h.PropertyNumber SELECT AS [Prop #], 
           h.PropertyType AS type, 
           h.YearBuilt AS [Year Built], 
           h.City, 
           h.ZIPCode AS [ZIP Code], 
           h.Bedrooms AS Beds, 
           h.Bathrooms AS Baths, 
           h MarketValue AS Value
    FROM Properties h 
    WHERE (h.PropertyType = N'Townhouse ') AND 
          (h.MarketValue < 400000)AND 
          (h.City = N'rockville ') ; 
    GO
  6. Appuyez sur F5 pour exécuter l'instruction.

Disjonction logique

Supposons qu'un client envisage d'acheter une simple maison de famille ou une maison de ville. Pour préparer la liste ou les propriétés, vous devez créer une requête qui ne considère que ces deux options. Avant de construire la requête, vous pouvez indiquer la chose suivante :

  • La propriété est unifamiliale
  • La propriété est une maison de ville.

Lors de la création de la liste, vous pouvez inclure une propriété uniquement s'il s'agit d'une seule famille ou d'une maison :

  1. Si la propriété est une seule famille, notre déclaration est vraie et nous n'avons pas besoin de vérifier la deuxième condition
  2. Si la propriété n'est pas une maison, nous considérons la deuxième condition. Si la propriété est une maison, notre déclaration devient vraie

Ce type de déclaration est dénommée disjonction logique. La disjonction logique est exprimée en SQL à l'aide de l'opérateur OR.

Practical LearningEtude pratique : Utilisation d'une disjonction logique

  1. Pour voir une liste de famille unique et de maisons de ville, modifiez l'instruction comme suit :
    SELECT h.PropertyNumber AS [Prop #], 
           h.PropertyType AS type, 
           h.YearBuilt AS [Year Built], 
           h.City, 
           h.ZIPCode AS [ZIP Code], 
           h.Bedrooms AS Beds, 
           h.Bathrooms AS Baths, 
           h MarketValue AS Value
    FROM Properties h
    WHERE (h.PropertyType = N'single family') OR 
          (h.PropertyType = N'Townhouse'); 
    GO
  2. Appuyez sur F5 pour exécuter l'instruction.

Opérations logiques sur les requêtes

 

Plage de Test : BETWEEN

Si vous avez une plage de valeurs logique et vous voulez savoir si une certaine valeur est contenue dans cette plage, vous pouvez ajouter un opérateur BETWEEN à une instruction WHERE. L'opérateur BETWEEN est combiné avec AND pour obtenir une liste des enregistrements entre deux valeurs. La formule de base de cet opérateur est :

WHERE Expression BETWEEN Start AND End

L'Expression placeholder correspond généralement au nom de la colonne dont vous voulez examiner les valeurs. Le facteur démarrage est la valeur de départ de la plage à envisager. La fin du facteur est la valeur la plus élevée à prendre en considération dans la plage. Une fois que cette condition est exécutée, elle génère la liste des valeurs entre le Start et End.

Pour créer une expression BETWEEN dans la table de fenêtre, sélectionnez les colonnes souhaitées. Sous la colonne de Filtre qui correspond au champ sur lequel vous souhaitez définir la condition, saisissez l'expression BETWEEN. Voici un exemple qui génère une liste d'étudiants qui vivent dans le sud du Maryland où le ZIP Code est de 20500 à 21000 (exclu) :

SELECT FirstName, LastName, Gender, City, State, ZIPCode, SPHome 
FROM Students 
WHERE ZIPCode BETWEEN N'20500' AND N'21000'  

Il est généralement une habitude d'inclure l'ensemble de l'instruction BETWEEN entre parenthèses.

L'instruction ci-dessus devrait produire :

BETWEEN

Practical LearningEtude pratique : Recherche Records entre valeurs

  1. Pour obtenir une liste des propriétés dont les prix sont dans la gamme de 350 000 $ et 450 000 $, modifiez l'instruction comme suit :
    SELECT h.PropertyNumber AS [Prop #], 
           h.PropertyType AS Type, 
           h.YearBuilt AS [Year Built], 
           h.City, 
           h.ZIPCode AS [ZIP Code], 
           h.Bedrooms AS Beds, 
           h.Bathrooms AS Baths, 
           h Market Value AS Value
    FROM Properties h 
    WHERE (h.MarketValue BETWEEN 350000 AND 450000); 
    GO
  2. Appuyez sur F5 pour exécuter l'instruction.
  3. Après l'exécution de l'instruction, vous découvrez que vous n'avez rien comme ça dans Silver Spring. Donc vous suggérez que le client envisage d'autres maisons de ville autour de Silver Spring. Pour créer l'instruction, vous aurez besoin des maisons de ville dont ZIP Codes qui sont entre 20800 et 20999 (Montgomery County, Maryland).
    Pour obtenir une liste des maisons de ville pour ce client, modifiez l'instruction comme suit :
    SELECT h.PropertyNumber AS [Prop #], 
           h.PropertyType AS Type, 
           h.YearBuilt AS [Year Built], 
           h.City, 
           h.ZIPCode AS [ZIP Code], 
           h.Bedrooms AS Beds, 
           h.Bathrooms AS Baths, 
           h.MarketValue AS Value 
    FROM Properties h
    WHERE (h.PropertyType = N'Townhouse') AND
          (h.MarketValue < 400000) AND 
          (h.ZIPCode = (SELECT h.ZIPCode 
     WHERE h.ZIPCode BETWEEN '20500' AND '21000')); 
    GO
  4. Appuyez sur F5 pour exécuter l'instruction.

Une série sélectionnée IN

Si vous avez une série d'enregistrements et que vous souhaitez trouver un enregistrement ou un groupe d'enregistrements parmi eux, vous pouvez utiliser l'exploitant IN en l'ajoutant à une instruction WHERE. L'opérateur IN est un type de différents opérateurs OR. Il s'ensuit cette formule :

IN(Expression1, Expression2, Expression_n)

Chaque facteur d'expression peut être l'une des valeurs d'une colonne. C'est l'équivalent de Expression1OR Expression2 OR Expression_n, etc.

Pour créer une expression IN dans la table de fenêtre, sélectionnez les colonnes souhaitées. Sous la colonne Filtre qui correspond au champ sur lequel vous souhaitez définir la condition, tapez l'expression IN.

À partir de notre liste des étudiants, imaginez que vous souhaitez obtenir une liste des étudiants qui vivent en Silver Spring, en Rockville ou en Chevy Chase. Vous pouvez écrire une expression IN comme suit :

SELECT FirstName, LastName, Gender, City, State, ZIPCode, SPHome 
FROM Students 
WHERE City IN ( N'silver spring', N'rockville', N'chevy chase') ;

En général, c'est une habitude d'inclure toute l'instruction IN entre ses propres parenthèses.

L'instruction ci-dessus devrait produire :

IN

Practical LearningEtude pratique : Intervention IN

  1. Pour obtenir une liste de famille unique et de maisons de ville, modifiez l'instruction comme suit :
    SELECT house.PropertyNumber AS [Prop #], 
           house.PropertyType AS Type, 
           house.YearBuilt AS [Year Built], 
           house.City, 
           house.State, 
           house.ZIPCode AS [ZIP Code], 
           house.Bedrooms AS Beds, 
           house.Bathrooms AS Baths, 
           house.MarketValue AS Value 
    FROM   Properties house
    WHERE house.PropertyType IN (N'Single Family', N'Townhouse '); 
    GO
  2. Appuyez sur F5 pour exécuter l'instruction.
  3. Pour obtenir une liste de famille unique et de maisons de ville situées dans Rockville, modifiez l'instruction comme suit :
    SELECT house.PropertyNumber AS [Prop #], 
           house.PropertyType AS type, 
           house.YearBuilt AS [Year Built], 
           house.City, 
           house.State, 
           house.ZIPCode AS [ZIP Code], 
           house.Bedrooms AS Beds, 
           house.Bathrooms AS Baths, 
           house.MarketValue AS Value 
    FROM Properties house
    WHERE (house.PropertyType IN (N'Single Family', N'Townhouse')) AND 
          (house.City = N'Rockville '); 
    GO
  4. Appuyez sur F5 pour exécuter l'instruction.

Analyse de données et de fonctions

 

Utilisation d'une fonction intégrée

Pour affiner votre analyse de données, vous pouvez utiliser des fonctions, si vous créez vous-même les fonctions ou les fonctions intégrées de Transact-SQL. Comme toujours mentionné, les premiers candidats des fonctions que vous devez essayer d'utiliser sont les fonctions intégrées, dont certaines que nous avons examinées dans la Leçon 7.

Pour utiliser une fonction intégrée, dans l'espace réservé de la colonne, tapez le nom de la fonction, suivi de ses parenthèses. Si la fonction prend certains paramètres, n'oubliez pas de suivre les règles pour appeler une fonction paramétrée. Voici un exemple qui utilise certaines fonctions intégrées basées sur la date pour afficher les âges des étudiants :

SELECT FirstName, LastName, Gender, 
       DATEDIFF(year, DateOfBirth, GETDATE()) AS Age 
FROM Students

Cela donnerait :

Function

Vous pouvez également inclure une fonction dans l'un des opérateurs que nous avons examinés jusqu'ici. Voici un exemple :

SELECT FirstName, LastName, Gender, DateOfBirth, SPHome 
FROM   Students 
WHERE  (DateOfBirth BETWEEN CONVERT(datetime2, N'1995-01-01', 102) AND
                            CONVERT(datetime2, N'1999-12-31', 102))

Vous pouvez également impliquer une fonction intégrée dans une expression.

Utilisation d'une fonction définie par l'utilisateur

Si aucune des fonctions intégrées ne répond à vos besoins, vous pouvez créer votre propre et l'utiliser lors de l'analyse de données. Bien évidemment, vous devez d'abord créer la fonction. Voici un exemple de deux fonctions créées dans la base de données de ROSH :

USE ROSH ; 
GO 
/* ============================================= 
   Author :      FunctionX 
   Create date : Friday 6 april, 2007 
   Description : This function is used
                 to get the full name of a student 
   ============================================= */ 
CREATE FUNCTION GetFullName 
(
        @FName varchar(20), 
        @LName varchar(20) 
) 
RETURNS varchar(41) 
AS 
BEGIN 
        RETURN @LName +', N' + @FName ; 
END ; 
GO 
/* =============================================
   Author :      FunctionX : 
   Create date : Saturday 7 april, 2007 
   Description : This function is used to display Yes or No
   ============================================= */ 
CREATE FUNCTION ShowYesOrNo 
(
    @SPHomeStatus bit
) 
RETURNS varchar(3) 
AS 
BEGIN 
    DECLARE @Result varchar(3) ; 
 
 
    IF @SPHomeStatus = 0 
       SET @Result = N'No '; 
    ELSE 
       SET @Result = N'Yes ; 
 
 
    RETURN @ résultats ; 
END ; 
GO

Une fois qu'une fonction est prête, dans l'espace réservé de votre instruction SQL, tapez dbo., suivi du nom de la fonction, ses parenthèses et son (ses) paremètre (s), le cas échéant, à l'intérieur des parenthèses. Voici un exemple :

SELECT StudentID, 
       dbo.GetFullName(FirstName, LastName) AS [Student's Name], 
       Gender, 
       dbo.ShowYesOrNo(SPHome) AS [Live's in a Single Parent Home ?], 
       ParentsNames AS [Parents' Names] 
FROM Students ; 
GO

Cela donnerait :

Function

   
  

Précédent Copyright © 2010 Yevol Suivant