Tutoriel PHP

PHP

Découvez les bases de PHP dans mon support de formation dédié à ce puissant langage orienté web.


HTML HTML5 CSS Dreamweaver Bootstrap

Plus de requêtes SQL

Sur cet article, je vous propose de découvrir les principales commandes SQL.

Les 5 premiers enregistrements de la table "disque"

Formation Auteur
2 Back in black ACDC
6 Beggars Banquet Rolling Stones
4 Black Ice ACDC
1 Highway to hell ACDC
7 Kill 'Em All Metallica 2

Nos 2 tables et leur contenu

La table disques

disques

La table disques_ventes

disques_ventes

Télécharger la base de données disques.sql

SELECT

Sélectionner tous les champs de la table disque.

SELECT *
FROM disques

Sélectionner les champs "id_disque" et "nom_disque" dans la table disque.

SELECT id_disque, nom_disque
FROM disques

DISTINCT

Le mot-clé SELECT permet d'extraire toutes les informations d'une colonne (ou colonnes) d'une table.
Ce qui signifie que les résultats retourneront des redondances. Comment devons-nous procéder pour ne sélectionner que des éléments DISTINCT? Il s'agit d'une tâche facile à effectuer sous SQL. Tout ce dont nous avons besoin est d'ajouter DISTINCT aprés SELECT. La syntaxe est comme suit :

SELECT DISTINCT champ1
FROM table

WHERE

Grâce au mot-clé WHERE, vous allez pouvoir trier vos données.

SELECT *
FROM disques
WHERE auteur_disque='ACDC'

Il est par ailleurs possible de mettre deux conditions

SELECT *
FROM disques
WHERE auteur_disque='ACDC' OR auteur_disque='Metallica'

AND / OR

AND

SELECT *
FROM disques
WHERE auteur_disque='ACDC' AND date_disque<'2008-01-01'

OR

SELECT *
FROM disques
WHERE auteur_disque='ACDC' OR auteur_disque='Metallica'

AND et OR

SELECT Store_Name
FROM Store_Information
WHERE Sales > 1000
OR (Sales < 500 AND Sales > 275)

LIKE

'%AC%' : toutes les chaînes contenant le modéle 'AC' quelle que soit sa position. Par exemple, ACDC satisfera la condition.

'Ro%' : toutes les chaînes commençant par 'Ro'. Par exemple, 'Rolling Stones' satisfera la condition

'%ca' : toutes les chaînes terminant par 'ca'. Par exemple, 'Metallica' satisfera la condition.

'A_Z' : toutes les chaînes commençant par 'A', ou un autre caractére, et terminant par 'Z'. Par exemple, 'ABZ' et 'A2Z' satisferaient la condition, alors 'AKKZ' ne le ferait pas (car il y a deux caractéres entre A et Z au lieu d’un).

CONTIENT

SELECT *
FROM disques
WHERE auteur_disque LIKE '%AC%'

COMMENCE PAR

SELECT *
FROM disques
WHERE auteur_disque LIKE 'Ro%'

FINI PAR

SELECT *
FROM disques
WHERE auteur_disque LIKE '%ca'

BETWEEN

Requête permettant d'afficher des enregitrements compris entre.

SELECT *
FROM disques
WHERE date_disque BETWEEN '2024-10-01' AND '2024-10-01'

ORDER BY

ORDER BY permet d'ordonner des résultats, nous pourrions par exemple classer les disques par note.

Tri croissant

SELECT *
FROM disques
ORDER BY note_disque ASC

Tri décroissant

SELECT *
FROM disques
ORDER BY note_disque DESC

Tri sur 2 valeurs

SELECT *
FROM disques
ORDER BY nom_disque, date_disque ASC

LIMIT

LIMIT permet de ne prendre qu'une partie des résultats (par exemple les 3 premiers dans la requête ci-dessous).
Il faut rajouter à la fin de la requête le mot clé LIMIT, suivi de 2 nombres séparés par une virgule.

SELECT *
FROM disques
LIMIT 0,3

