Le SQL !

Sommaire

  • Définition
  • Langage de Définition des Données
  • Langage de Manipulation des Données

Structured Query Language

Créé dans les années 70 puis normalisé au cours des années 80, le langage SQL est le principal langage utilisé pour la création et la manipulation des données d'une base de données relationnelle

Structured Query Language

  • Le langage SQL est interprété par le SGBD afin d'appliquer une demande d'un utilisateur
  • On parle de requêtes SQL !
  • Ce langage permet :
    • La création et l'altération de la structure d'une base de données (LDD, Langage de Définition des Données)
    • La manipulation (lecture, écriture, suppression) des données d'une base de données (LMD, Langage de Manipulation des Données)

LDD !

Structurer une base de données !

Création d'une table

-- Création d'une table 'utilisateur' 

CREATE TABLE utilisateur
(
    id INT PRIMARY KEY NOT NULL, -- identifiant des utilisateurs (clé primaire)
    nom VARCHAR(100), -- le nom (chaine de 100 caractères maximum) 
    prenom VARCHAR(100), -- le prénom (chaine de 100 caractères maximum)
    email VARCHAR(255), -- email (chaine de 255 caractères maximum)
    date_naissance DATE, -- la date de naissance (type date)
    pays VARCHAR(255), -- le pays (chaine de 255 caractères maximum)
    ville VARCHAR(255), -- la ville (chaine de 255 caractères maximum)
    code_postal VARCHAR(5), -- le cp (chaine de 5 caractères maximum)
    nombre_achat INT -- nombre achats (nombre entier)
)

-- On remarque l'utilisation de PRIMARY KEY pour l'id 
-- qui veut dire que l'id sera la "clé primaire" de la table
-- utilisateurs : c'est le champ qui identifie un enregistrement
-- la clé primaire est forcément unique (il ne peut pas y avoir
-- plusieurs utilisateurs qui auraient l'id 3 par exemple)

Modification d'une table

-- Ajout d'un champ 'adresse_rue' sur la table 'utilisateur' 

ALTER TABLE utilisateur
ADD adresse_rue VARCHAR(255) -- chaine de 255 caractères maximum

-- Suppression du champ nombre_achat sur la table 'utilisateur'

ALTER TABLE utilisateur
DROP nombre_achat

-- Modification du champ 'code_postal' sur la table 'utilisateur'

ALTER TABLE utilisateur
MODIFY code_postal INT

-- Modification du nom du champ 'code_postal' sur la table 'utilisateur'
-- en 'cp'

ALTER TABLE utilisateur
CHANGE code_postal cp INT

Suppression d'une table

-- Suppression de la table 'utilisateur'

DROP TABLE utilisateur

-- Et oui, c'est tout.

LMD !

Langage de manipulation des données

Insertion des données

-- Insertion de 4 enregistrements dans la table 'client'

INSERT INTO client (prenom, nom, ville, age) 
 VALUES
 ('Rébecca', 'Armand', 'Saint-Didier-des-Bois', 24), 
 ('Aimée', 'Hebert', 'Marigny-le-Châtel', 36),
 ('Marielle', 'Ribeiro', 'Maillères', 27),
 ('Hilaire', 'Savary', 'Conie-Molitard', 58);

-- Remarques :
-- Pour la requête INSERT INTO, on spécifie quelle table (client)
-- puis entre parenthèses les champs que l'on souhaite affecter
-- Ensuite on spécifie les valeurs à insérer (VALUES)
-- Chaque enregistrement est contenu dans des parenthèses et est 
-- séparé des autres par une virgule
-- Les valeurs à insérer doivent être écrites dans l'ordre dans
-- lequel les champs ont été désignés !
-- On peut aussi n'insérer qu'une seule ligne (enregistrement) :


INSERT INTO client (prenom, nom, ville, age) 
 VALUES
 ('Rébecca', 'Armand', 'Saint-Didier-des-Bois', 24);

Insertion des données

-- ECRITURE ALTERNATIVE (ne fonctionne pas sur tous les SGBDR
-- marche sur MySQL)

INSERT INTO utilisateur SET 
    nom = 'Durand',
    prenom = 'Jérome',
    code_postal = '13011';
        
-- Remarques :
-- Pour la requête INSERT INTO, on spécifie quelle table (client)
-- puis il suffit de spécifier les champs et leur valeur

-- Cette syntaxe ressemble grandement à la syntaxe de mise à jour
-- de la requête UPDATE TABLE

Mise à jour des données

-- Mise à jour de plusieurs champs sur un enregistrement de la table 'client'

UPDATE client
SET rue = '49 Rue Ameline', -- On modifie le champ 'rue'
  ville = 'Saint-Eustache-la-Forêt', -- On modifie le champ 'ville'
  code_postal = '76210' -- On modifie le champ 'code_postal'
WHERE id = 2 -- sur l'enregistrement qui a l'identifiant 2

-- Remarques : pour une requête UPDATE, on spécifie le nom de la table 
-- Puis on spécifie les changements (SET) en nommant les champs à
-- modifier ainsi que les nouvelles valeurs à prendre en compte
-- Enfin, on peut décider de spécifier sur quelle(s) ligne(s) on applique la mise à jour
-- grâce au mot clé WHERE puis une condition

-- Mise à jour de toutes les lignes d'une table

UPDATE produit
SET prix = 120

-- Mise à jour de toutes les lignes de la table 'produit'
-- On change le prix de tous les produits à 120

Suppression de données

-- Suppression d'une ligne dans la table 'utilisateur'

DELETE FROM utilisateur
WHERE id = 1

-- Remarques : pour la requête DELETE FROM, on spécifie la table dans laquelle
-- on souhaite supprimer des données
-- On peut soumettre la requête à une condition (WHERE) afin de spécifier
-- les lignes à supprimer

-- Suppression de tous les utilisateurs inscrits avant le 10/04/2012

DELETE FROM utilisateur
WHERE date_inscription < '2012-04-10'


-- Suppression de tous les utilisateurs

DELETE FROM utilisateur

Sélection des données

-- On veut afficher les villes de tous les clients

SELECT ville FROM client 

-- On veut sélectionner le prénom et le nom de tous les clients

SELECT prenom, nom FROM client

-- On veut sélectionner toutes les données de tous les clients

SELECT * FROM client

-- Ensemble des possibilités de la requête SELECT

SELECT *
FROM table
WHERE condition
GROUP BY expression
HAVING condition
{ UNION | INTERSECT | EXCEPT }
ORDER BY expression
LIMIT count
OFFSET start

Sélection des données

-- On veut afficher la ville du client n°220

SELECT ville FROM client WHERE id = 220

-- On veut sélectionner le prénom et le nom de tous les clients
-- de la ville de Marseille

SELECT prenom, nom FROM client
WHERE ville = 'Marseille'

-- On veut sélectionner toutes les données de tous les clients
-- qui ont moins de 30 ans

SELECT * FROM client
WHERE age < 30

-- Ensemble des possibilités de la requête SELECT
SELECT *
FROM table
WHERE condition
GROUP BY expression
HAVING condition
{ UNION | INTERSECT | EXCEPT }
ORDER BY expression
LIMIT count
OFFSET start

Etudiez !

  • Les jointures
  • Les clauses WHERE
  • Les fonctions SQL
  • Et tout le reste ! :-)

Ressources !

Manuel Officiel MySQL

https://dev.mysql.com/doc/refman/5.7/en/

Cours super cool sur les requête SQL 

https://sql.sh/cours

Vous, quand vous faites du SQL

Le langage SQL

By Lior CHAMLA

Le langage SQL

Petite introduction au langage SQL

  • 1,372