Archives de catégorie : SQL cours

Présentation de SQL

SQL est un langage standard pour accéder et manipuler des bases de données. SQL est utilisé pour obtenir et manipuler des données stockées dans des tables Db2. SQL se compose de plus de 100 instructions différentes qui peuvent être utilisées pour insérer, interroger, mettre à jour, supprimer et autoriser l’accès aux données Db2.

L’une des instructions SQL les plus couramment utilisées est SELECT. Cette instruction est utilisée pour interroger une table et produire des résultats sous forme de tableau.

Il existe un certain nombre de fonctions intégrées et définies par l’utilisateur disponibles dans SQL.


Que peut faire SQL ?

  1. Exécuter des requêtes sur une base de données
  2. Récupérer des données d’une base de données
  3. Insérer des enregistrements dans une base de données
  4. Mettre à jour des enregistrements dans une base de données
  5. Supprimer des enregistrements d’une base de données
  6. Créer de nouvelles bases de données
  7. Créer de nouvelles tables dans une base de données
  8. Créer des procédures stockées dans une base de données
  9. Créer des vues dans une base de données
  10. Définir des autorisations sur les tables, les procédures et les vues

Instructions SQL :

La plupart des actions que vous devez effectuer sur une base de données sont effectuées avec des instructions SQL.

L’instruction SQL suivante sélectionne tous les enregistrements de la table “ETUDIANTS” :

SELECT *
FROM ETUDIANTS;

Le symbole ‘*‘ indique que toutes les colonnes doivent être sélectionnées dans la table ETUDIANTS.

Remarque : les mots-clés SQL ne sont PAS sensibles à la casse : select est identique à SELECT.

Avons-nous besoin d’un point-virgule (;) à la fin de l’instruction SQL ?

Le point-virgule est le moyen standard de séparer chaque instruction SQL dans les systèmes de base de données qui permettent d’exécuter plusieurs instructions SQL dans le même appel au serveur.


Commandes SQL importantes répertoriées ci-dessous :

  1. SELECT – Extrait les données d’une base de données
  2. UPDATE – Met à jour les données d’une base de données
  3. DELETE – Supprime les données d’une base de données
  4. INSERT INTO – Insère de nouvelles données dans une base de données
  5. CREATE DATABASE – Crée une nouvelle base de données
  6. ALTER DATABASE – Modifie une base de données
  7. CREATE TABLE – Crée une nouvelle table
  8. ALTER TABLE – Modifie une table
  9. DROP TABLE – Supprime une table
  10. CREATE INDEX – Crée un index (clé de recherche)
  11. DROP INDEX – Supprime un index

Types de langage de requête structuré (SQL)

SQL (Structured Query Language) est un langage conçu spécifiquement pour communiquer avec les bases de données et est un outil puissant pour manipuler les données. C’est le langage de requête standard pour les systèmes de gestion de bases de données relationnelles (RDBMS).

Il s’agit d’un langage indépendant de la base de données qui vous permet d’interroger des données et d’effectuer des opérations CRUD (Create, Update, and Delete = créer, mettre à jour et supprimer). SQL est facile à apprendre. Les déclarations sont toutes composées de mots anglais descriptifs.

SQL se compose de trois sous-langages comme suit :

  1. DDL : langage de définition de données
  2. DML : langage de manipulation de données
  3. DCL : langage de contrôle des données
SQL : Schéma sur les types de langages
Schéma sur les types de langages

DDL (Data Definition Language) 

Il crée et maintient des structures de données physiques à l’aide des instructions suivantes :

  • Create : Création des objets.
  • Alter : Modification des caractéristiques des objets existants.
  • Drop : suppression des objets.

DML (Data Manipulation Language)

Il effectue les opérations suivantes :

  • Insert : Insérer
  • Update : Mise à jour
  • Delete : Effacer
  • Retrieval : Récupération (Simple, plusieurs colonnes, toutes les colonnes)
  • Sorting the retrieved data : Trier les données récupérées
  • Filtering the data : Filtrer les données
  • Concatenation : Enchaînement
  • Using alias : Utilisation d’alias
  • Removing duplicates : Suppression des doublons
  • Functions : Les fonctions
  • Grouping : Regroupement
  • Subquery : Sous-requête
  • Join : Jointure
  • Union : Union

DCL (Data Control Language) 

Il effectue les opérations suivantes :

  • Grant : Accorder
  • Revoke : Révoquer

