Qu'est-ce que SQL ?

Langage standard des bases de données relationnelles, qui sert à définir les tables, à rechercher, insérer, mettre à jour et supprimer des données, et à contrôler les privilèges. Il est normalisé par l'ISO/IEC (au Japon aussi sous forme de norme JIS). Ses instructions comprennent SELECT, INSERT, UPDATE, DELETE, CREATE TABLE et GRANT.

Nom japonais: SQL

« SQL » apparaît dans 15 questions d'entraînement réparties sur 3 thèmes, dont Bases des bases de données, Bases de la sécurité de l'information, Flot de conception de circuits intégrés et EDA.

Domaine: Bases des bases de données

Types d'instructions SQL

Les instructions SQL se répartissent en 3 grands groupes selon leur rôle. Le langage de définition de données (DDL), comme CREATE, ALTER et DROP, définit des structures comme les tables, les vues et les index. Le langage de manipulation de données (DML), comme SELECT, INSERT, UPDATE et DELETE, traite les données des tables. Le langage de contrôle de données (DCL), comme GRANT et REVOKE, contrôle les privilèges. COMMIT, qui rend une transaction définitive, et ROLLBACK, qui l'annule, sont tantôt rangées dans le DCL, tantôt traitées à part comme instructions de contrôle des transactions.

Clauses de l'instruction SELECT et ordre de traitement

