Introduction au SQL

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Structured query language (SQL), ou langage structuré de requêtes, est un pseudo-langage informatique (de type requête) standard et normalisé, destiné à interroger ou à manipuler une base de données relationnelle avec :

  • un langage de définition de données (LDD, ou en anglais DDL, Data definition language),
  • un langage de manipulation de données (LMD, ou en anglais DML, Data manipulation language), la partie la plus courante et la plus visible de SQL,
  • un langage de contrôle de données (LCD, ou en anglais DCL, Data control language),
  • un langage de contrôle des transactions (LCT, ou en anglais TCL, Transaction control language),
  • et d'autres modules destinés notamment à écrire des routines (procédures, fonctions ou déclencheurs) et interagir avec des langages externes.

SQL fait partie de la même famille que les langages SEQUEL (dont il est le descendant), QUEL ou QBE (Zloof).

2 Create - Insertion de données

La commande INSERT ajoute une ligne dans une table de la base de données :

 INSERT INTO TABLE (column1[, column2, column3, ...]) VALUES (value1[, value2, value3, ...])

Le nombre de colonnes apparaissant dans les parenthèses avant VALUES doit correspondre au nombre de valeurs dans les parenthèses situées après. Pour insérer une ligne qui ne contient que les valeurs de certaines colonnes, indiquez simplement les colonnes concernées et leurs valeurs correspondantes :

 INSERT INTO dishes (dish_name, is_spicy) VALUES ('Salt Baked Scallops', 0)

La liste des colonnes peut être omise si vous insérez des valeurs pour toutes les colonnes d'une ligne :

 INSERT INTO dishes VALUES (1, 'Braised Sea Cucumber', 6.50, 0)

3 UPDATE - Mise à jour des données

La commande UPDATE modifie les données déjà présentes dans une table :

 UPDATE tablename SET column1=value1[, column2=value2, column3=value3, ...] [WHERE where_clause]

Voici un exemple d'initialisation d'une colonne avec une chaîne ou un nombre :

 ; CHANGE price TO 5.50 IN ALL ROWS OF the TABLE 
 UPDATE dishes SET price = 5.50 
 ; CHANGE is_spicy TO 1 IN ALL ROWS OF the TABLE 
 UPDATE dishes SET is_spicy = 1

Autre exemple, l'utilisation d'un nom de colonne dans une expression UPDATE :

 UPDATE dishes SET price = price * 2

Toutes les requêtes UPDATE que nous venons de présenter modifient chaque ligne de la table plats. Pour qu'un UPDATE ne change que certaines lignes, il suffit de lui ajouter une clause WHERE qui est une expression logique permettant de spécifier les lignes à modifier (dans cet exemple).
Voici l'utilisation d'une clause WHERE avec UPDATE :

 ; CHANGE the spicy STATUS OF Eggplant WITH Chili Sauce 
 UPDATE dishes SET is_spicy = 1 WHERE dish_name = 'Eggplant with Chili Sauce' 
 ; Decrease the price OF General Tso's Chicken 
 UPDATE dishes SET price = price - 1 WHERE dish_name = 'General Tso\'s Chicken'

Un autre exemple, j'ai voulu remplacer des mots dans mediawiki (source par syntaxhighlight) pour la mise à jour de Geshi (Syntax Highlight), voici les commandes que j'y ai passé :

 UPDATE `blocnotesinfo`.`wiki_text` SET `old_text` = REPLACE(`old_text`,"<source","<syntaxhighlight");
 UPDATE `blocnotesinfo`.`wiki_text` SET `old_text` = REPLACE(`old_text`,"</source","</syntaxhighlight");

4 DELETE - Supprimer des données

La commande DELETE supprime des lignes d'une table :

 DELETE FROM tablename [WHERE where_clause]

Sans clause WHERE, DELETE supprime toutes les lignes de la table :

 DELETE FROM dishes

Supression de certaines lignes d'une table :

 ; DELETE ROWS IN which price IS greater than 10.00 
 DELETE FROM dishes WHERE price > 10.00 
 ; DELETE ROWS IN which dish_name IS exactly "Walnut Bun" 
 DELETE FROM dishes WHERE dish_name = 'Walnut Bun'

Comme il n'existe pas de commande UNDELETE en SQL, soyez prudent lorsque vous utilisez DELETE !

5 SELECT - Récupérer des données

  • Récupération des données :
 SELECT column1[, column2, column3, ...] FROM tablename
  • Récupération de dish_name et price
 SELECT dish_name, price FROM dishes