La sécurité de la base de données est gérée via les instructions SQL GRANT et REVOKE.

Instruction SQL ALTER DATABASE

L’instruction SQL ALTER DATABASE est utilisée pour modifier la description d’une base de données.

La syntaxe de modification de la base de données est la suivante :

ALTER



DATABASE nom-database
BUFFERPOOL nom-bp

INDEXBP nom-bp
STOGROUP nom-stockgroup
CCSID ASCII/EBCDIC/UNICODE

Exemple 1:

Remplacez le pool de mémoire tampon par défaut des espaces table et des index de la base de données ABCDE par BP2.

ALTER

DATABASE ABCDE
BUFFERPOOL BP2
INDEXBP BP2;

Instruction SQL ALTER TABLESPACE

La syntaxe de modification de l’espace table (ALTER TABLESPACE) est la suivante :

ALTER   TABLESPACE [database-name.]tablespace-name 
        using-block 
        free-block 
        LOGGED | NOT LOGGED 
        TRACKMOD YES/NO 
        BUFFERPOOL bp-name 
        CCSID ASCII/EBCDIC/UNICODE 
        CLOSE YES/NO 
        COMPRESS YES/NO 
        LOCKMAX integer 
        LOCKSIZE ANY/TABLESPACE/TABLE/PAGE/ROW 
        MAXROWS integer 
        MAXPARTITIONS integer
using-block:




USING
VCAT catalog-name
STOGROUP stogroup-name
PRIQTY integer
SECQTY integer
ERASE YES/NO
free-block:
FREEPAGE integer
PCTFREE integer

Example 1:

Modifiez l’espace table DSN8S91D dans la base de données DSN8D91A. BP2 est le pool de mémoire tampon associé à l’espace table. PAGE est le niveau auquel le verrouillage doit avoir lieu.

ALTER

TABLESPACE DSN8D91A.DSN8S91D
BUFFERPOOL BP2
LOCKSIZE PAGE;
.

Instruction SQL ALTER VIEW

L’instruction ALTER VIEW régénère une vue existante en modifiant une colonne de type référence pour ajouter une portée. L’instruction ALTER VIEW active ou désactive également une vue à utiliser dans l’optimisation des requêtes.

Voici la syntaxe de modification de la vue :

ALTER VIEW nom_vue 
    ALTER colonne nom-colonne ADD SCOPE nom-table
          [ENABLE/DISABLE QUERY OPTIMIZATION] 

Vous utilisez la commande ALTER VIEW pour régénérer une vue non valide après avoir modifié l’une des tables de base afin de vous assurer que la vue reste valide.

Instruction SQL DROP

L’instruction DROP supprime un objet du serveur actuel.

L’instruction DROP DATABASE est utilisée pour supprimer un groupe de stockage existant, une base de données, un tablespace, une table, un index, une vue, un alias, un synonyme.

Database :

Chaque fois qu’une base de données est supprimée, tous ses tablespaces, tables, espaces d’index et index sont également supprimés.

Tablespace :

Chaque fois qu’un tablespace est supprimé, toutes les tables du tablespace sont également supprimées.

Table:

Chaque fois qu’une table est supprimée, toutes les contraintes référentielles dans lesquelles la table est parente ou dépendante, ainsi que tous les synonymes, vues et index définis sur la table sont également supprimés. Si l’espace table de la table a été implicitement créé, il est également supprimé. L’alias n’est pas supprimé.

DROP STOGROUP nom-stogroup
     DATABASE nom-database
     TABLESPACE nom-table-space
     TABLE nom-table
     INDEX nom-index
     VIEW nom-view
     ALIAS nom-alias
     SYNONYM nom-synonym

Exemple 1:

L’instruction DROP DATABASE est utilisée pour supprimer une base de données SQL existante.

Soyez prudent lorsque vous supprimez une base de données. La suppression d’une base de données entraînera la perte de toutes les informations stockées dans la base de données.

L’instruction SQL suivante supprime la base de données existante “IBM_DB” :

DROP DATABASE IBM_DB;

Une fois qu’une base de données est supprimée, vous pouvez la vérifier dans la liste des bases de données avec la commande SQL suivante : SHOW DATABASES.

Exemple 2 :

Voyons comment déposer une table dans une base de données.

L’instruction SQL DROP TABLE suivante pour supprimer la table Table_Etudiants :

DROP TABLE Table_Etudiants 

