http://sql.sh/ressources/cours-sql-sh-.pdf
La structure de base d’une interrogation est formée des 3 clauses suivantes :
SELECT liste champ(s)
FROM liste table(s)
WHERE condition(s) ;
• La clause SELECT désigne la liste des champs devant figurer dans le résultat. On parle également des champs projetés.
• La clause FROM indique le nom de la ou des table(s) impliquée(s) dans l’interrogation.
• La clause WHERE correspond aux conditions de sélection des champs.
• La requête se termine par un point virgule.
• Chaque nom de champ ou de table est séparé par une virgule.
• Les "termes" SQL s'écrivent en majuscule
• Les noms des tables s'écrivent en majuscule
• Les noms des champs : 1ére lettre en majuscule, le reste en minuscule. Attention, un nom ne comprend pas de caractères spéciaux, pas d'accent et pas d'espace. Seul le caractère _ est autorisé
• Le passage à la ligne dans une requête permet de différencier les opérations
SQL SELECT|bleu|closed
L’utilisation la plus courante de SQL consiste à lire des données issues de la base de données. Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements dans un tableau de résultat. Cette commande peut sélectionner une ou plusieurs colonnes d’une table.
SELECT nom_du_champ FROM nom_du_tableau
Cette requête va sélectionner (SELECT) le champ « nom_du_champ » provenant (FROM) du tableau appelé « nom_du_tableau ».
• La liste des champs peut comporter des noms de champs, des fonctions SQL prédéfinies, des expressions arithmétiques (/,*,-,+).
• DISTINCT (ou UNIQUE) signifie que les enregistrements en double dans le résultat sont supprimés. Par défaut, tous les enregistrements même en double sont renvoyés.
• Le symbole * à la place de la liste des champs sélectionne tous les champs de la table.
SQL WHERE|closed
La commande WHERE dans une requête SQL permet d’extraire les lignes d’une base de données qui respectent une condition. Cela permet d’obtenir uniquement les informations désirées.
Syntaxe
SELECT nom_colonnes FROM nom_table WHERE condition
La clause WHERE permet de sélectionner des enregistrements de la table selon des critères bien précis. Cette sélection s'applique sur chacun des enregistrements de la ou des tables.
Le but est de filtrer un certain nombre d'enregistrement à partir de la valeur d'un ou de plusieurs attribut des tables. Dans cette clause, on peut utiliser des prédicats :
• Le prédicat de comparaison : =, <, >, <>, <=, >=
• Le prédicat BETWEEN (ou NOT BETWEEN):
o Attention, pour comparer un champs de type chaîne de caractère à une valeur, il faut encadrer celle-ci par des apostrophes (apostrophes double sous Access)
o Pour une valeur entière, la valeur est donnée sans encadrement
o Le séparateur décimal est le point .
o Une date est encadrée d'une apostrophe dans le format de la base (français ou américain). Sous Access, le caractère d'encadrement est le #
SQL DISTINCT|closed
L’utilisation de la commande SELECT en SQL permet de lire toutes les données d’une ou plusieurs colonnes. Cette commande peut potentiellement afficher des lignes en doubles. Pour éviter des redondances dans les résultats il faut simplement ajouter DISTINCT après le mot SELECT.
SELECT DISTINCT ma_colonne
FROM nom_du_tableau
Cette requête sélectionne le champ « ma_colonne » de la table « nom_du_tableau » en évitant de retourner des doublons.
SQL ORDER BY|closed
La commande ORDER BY permet de trier les lignes dans un résultat d’une requête SQL. Il est possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant ou descendant.
Une requête où l’ont souhaite filtrer l’ordre des résultats utilise la commande ORDER BY de la sorte :
SELECT colonne1, colonne2
FROM table
ORDER BY colonne1
SQL BETWEEN
L’opérateur BETWEEN est utilisé dans une requête SQL pour sélectionner un intervalle de données dans une requête utilisant WHERE. L’intervalle peut être constitué de chaînes de caractères, de nombres ou de dates. L’exemple le plus concret consiste par exemple à récupérer uniquement les enregistrements entre 2 dates définies.
L’utilisation de la commande BETWEEN s’effectue de la manière suivante :
SELECT *
FROM table
WHERE nom_colonne BETWEEN 'valeur1' AND 'valeur2'
La requête suivante retournera toutes les lignes dont la valeur de la colonne « nom_colonne » sera comprise entre valeur1 et valeur2.
SQL LIKE
L’opérateur LIKE est utilisé dans la clause WHERE des requêtes SQL. Ce mot-clé permet d’effectuer une recherche sur un modèle particulier. Il est par exemple possible de rechercher les enregistrements dont la valeur d’une colonne commence par telle ou telle lettre.
Les modèles de recherches sont multiple.La syntaxe à utiliser pour utiliser l’opérateur LIKE est la suivante :
SELECT *
FROM table
WHERE colonne LIKE modele
Dans cet exemple le « modèle » n’a pas été défini, mais il ressemble très généralement à l’un des exemples suivants:
LIKE ‘%a’ : le caractère « % » est un caractère joker qui remplace tous les autres caractères. Ainsi, ce modèle permet de rechercher toutes les chaines de caractère qui se termine par un « a ».
SQL IS NULL / IS NOT NULL
Dans le langage SQL, l’opérateur IS permet de filtrer les résultats qui contiennent la valeur NULL. Cet opérateur est indispensable car la valeur NULL est une valeur inconnue et ne peut par conséquent pas être filtrée par les opérateurs de comparaison (cf. égal, inférieur, supérieur ou différent).
Pour filtrer les résultats où les champs d’une colonne sont à NULL il convient d’utiliser la syntaxe suivante:
SELECT *
FROM `table`
WHERE nom_colonne IS NULL
A l’inverse, pour filtrer les résultats et obtenir uniquement les enregistrements qui ne sont pas null, il convient d’utiliser la syntaxe suivante:
SELECT *
FROM `table`
WHERE nom_colonne IS NOT NULL
SQL HAVING
La condition HAVING en SQL est presque similaire à WHERE à la seule différence que HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(), MIN() ou MAX().
L’utilisation de HAVING s’utilise de la manière suivante :
SELECT colonne1, SUM(colonne2)
FROM nom_table
GROUP BY colonne1
HAVING fonction(colonne2) operateur valeur
Cela permet donc de SÉLECTIONNER les colonnes DE la table « nom_table » en GROUPANT les lignes qui ont des valeurs identiques sur la colonne « colonne1? et que la condition de HAVING soit respectée.
SQL COUNT()
En SQL, la fonction d’agrégation COUNT() permet de compter le nombre d’enregistrement dans une table. Connaître le nombre de lignes dans une table est très pratique dans de nombreux cas, par exemple pour savoir combien d’utilisateurs sont présents dans une table ou pour connaître le nombre de commentaires sur un article.
Pour connaître le nombre de lignes totales dans une table, il suffit d’effectuer la requête SQL suivante :
SELECT COUNT(*) FROM table
Il est aussi possible de connaitre le nombre d’enregistrement sur une colonne en particulier. Les enregistrements qui possèdent la valeur nul ne seront pas comptabilisé. La syntaxe pour compter les enregistrement sur la colonne « nom_colonne » est la suivante :
SELECT COUNT(nom_colonne) FROM table
Enfin, il est également possible de compter le nombre d’enregistrement distinct pour une colonne. La fonction ne comptabilisera pas les doublons pour une colonne choisie. La syntaxe pour compter le nombre de valeur distincte pour la colonne « nom_colonne » est la suiante :
SELECT COUNT(DISTINCT nom_colonne) FROM table
A savoir : en général, en terme de performance il est plutôt conseillé de filtrer les lignes avec GROUP BY si c’est possible, puis d’effectuer un COUNT(*).
SQL AVG()
La fonction d’agrégation AVG() dans le langage SQL permet de calculer une valeur moyenne sur un ensemble d’enregistrement de type numérique et non nul.
La syntaxe pour utiliser cette fonction de statistique est simple :
SELECT AVG(nom_colonne) FROM nom_table
SQL SUM()
Dans le langage SQL, la fonction d’agrégation SUM() permet de calculer la somme totale d’une colonne contenant des valeurs numériques. Cette fonction ne fonction que sur des colonnes de types numériques (INT, FLOAT …) et n’additionne pas les valeurs NULL.
La syntaxe pour utiliser cette fonction SQL peut être similaire à celle-ci:
SELECT SUM(nom_colonne)
FROM table
Syntaxe d’utilisation des opérateurs AND et OR
Les opérateurs sont à ajoutés dans la condition WHERE. Ils peuvent être combinés à l’infini pour filtrer les données comme souhaités.
L’opérateur AND permet de s’assurer que la condition1 ET la condition2 sont vrai :
SELECT nom_colonnes
FROM nom_table
WHERE condition1 AND condition2
L’opérateur OR vérifie quant à lui que la condition1 OU la condition2 est vrai :
SELECT nom_colonnes FROM nom_table
WHERE condition1 OR condition2
Ces opérateurs peuvent être combinés à l’infini et mélangés. L’exemple ci-dessous filtre les résultats de la table « nom_table » si condition1 ET condition2 OU condition3 est vrai :
SELECT nom_colonnes FROM nom_table
WHERE condition1 AND (condition2 OR condition3)
SQL IN
L’opérateur logique IN dans SQL s’utilise avec la commande WHERE pour vérifier si une colonne est égale à une des valeurs comprise dans set de valeurs déterminés. C’est une méthode simple pour vérifier si une colonne est égale à une valeur OU une autre valeur OU une autre valeur et ainsi de suite, sans avoir à utiliser de multiple fois l’opérateur OR.
Pour chercher toutes les lignes où la colonne « nom_colonne » est égale à ‘valeur 1' OU ‘valeur 2' ou ‘valeur 3', il est possible d’utiliser la syntaxe suivante:
SELECT nom_colonne
FROM table
WHERE nom_colonne IN ( valeur1, valeur2, valeur3, ... )
A savoir : entre les parenthèses il n’y a pas de limite du nombre d’arguments. Il est possible d’ajouter encore d’autres valeurs.
SQL DELETE
La commande DELETE en SQL permet de supprimer des lignes dans une table. En utilisant cette commande associé à WHERE il est possible de sélectionner les lignes concernées qui seront supprimées.
Avant d’essayer de supprimer des lignes, il est recommandé d’effectuer une sauvegarde de la base de données, ou tout du moins de la table concernée par la suppression. Ainsi, s’il y a une mauvaise manipulation il est toujours possible de restaurer les données.
La syntaxe pour supprimer des lignes est la suivante :
DELETE FROM table
WHERE condition
Attention : s’il n’y a pas de condition WHERE alors toutes les lignes seront supprimées et la table sera alors vide.
SQL TRUNCATE TABLE
En SQL, la commande TRUNCATE permet de supprimer toutes les données d’une table sans supprimer la table en elle-même. En d’autres mots, cela permet de purger la table. Cette instruction diffère de la commande DROP qui à pour but de supprimer les données ainsi que la table qui les contient.
A noter : l’instruction TRUNCATE est semblable à l’instruction DELETE sans utilisation de WHERE. Parmi les petite différences TRUNCATE est toutefois plus rapide et utilise moins de ressource. Ces gains en performance se justifie notamment parce que la requête n’indiquera pas le nombre d’enregistrement supprimés et qu’il n’y aura pas d’enregistrement des modifications dans le journal.
Cette instruction s’utilise dans une requête SQL semblable à celle-ci :
TRUNCATE TABLE `table`
Dans cet exemple, les données de la table « table » seront perdues une fois cette requête exécutée.
SQL DROP DATABASE
En SQL, la commande DROP DATABASE permet de supprimer totalement une base de données et tout ce qu’elle contient. Cette commande est à utiliser avec beaucoup d’attention car elle permet de supprimer tout ce qui est inclus dans une base: les tables, les données, les index …
Pour supprimer la base de données « ma_base », la requête est la suivante :
DROP DATABASE ma_base
Attention : cela va supprimer toutes les tables et toutes les données de cette base. Si vous n’êtes pas sûr de ce que vous faites, n’hésitez pas à effectuer une sauvegarde de la base avant de supprimer.
SQL UPDATE
La commande UPDATE permet d’effectuer des modifications sur des lignes existantes. Très souvent cette commande est utilisée avec WHERE pour spécifier sur quelles lignes doivent porter la ou les modifications.
La syntaxe basique d’une requête utilisant UPDATE est la suivante :
UPDATE table
SET nom_colonne_1 = 'nouvelle valeur'
WHERE condition
Cette syntaxe permet d’attribuer une nouvelle valeur à la colonne nom_colonne_1 pour les lignes qui respectent la condition stipulé avec WHERE. Il est aussi possible d’attribuer la même valeur à la colonne nom_colonne_1 pour toutes les lignes d’une table si la condition WHERE n’était pas utilisée.
SQL INSERT INTO
L’insertion de données dans une table s’effectue à l’aide de la commande INSERT INTO. Cette commande permet au choix d’inclure une seule ligne à la base existante ou plusieurs lignes d’un coup.
Insertion d’une ligne à la fois
Pour insérer des données dans une base, il y a 2 syntaxes principales :
Insérer une ligne en indiquant les informations pour chaque colonne existante (en respectant l’ordre)
Insérer une ligne en spécifiant les colonnes que vous souhaiter compléter. Il est possible d’insérer une ligne en renseigner seulement une partie des colonnes
Insérer une ligne en spécifiant toutes les colonnes
La syntaxe pour remplir une ligne avec cette méthode est la suivante :
INSERT INTO table VALUES ('valeur 1', 'valeur 2', ...)
Exemple :
SELECT PLAQUE.Nom, Prenom
FROM VEHICULE , GARAGE, PLAQUE
WHERE VEHICULE.Marque=GARAGE.Marque
AND VEHICULE.Code=PLAQUE.CodeV
AND Puissance>=100
AND GARAGE.Ville="Ailleurs";
est plus lisible que
SELECT PLAQUE.Nom, Prenom FROM VEHICULE , GARAGE, PLAQUE
WHERE VEHICULE.Marque=GARAGE.Marque AND
VEHICULE.Code=PLAQUE.CodeV AND Puissance>=100 AND GARAGE.Ville="Ailleurs";
Dans cette requête on recherche tous les noms et prénoms des propriétaires de véhicules > ou égal à 100 Cv, achetés dans un garage d'Ailleurs.
La jointure
Pour réaliser l’interrogation, on a souvent besoin de champs figurant dans plusieurs tables. Il faut donc fusionner les tables soit en utilisant le produit cartésien, soit la jointure.
Le produit cartésien :
SELECT Type, Nom FROM VEHICULE, GARAGE ;
Cette requête va associer chaque Type de VEHICULE au Nom du GARAGE :
La jointure :
Le principe de la jointure est de créer un lien entre tables ayant au moins un champ en commun. Les conditions de jointure s'expriment dans la clause WHERE. La jointure est souvent faite entre clé primaire et clé étrangère. Le principe de la jointure est de vérifier l’égalité de valeur entre des champs commun de deux tables.
SELECT Type, VEHICULE.Marque, Nom, Adresse
FROM VEHICULE, GARAGE
WHERE VEHICULE.Marque=GARAGE.Marque ;