Le symbole * est un raccourci qui désigne toutesl es colonnes de la table.

  • Utilisation de * dans une requête SQL :
 SELECT * FROM dishes
  • Contraintes sr les lignes renvoyées par SELECT :
 SELECT column1[, column2, column3, ...] FROM tablename WHERE where_clause
  • Récupération de certains plats :
; Dishes WITH price greater than 5.00 
SELECT dish_name, price FROM dishes WHERE price > 5.00 
 
; Dishes whose name exactly matches "Walnut Bun" 
SELECT price FROM dishes WHERE dish_name = 'Walnut Bun' 
 
; Dishes WITH price more than 5.00 but less than OR equal TO 10.00 
SELECT dish_name FROM dishes WHERE price > 5.00 AND price <= 10.00 
 
; Dishes WITH price more than 5.00 but less than OR equal TO 10.00, 
; OR dishes whose name exactly matches "Walnut Bun" (at any price)  
SELECT dish_name, price FROM dishes W       OR dish_name = 'Walnut Bun'
  • Opérateur SQL pour la clause WHERE :
Operator Description
= Equal to (like = = in PHP)
<> Not equal to (like != in PHP)
> Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
AND Logical AND (like && in PHP)
OR Logical OR (like || in PHP)
() Grouping

6 ORDER BY et LIMIT - Tri des données

  • Tri des lignes renvoyées par une requête SELECT :
 SELECT dish_name FROM dishes ORDER BY price
  • Pour trier par ordre décroissant, ajoutez DESC après la colonne trier :
 SELECT dish_name FROM dishes ORDER BY price DESC

Vous pouvez trier sur plusieurs colonnes : si 2 lignes ont la même valeur pour la première colonne, elles seront triées selon la valeur de la seconde, etc.
La requête de l'exemple ci dessous trie les lignes de la table des plats par ordre décroissant des prix ; si des lignes ont le même prix, elles seront alors triées selon l'ordre alphabétique de leur nom.

  • Tri sur plusieurs colonnes :
 SELECT dish_name FROM dishes ORDER BY price DESC, dish_name

Il est parfois pratique de ne récupérer qu'un certain nombre de lignes : vous pouvez vouloir connaître le plat le moins cher, ou n'afficher que 10 résultats par exemple.

  • Limitation du nombre de lignes renvoyées par SELECT :
 SELECT * FROM dishes ORDER BY price LIMIT 1
  • Limitation du nombre de lignes renvoyées par SELECT :
 SELECT dish_name, price FROM dishes ORDER BY dish_name LIMIT 10

En règle générale, vous de devriez utiliser LIMIT que dans les requêtes ayant une clause ORDER BY car, dans le cas contraire, le système de base de donnés peut renvoyer les lignes dans 'importe quel oredre : "la première' ligne du résultat d'une requête peut alors être différente de celle renvoyée par la m^me requête peut alors être différente de celle renvoyée par la m^me requête à un autre instant.

7 Jockers ou Regex SQL

Les caractères Jockers ou Regex permettent de chercher des chaînes correspondant à certains motifs : on peut, ainsi, trouver les chaînes se terminant ar .edu ou contenant @. SQL dispose de 2 caractères jockers : _ correspond à un et un seul caractère, tandis que % correspond à une suite de caractères de longueur quelconque (éventuellement vide). Ces jockers sont actifs lorsqu'ils se trouvent dans des chaînes utilisées avec l'opérateur LIKE dans une clause WHERE.

  • Utilisation de caractères jockers avec SELECT :
; Retrieve ALL ROWS IN which dish name begins WITH D 
SELECT * FROM dishes WHERE dish_name LIKE 'D%' 
 
; Retrieve ROWS IN which dish name IS Fried Cod, Fried Bod, 
; Fried Nod, AND so ON. 
SELECT * FROM dishes WHERE dish_name LIKE 'Fried _od'

Les caractères jockers peuvent également être utilisés dans les clauses WHERE des commandes UPDATE et DELETE. La requête de l'exemple ci dessous double le prix de tous les plats contenant chili dans leurs noms :

  • Utilisation de caractères jockers avec UPDATE :
 UPDATE dishes SET price = price * 2 WHERE dish_name LIKE '%chili%'
  • Utilisation de caractères jockers avec DELETE :
 DELETE FROM dishes WHERE dish_name LIKE '%Shrimp'

Pour utiliser littéralement un caractère % ou _ avec l'opérateur LIKE, précédez le d'un antislash (\).