La plupart du temps, les développeurs n’ont pas accès pour exécuter les instructions SQL DROP. Seul l’administrateur a le privilège d’utiliser l’instruction SQL DROP.

Instruction SQL SELECT DISTINCT

SQL utilise DISTINCT pour supprimer les lignes en double du jeu de résultats.

Syntaxe:

SELECT DISTINCT colonne1, colonne2, ... 
  FROM nom_table ;

Base de données DB2 :

Vous trouverez ci-dessous une sélection de la table “Produit” de la base de données DB2.

ID-ProduitNom-ProduitCatégoriePrixStockValeu-Totale
7001SourisAccessoires75,00
7002Disque dur65,00201 300
7003ClavierAccessoires36.00331 118,00
7004RAMComposants23.5016376,00
7005Rouevélos1 200
7006STYLO7.451074,50
7007ClavierAccessoires40.00331 118,00
7008RAMComposants23.5016376,00

Exemple:

Pour obtenir le Nom-Produit unique, vous devez utiliser la requête suivante :

SELECT DISTINCT Nom-Produit FROM Produit ;

L’instruction SQL ci-dessus répertorie le nombre de Nom-Produit différents (distincts) dans la table “Produit”.

Résultat:
ID-ProduitNom-ProduitCatégoriePrixStockValeur-Totale
7001SourisAccessoires75,00
7002Disque dur65,00201 300
7003ClavierAccessoires36.00331 118,00
7004RAMComposants23.5016376,00
7005Rouevélos1 200
7006STYLO7.451074,50

Remarque : Si vous avez plusieurs noms de colonne répertoriés après le mot clé DISTINCT, le mot clé DISTINCT est appliqué à toutes les colonnes. Cela signifie que la requête utilisera la combinaison de valeurs dans toutes les colonnes pour évaluer la distinction.

La Clause SQL WHERE

La clause WHERE est utilisée pour filtrer les enregistrements.

Récupérer uniquement les données souhaitées implique de spécifier des critères de recherche, également appelés condition de filtre. Dans une instruction SELECT, les données sont filtrées en spécifiant des critères de recherche dans la clause WHERE.

Syntaxe:

SELECT colonne1, colonne2, ...
  FROM nom_table 
 WHERE condition;

La clause WHERE n’est pas seulement utilisée dans l’instruction SELECT, elle est également utilisée dans l’instruction UPDATE, DELETE.

Base de données DB2 :

Vous trouverez ci-dessous une sélection de la table “Product” de la base de données DB2.

ID-ProduitNom-ProduitCategoriePrixStockValeur-Totale
7001SourisAccessoires75,00
7002Disque dur65,00201 300
7003ClavierAccessoires36.00331 118,00
7004RAMComposants23.5016376,00
7005Rouevélos1 200
7006STYLO7.451074,50
7007Lecteur CDAccessoires75,00
7008MicroAccessoires75,00

Exemple:

L’instruction SQL ci-dessous récupère deux colonnes de la table “Product”, mais au lieu de renvoyer toutes les lignes, seules les lignes avec une valeur SRP de 75,00 sont renvoyées.

SELECT 
ID-Produit, Nom-Produit
  FROM Produit
 WHERE Prix = 75.00;
Résultat:
ID-ProduitNom-Produit
7001Souris
7007Lecteur CD
7008Micro

Champs numériques vs champs de texte

SQL requiert des guillemets simples autour des valeurs de texte (la plupart des systèmes de base de données autorisent également les guillemets doubles). Cependant, les champs numériques ne doivent pas être entourés de guillemets.

SELECT ID-Produit, Nom-Produit, Prix
  FROM Produit
 WHERE Categorie= 'Accessories';
Résultat:
ID-ProduitNom-ProduitPrix
7001Souris75,00
7003Clavier36.00
7007Lecteur CD75,00
7008Micro75,00

Opérateurs de la clause WHERE :

SQL prend en charge toute une gamme d’opérateurs conditionnels dans la clause WHERE, comme indiqué.

OpérateurLa description
=Égalité
<>Non-égalité (diffèrent)
!=Non-égalité (diffèrent)
<Inférieur à
<=Inférieur ou égal à
!<Pas moins que
>Supérieur à
>=Supérieur ou égal à
!>Pas plus grand que
BETWEENEntre deux valeurs spécifiées, y compris les valeurs de début et de fin spécifiées
IS NULLEst une valeur NULL

Exemple 1:

Pour répertorier tous les produits qui coûtent moins de 10 €