Une instruction SELECT s'écrit en énumérant des clauses, comme SELECT colonnes FROM table WHERE condition GROUP BY colonnes HAVING condition ORDER BY colonnes. Contrairement à l'ordre d'écriture, il est plus facile de comprendre le traitement dans l'ordre FROM (choisir et joindre les tables), WHERE (sélectionner les lignes), GROUP BY (former les groupes), HAVING (sélectionner les groupes), SELECT (extraire les colonnes et calculer les fonctions d'agrégation) et ORDER BY (trier). C'est pourquoi on ne peut pas écrire de fonctions d'agrégation dans WHERE et pourquoi les conditions sur les groupes se placent dans HAVING.

Un langage déclaratif, et le traitement de NULL

SQL est un langage déclaratif dans lequel on écrit le résultat voulu, et l'optimiseur du SGBD décide des étapes pour l'obtenir. Il faut faire attention à NULL, qui représente une valeur inconnue. Une comparaison avec NULL n'est ni vraie ni fausse (inconnue) ; on la teste donc avec IS NULL plutôt qu'avec = NULL. Les fonctions d'agrégation comme SUM et AVG ignorent NULL ; COUNT(*) compte les lignes, tandis que COUNT(colonne) compte les lignes où cette colonne n'est pas NULL.

S'entraîner : questions sur SQL

Les instructions SQL se répartissent en langage de définition de données (DDL), langage de manipulation de données (DML) et langage de contrôle de données (DCL). Laquelle relève du DDL ?

  1. AUPDATE Employe SET Service = 'Développement' WHERE NumEmploye = 5
  2. BCREATE TABLE Service (IdService INTEGER PRIMARY KEY, NomService CHAR(10))
  3. CGRANT SELECT ON Employe TO tanaka
Afficher la réponse et l'explication

Réponse : B. CREATE TABLE Service (IdService INTEGER PRIMARY KEY, NomService CHAR(10))

Les instructions du DDL (Data Definition Language) définissent la structure d'une base de données, comme les tables, les vues et les index ; ce sont CREATE, ALTER et DROP. Les instructions du DML (Data Manipulation Language) traitent les données contenues dans les tables ; ce sont SELECT, INSERT, UPDATE et DELETE. Les instructions du DCL (Data Control Language) contrôlent notamment les privilèges ; ce sont GRANT, qui accorde des privilèges à un utilisateur, et REVOKE, qui les lui retire. COMMIT, qui rend une transaction définitive, et ROLLBACK, qui l'annule, sont tantôt rangées dans le DCL, tantôt traitées à part comme instructions de contrôle des transactions. Parmi les choix, CREATE TABLE, qui crée une table, relève du DDL.

Quel est le résultat de l'exécution en SQL de DELETE FROM Employe sans clause WHERE ?

  1. AToutes les lignes de la table Employe sont supprimées, et il reste une table vide
  2. BLa table elle-même est supprimée, et sa définition disparaît aussi
  3. CComme il n'y a pas de clause WHERE, une erreur se produit et rien n'est supprimé
Afficher la réponse et l'explication

Réponse : A. Toutes les lignes de la table Employe sont supprimées, et il reste une table vide

DELETE est une instruction du DML qui supprime des lignes d'une table. Avec une condition dans une clause WHERE, seules les lignes qui la satisfont sont supprimées ; si la clause WHERE est omise, toutes les lignes sont supprimées. Même après que DELETE a supprimé toutes les lignes, la définition de la table (noms et types des colonnes, contraintes) subsiste, et l'on peut de nouveau ajouter des lignes avec INSERT. Supprimer la table elle-même, définition comprise, se fait avec l'instruction DDL DROP TABLE Employe. Il en va de même pour UPDATE : oublier la clause WHERE réécrit toutes les lignes ; il est donc important de vérifier la condition avant l'exécution. À l'intérieur d'une transaction, la modification peut être annulée par ROLLBACK avant le COMMIT.

Questions fréquentes

Quelle est la différence entre les clauses WHERE et HAVING en SQL ?

La clause WHERE est une condition sur les lignes individuelles avant le regroupement, et l'on ne peut pas y écrire de fonctions d'agrégation. La clause HAVING est une condition sur les groupes formés par GROUP BY, et elle peut utiliser des fonctions d'agrégation, comme dans HAVING SUM(Montant) >= 1000.

Comment trouver en SQL les lignes qui contiennent NULL ?

On écrit WHERE colonne IS NULL. WHERE colonne = NULL ne sélectionne aucune ligne, car une comparaison avec NULL n'est jamais vraie. Les lignes non NULL se sélectionnent avec IS NOT NULL.

« SQL » dans les explications

Questions mentionnant « SQL » (15)

  1. Les instructions SQL se répartissent en langage de définition de données (DDL), langage de manipulation de données (DML) et langage de contrôle de données (DCL). Laquelle relève du DDL ?
  2. Quel est le résultat de l'exécution en SQL de DELETE FROM Employe sans clause WHERE ?
  3. À partir d'une table Employe(NumEmploye, Service, Salaire), on veut obtenir les services dont le salaire moyen est supérieur ou égal à 300, ainsi que ce salaire moyen. Quelle instruction SQL est correcte ?
  4. À partir d'une table Client(IdClient, Nom) et d'une table Commande(IdCommande, IdClient, Montant), on veut obtenir le nom des clients qui n'ont jamais passé de commande. Quelle instruction SQL est correcte ?
  5. Parmi les niveaux d'isolation définis par la norme SQL, quelle combinaison indique correctement les phénomènes qui peuvent se produire avec READ COMMITTED ?
  6. Quel langage de description matérielle est principalement utilisé en conception RTL ?
  7. Dans une application web, saisir une chaîne comme ' OR '1'='1 dans le champ du mot de passe de l'écran de connexion permet de se connecter sans connaître le mot de passe. Comment s'appelle cette attaque ?
  8. Comme contre-mesure à l'injection SQL, pourquoi les requêtes préparées avec paramètres substituables (requêtes paramétrées) sont-elles considérées comme plus fondamentales que la suppression des caractères dangereux de la saisie ?
  9. Dans la terminologie des bases de données relationnelles, quel terme correspond à une ligne d'une table (relation) ?
  10. Dans une table d'une base de données relationnelle, quelle condition la colonne (ou l'ensemble de colonnes) désignée comme clé primaire doit-elle remplir ?
  11. Une table d'inscriptions Inscription(NumEtudiant, NumCours, Note) enregistre quel étudiant a suivi quel cours et avec quelle note. Un étudiant suit plusieurs cours, et un cours est suivi par plusieurs étudiants. Si un même étudiant ne s'inscrit jamais 2 fois au même cours, quelle clé primaire convient à cette table ?
  12. La colonne Points d'une table Examen contient 4 valeurs : 80, NULL, 70, 90 (NULL signifie que la personne n'a pas passé l'examen). Quel est le résultat de SELECT AVG(Points) FROM Examen ?
  13. La quantité en stock d'un produit dans une table Stock vaut 10. La transaction T1 lit la quantité en stock et réécrit cette valeur moins 3, et T2 lit la quantité en stock et réécrit cette valeur moins 5. Si elles s'exécutent sans poser de verrou, dans l'ordre lecture de T1, lecture de T2, écriture de T1, écriture de T2, quelle est la quantité en stock finale ?
  14. Parmi les problèmes qui surviennent lorsque des transactions s'exécutent simultanément, quelle description d'une lecture sale (dirty read) est correcte ?
  15. La transaction T1 a exécuté SELECT COUNT(*) FROM Commande WHERE Montant >= 1000 et a obtenu 8. Juste après, T2 a inséré une ligne de commande d'un montant de 2000 et l'a validée. Lorsque T1 a exécuté de nouveau la même instruction SELECT, elle a obtenu 9. De quel phénomène s'agit-il ?

Termes associés

Transaction Niveau d'isolation Clé primaire Injection SQL Base de données relationnelle Vue (view) Index (index de base de données) Langage de description matérielle RTL (niveau transfert de registres) Verilog

Retour au glossaire