NULL en SQL

Le sens de NULL, la logique à trois valeurs, IS NULL contre = NULL, NULL dans les calculs, les agrégats, NOT IN et ORDER BY, et les fonctions COALESCE et NULLIF.

  • 22 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • NULL : de quoi s'agit-il ?

    Voir la réponse

    Marqueur SQL de l'absence de valeur : la donnée est inconnue ou n'existe pas. Ce n'est ni zéro ni la chaîne vide.

    Un prix à 0 est un prix gratuit ; un prix absent est un prix qu'on ne connaît pas. Toute comparaison avec ce marqueur, = compris, rend « inconnu » : on le teste avec IS NULL.

  • La colonne ville de 5 clients contient : Lyon, Paris, NULL, Lyon, NULL. Que rend cette requête ?

    ```sql
    SELECT COUNT(*), COUNT(ville) FROM client;
    `

    • 5 et 3
    • 5 et 5
    • 3 et 3
    • 5 et 2
    Voir la réponse

    5 et 3

    COUNT(*) compte les lignes, quelles que soient leurs valeurs. COUNT(ville) ne compte que les valeurs présentes : Lyon, Paris, Lyon, doublons compris. Pour compter les villes différentes, c'est COUNT(DISTINCT ville), qui rend 2.

  • Une clause WHERE ne garde que les lignes dont la condition est … : les conditions fausses et inconnues sont écartées.

    Voir la réponse

    Une clause WHERE ne garde que les lignes dont la condition est vraie : les conditions fausses et inconnues sont écartées.

    C'est ce qui rend WHERE ville <> 'Lyon' muet sur les villes absentes : la condition y est inconnue, pas vraie.

  • Logique à trois valeurs : de quoi s'agit-il ?

    Voir la réponse

    Logique de SQL où une condition vaut vrai, faux ou inconnu ; une comparaison avec une valeur absente est inconnue.

    WHERE ne garde que les lignes dont la condition est vraie : faux et inconnu sont écartés tous les deux. D'où ville <> 'Lyon' qui ne rend pas les lignes à ville absente.

  • Cette requête rend 0 ligne alors que trois clients n'ont pas de téléphone. Quelle correction ?

    ```sql
    SELECT * FROM client WHERE telephone = NULL;
    `

    • Écrire WHERE telephone = '' pour chercher les téléphones vides
    • Écrire WHERE telephone IS NULL
    • Écrire WHERE telephone <> NULL, qui est la négation de l'égalité
    • Écrire WHERE telephone = 0 pour chercher les numéros nuls
    Voir la réponse

    Écrire WHERE telephone IS NULL

    Comparer à NULL avec = ou <> rend toujours inconnu, donc aucune ligne. Seul IS NULL teste l'absence. '' et 0 sont des valeurs, pas des valeurs absentes.