SELECT ID-Produit, Nom-Produit 
  FROM Produit 
 WHERE Prix  < 10 ;
Résultat:
ID-ProduitNom-Produit
7006STYLO

Exemple 2 :

Pour répertorier tous les produits de la catégorie autres que “Accessoires”

SELECT ID-Produit, Nom-Produit, Prix 
  FROM Produit 
 WHERE Categorie <> 'Accessoires' ;
Résultat:
ID-ProduitNom-ProduitPrix
7002Disque dur65,00
7004RAM23.50
7005Roue1 200
7006STYLO7.45

Exemple 3 :

Pour récupérer tous les produits dont le prix est compris entre 5 € et 10 €, y compris les valeurs de début et de fin spécifiées.

SELECT ID-Produit, Nom-Produit
  FROM Produit
 WHERE Prix BETWEEN 5 AND 25;
Résultat:
ID-ProduitNom-Produit
7004RAM
7006STYLO

Exemple 4 :

Pour renvoyer une liste de tous les produits qui n’ont pas de catégorie (c’est-à-dire une valeur nulle)

SELECT ID-Produit, Nom-Produit, Prix
  FROM Produit
 WHERE Categorie IS NULL;
Résultat:
ID-ProduitNom-ProduitPrix
7002Disque dur65,00
7006STYLO7.45

Opérateurs SQL AND, OR et NOT

Pour un meilleur contrôle des filtres, DB2 SQL vous permet de spécifier plusieurs clauses WHERE.

Opérateur : un mot-clé spécial utilisé pour joindre ou modifier des clauses dans une clause WHERE. Ceci est également connu sous le nom d’opérateurs logiques.

Les opérateurs AND (et) et OR (ou) sont utilisés pour filtrer les enregistrements en fonction de plusieurs conditions.

  1. L’opérateur AND affiche un enregistrement si toutes les conditions séparées par AND sont TRUE (VRAIE).
  2. L’opérateur OR affiche un enregistrement si l’une des conditions séparées par OR est TRUE (VRAIE).

L’opérateur NOT affiche un enregistrement si la ou les conditions sont NOT TRUE (FAUX).

Syntaxe:

SELECT colonne1, colonne2, ... 
  FROM nom_table 
 WHERE condition1 AND/OR condition2 AND/OR condition3 ...;

Base de données DB2 :

Vous trouverez ci-dessous une sélection de la table “Product” de la base de données DB2.

ID-ProduitNom -ProduitCategoriePrixStockValeur-Totale
7001SourisAccessoires75,00
7002Disque dur65,00201 300
7003ClavierAccessoires36.00331 118,00
7004RAMComposants23.5016376,00
7005Rouevélos1 200
7006Stylo7.451074,50
7007Tapis de sourisAccessoires5,00

Exemple 1 : Utilisation de l’opérateur AND :

Pour filtrer sur plusieurs colonnes, nous utilisons l’opérateur AND pour ajouter des conditions à notre clause WHERE. Il s’agit d’un mot clé utilisé dans une clause WHERE pour spécifier que seules les lignes correspondant à toutes les conditions spécifiées doivent être extraites. “AND” indique au DB2 de renvoyer uniquement les lignes qui remplissent toutes les conditions spécifiées.

SELECT ID-Produit, Nom-Produit, Prix 
  FROM Produit 
 WHERE Categorie = 'Accessoires' AND Prix > 10 ;

Cette instruction SQL récupère les ProductId, ProductName et Price pour tous les produits de la catégorie ‘Accessoires’ et le prix est supérieur à 10.

La clause WHERE de cette instruction SELECT est composée de deux conditions et le mot-clé AND est utilisé pour les joindre.

Résultat:
ID-ProduitNom du produitPrix
7001Souris75,00
7003Clavier36.00

Exemple 2 : Utilisation de l’opérateur OR

L’opérateur OR est exactement le contraire de AND.

L’opérateur OR demande au DB2 d’extraire les lignes qui correspondent à une condition ou aux deux.

SELECT Produit, Nom-Produit, Prix 
  FROM Produit 
 WHERE Categorie = 'Accessoires' OR Prix > 10 ;

Cette instruction SQL récupère ProductId, ProductName et Price pour tous les produits de Category = ‘Accessories’ ou Price > 10

Résultat:
ID-ProduitNom-ProduitPrix
7001Souris75,00
7003Clavier36.00
7007Tapis de souris5,00

Ordre d’évaluation :