On précise d'abord à partir de quelle entrée on commence à lire la table. Dans l'exemple ci-dessus : 0 (pour MySQL c'est la premiére entrée)

Ensuite, le second nombre indique combien d'entrées on doit sélectionner. Dans l'exemple ci-dessus : 3

Donc on affichera les enregistrements de 0 à 3.

 

Quelques ecermples :

LIMIT 0,20 : affiche les 20 premiers enregistrements.
LIMIT 5,10 : affiche les enregistrements de 6 à 15.
LIMIT 10,12 : affiche les enregistrements 11 et 12.

SELECT *
FROM diques
WHERE auteur_disque='Rolling Stones'
ORDER BY date_disque DESC
LIMIT
0,10
Il faut utiliser les mots-clés dans l'ordre ci-dessus : WHERE puis ORDER BY puis LIMIT, sinon MySQL ne comprendra pas votre requête.

GROUP BY

Permet de grouper par.

SELECT SUM((total_ht)
FROM factures
GROUP BY id_client

FONCTIONS

COUNT

Le mot-clé COUNT demande à MySQL de compter le nombre d'entrées, et de renvoyer le résultat dans un array.

Pour afficher le résultats de la requête ci-dessous
<?php echo $donnees['Nd_disques'];?>

Le AS permet de renommer temporairement la colonne nom_disque en Nb_disques. En SQL, on appelle ça un alias, il est utle pour faciliter la lecture des requêtes

SELECT COUNT(nom_disque) AS Nb_disques
FROM disques

SUM

Calcule une somme de valeurs.

SELECT SUM(total_ht) AS Total
FROM factures

AVG

Calcule une moyenne.

SELECT AVG(total_ht) AS Moyenne
FROM factures

MIN

Permet d'afficher la plus petite valeur.

Dans l'exemple ci dessous, nous voulons afficher le disque le plus ancien

SELECT MIN(date_disque)
FROM DISQUES

MAX

Permet d'afficher la plus grande valeur.

Dans l'exemple ci dessous, nous voulons afficher le disque le plus récent.

SELECT MAX(date_disque)
FROM DISQUES

REQUETE CALCULEE

Nous pouvons aussi effectuer un calcul mathématique dans une requête SQL.

SELECT (total_ht*1.2) AS Totalttc
FROM factures

Jointures

INNER JOIN

La commande INNER JOIN permet de lier plusieurs tables entre-elles. Elle retourne les enregistrements lorsqu’il y a au moins une ligne égale dans chaque colonne de chaque table qui correspond à la condition.

SELECT disques.*, disques_ventes.*
FROM disques
INNER JOIN disques_ventes ON disques_ventes.id_disque_fk = disques.id_disque

Résultat

INNER JOIN
Nos affichons que les résultats ayant une correspondance dans les 2 tables

LEFT JOIN

La commande LEFT JOIN permet de lister tous les résultats de la table de gauche même s’il n’y a pas de correspondance dans la table de droite.
SELECT disques.*, disques_ventes.*
FROM disques
LEFT JOIN disques_ventes ON disques_ventes.id_disque_fk = disques.id_disque

Résultat

LEFT JOIN
Nous affichons tous les résultats de la table disques même si il n'y a pas de correspondance dans la table disques_ventes.

RIGHT JOIN


La commande RIGHT JOIN permet de lister tous les résultats de la table de droite même s’il n’y a pas de correspondance dans la table de gauche.

S’il y a un enregistrement de la table de droite qui ne trouve pas de correspondance dans la table de gauche, alors les colonnes de la table de gauche auront NULL pour valeur.

SELECT disques.*, disques_ventes.*
FROM disques
RIGHT JOIN disques_ventes ON disques_ventes.id_disque_fk = disques.id_disque

Résultat

RIGHT JOIN
Nous affichons tous les résultats de la table disques_ventes même si il n'y a pas de correspondance dans la table disques. Vous pouvez remarquer que si il n'y a pas de correspondance dans la table disques, les valeurs sont à NULL.

INSERT INTO

Permet d'insérer un enregistrement dans une table SQL.

INSERT INTO disques (id_disque, nom_disque, auteur_disque, note_disque, date_disque) VALUES(8, 'The wall', 'Pink Floyd', 10, '1979-11-30')

Pour insérer des données à partir de variables

INSERT INTO disques (id_disque, nom_disque, auteur_disque, note_disque, date_disque) VALUES('$id_disque', '$nom_disque', '$auteur_disque', '$note_disque', '$date_disque')

UPDATE

Permet de mettre à jour un enregistrement, dans notre exemple celui sélectionné dans la condition.

UPDATE disques
SET nom_disque='The wall', auteur_disque='Pink Floyd Roger Watter' , note_disque=10, date_disque='1979-11-30'
WHERE id_disque=8

Pour mettre à jour des données à partir de variables

UPDATE disques
SET nom_disque='$nom_disque', auteur_disque='$auteur_disque' , note_disque='$note_disque', date_disque='$date_disque'
WHERE id_disque='$id_disque'

Syntaxe multitables

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...]
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]

DELETE

Permet de supprimer un enregistrement

DELETE FROM disques WHERE id_disque=8

Pour supprimer un enregistrement à partir d'une variable

DELETE FROM disques WHERE id_disque='$id_disque'

CREATE

Permet de créer une table

CREATE TABLE IF NOT EXISTS `disques_ventes` (
`id_disque_vente` int(5) NOT NULL AUTO_INCREMENT,
`id_disque_fk` int(5) NOT NULL,
`ventes` varchar(10) NOT NULL,
`commentaire` text,
PRIMARY KEY (`id_disque_vente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;