Les clauses WHERE peuvent contenir n’importe quel nombre d’opérateurs AND et OR.

SQL traite les opérateurs AND avant les opérateurs OR.

Exemple 3 :

Pour obtenir une liste de tous les ID-Produit pour la catégorie ‘Accessoires’ et ‘Composants’ avec un prix de 10 ou plus.

SELECT ID-Produit
    FROM Produit
    WHERE (Categorie = 'Accessories' OR Categorie = 'Composants') AND Prix >= 10;

Si vous n’utilisez pas de parenthèses, vous n’obtiendrez pas la sortie souhaitée.

Chaque fois que vous écrivez des clauses WHERE qui utilisent à la fois les opérateurs AND et OR, utilisez des parenthèses pour regrouper explicitement les opérateurs.

Résultat:
ID-Produit
7001
7003
7004

Exemple 4 : Utilisation de l’opérateur NOT

L’instruction SQL suivante sélectionne tous les champs de “Produit” où Catégorie n’est PAS “Accessoires”.

SELECT * FROM Produit
 WHERE NOT Categorie = 'Accessoires';
Résultat:
ID-ProduitNom-ProduitCategoriePrixStockValeur-Totale
7002Disque dur65,00201 300
7004RAMComposants23.5016376,00
7005Rouevélos1 200
7006Stylo7.451074,50

Instruction SQL INSERT INTO

La commande INSERT INTO ajoute de nouvelles lignes à une table.

Il existe deux manières d’écrire l’instruction INSERT INTO.

La première méthode spécifie à la fois les noms de colonne et les valeurs à insérer. La syntaxe est,

INSERT INTO nom_table (colonne1, colonne2, colonne3, ...)  
       VALUES (valeur1, valeur2, valeur3, ...);

Deuxième méthode, si vous ajoutez des valeurs pour toutes les colonnes de la table, vous n’avez pas besoin de spécifier les noms de colonne dans la requête SQL. Cependant, assurez-vous que l’ordre des valeurs est dans le même ordre que celui des colonnes du tableau.

La syntaxe INSERT INTO serait la suivante :

INSERT INTO nom_table 
       VALUES (valeur1, valeur2, valeur3, ...);

Exemple 1:

La table TB_DEPT contient les colonnes suivantes :

  • DEPT_NO
  • DEPT_NOM
  • DEPT_MGR_NO
  • DEPT_ADMR.

Insérez un nouveau département avec les spécifications suivantes dans la table TB_DEPT.

  • Le numéro de département (DEPT_NO) est ‘A31’
  • Le nom du service (DEPT_NOM) est “ARCHITECTURE”
  • Géré par (DEPT_MGR_NO) une personne avec le numéro ‘00123’
  • Relève du département (DEPT_ADMR) ‘A01’.
INSERT INTO TB_DEPT
    VALUES (‘A31’
    , ‘ARCHITECTURE’
    , ‘00123’
    , ‘A01’);

Dans la requête SQL ci-dessus, il n’y a pas de nom de colonne car vous ajoutez des valeurs pour toutes les colonnes de la table.

Comme nous l’avons dit précédemment, si vous ajoutez des valeurs pour toutes les colonnes de la table, vous n’avez pas besoin de spécifier les noms de colonne dans la requête SQL. Cependant, assurez-vous que l’ordre des valeurs est dans le même ordre que celui des colonnes du tableau.

Résultat:

Vous trouverez ci-dessous une sélection de la table “TB_DEPT” dans la base de données DB2.

DEPT_NODEPT_NOMDEPT_MGR_NODEPT_ADMR
A31ARCHITECTURE00123A01

Exemple 2 :

Pour insérer un nouveau service dans la table TB_DEPT comme dans l’exemple 1, mais sans numéro de responsable au nouveau service.

INSERT INTO TB_DEPT (DEPT_NO
      , DEPT_NAME
      , DEPT_ADMR )
    VALUES (‘A31’
      , ‘ARCHITECTURE’
      , ‘A01’);

Dans cet exemple, vous devez mentionner la colonne. car vous n’insérez les données que dans des colonnes spécifiques.

Résultat:

Vous trouverez ci-dessous une sélection de la table “TB_DEPT” dans la base de données DB2.

DEPT_NODEPT_NOMDEPT_MGR_NODEPT_ADMR
A31ARCHITECTUREA01

Valeur NULL insérée dans la table “TB_DEPT” pour la colonne DEPT_MGR_NO