Tutoriels >> Nos tutoriels sur la programmation Nos tutoriels sur la programmation >> Langage C Langage C >> Cours sur le SQL avancé Cours sur le SQL avancé

Cours sur le SQL avancé






Chapitre 1: Les jointures



Qu'est-ce qu'une jointure?



Dans ce chapitre, nous allons apprendre quelque chose de fondamental dans les bases de données relationnelles: les jointures.
Si on dit qu'elles sont relationnelles, c'est pas pour rien.
En effet, vous pouvez faire des conditions dans vos requêtes SQL en incluant des tables.
Mais avant d'utiliser les jointures, je pense qu'il est important de savoir quand on peut l'utiliser.




Quand utiliser les jointures?



C'est une bonne question.
On va considérer qu'on a 2 tables: une simple table dico et une autre membre.

La table dico:
Code sql:
CREATE TABLE dico(
nom VARCHAR(25),
definition TEXT,
id_membre INT)


La table membre:
Code sql:
CREATE TABLE membre(
id INT PRIMARY KEY AUTO_INCREMENT,
nom_membre VARCHAR(25),
citation VARCHAR(25))


Voilà , donc le id_membre de la table dico contient l'id du membre contenu dans la table membre.
Ce qu'on veut faire, c'est récupérer (dans l'exemple) le nom du membre à partir de l'id du membre pour chaque définition.
Ici, ce serait pas trop possible puisque dans ma table dico, je n'ai pas le nom du membre mais seulement son id.

Et bien, c'est effectivement possible avec les jointures!
C'est ce que nous allons voir de suite.


Les jointures en pratique!



Voici la syntaxe générale:

Code sql:
SELECT les_champs_a_recuperer FROM table1 JOIN table2 ON table1.champs=table2.champs


Comme vous le voyez c'est pas très compliqué.
Ce qui est après le ON est une condition et peut très bien être remplacé par > ou autre mais a généralement moins d'intèrêt d'être utilisé.

Voici comment faire dans notre exemple:

Code sql:
SELECT nom_membre, nom, definition FROM dico JOIN membre ON dico.id_membre=membre.id LIMIT 0, 20


Cette requête va vous récupérer les 20 premières définitions et va récupérer le nom de membre de chacunes de ces définitions respectives.

Chapitre 2: Les Unions SQL - Cours SQL



Quelle est l'utilité des unions en SQL?



Parfoit, faire 1 requête est plus rapide qu'en faire plusieurs et c'est pourquoi nous allons voir comment grouper plusieurs requêtes pour en faire qu'une seule.

Attention: La requête peut être plus rapide mais peut aussi être plus lente dans certain cas.


Exemple d'utilté des unions



Maintenant, je vous propose que j'ai 2 tables: une pour avoir le nombre de connectés et une autre pour avoir le nombre de membres.

En temps normal, on aurait les 2 requêtes:

Code sql:
SELECT COUNT(*) AS nb FROM membres


Code sql:
SELECT COUNT(*) AS nb FROM connectes


Et pourtant, je vais vous dire, on peut sur ce genre de requêtes les grouper ensemble et dans pas mal de cas gagner du temps! (comme ici)

Syntaxe générale des unions



Code sql:
SELECT champs FROM table1
UNION
SELECT champs FROM table2


Donc comme vous voyez, rien de plus simple.

Les unions en pratique!



Voici pour notre exemple ce que la requête deviendrait:

Code sql:
SELECT COUNT(*) AS nb FROM membre
UNION
SELECT COUNT(*) AS nb FROM connectes


Et voilà c'est tout!
Ensuite, quand vous parcourez le tableaux de résultats, vous aurez dans cet exemple 2 résultats.
Le 1er résultat du tableau 'nb' sera le nombre de membres et le 2ème résultat du tableau 'nb' sera le nombre de connectés.

Les noms de champs que vous sélectionnez dans vos unions doivent avoir les mêmes noms et dans le même ordre sinon, vos unions ne marcheront pas!


Chapitre 3: Les fonctions SQL - Cours SQL



Nous allons maintenant apprendre des fonctions très connues en SQL.

Compter le nombre de résultats


COUNT() permet de compter le nombre de résultats retournés.

Code sql:
SELECT COUNT(*) AS nb FROM membres


Récupérera le nombre d'enregistrements dans la table 'membres'.


Récupérer la valeur maximale



Dans le cas où vous avez stocké des nombres et que vous voulez récupérer la valeur maximale, vous n'avez qu'à utiliser la fonction MAX()

Code sql:
SELECT MAX(champs) AS nb_max FROM table


Récupére la valeur maximale dans la table 'table' pour le champs 'champs'

Il est possible de récupérer la valeur maximale en faisant la recherche du nombre sur tout les champs:

Code sql:
SELECT MAX(*) AS nb_max FROM table


Récupérer la valeur minimale



Code sql:
SELECT MIN(champs) AS nb_min FROM table


Il est possible de récupérer la valeur minimale en faisant la recherche du nombre sur tout les champs:

Code sql:
SELECT MIN(*) AS nb_min FROM table



Récupérer que des résultats différents



Code sql:
SELECT DISTINCT champs FROM table


Tout les résultats seront différents et donc, les doublons seront enlevés.

Exemple: récupérer le nombre de visites uniques sur votre site:

Code sql:
SELECT COUNT(DISTINCT ip) AS nb_visites_uniques FROM connectes



La fonction CONCAT()



Pour concaténer 2 chaines de caractères, vous pouvez utiliser la fonction CONCAT().

Code sql:
SELECT CONCAT(champs1,champs2) AS chaine_concatene FROM table


chaine_concatene sera une chaine créé en combinant le champs1 et le champs2 (il n'y aura pas d'espace qui va se créer dans notre exemple)

donc si champs1 vaut: test1
et champs2 vaut: test2
chaine_concatene vaudra dans notre exemple: test1test2

Récupérer une moyenne



Pour récupérer la moyenne d'une colonne, il faut utiliser la fonction AVG() qui s'utilise comme suit:

Code sql:
SELECT AVG(col) AS moyenne FROM table


Chapitre 4: Les clauses SQL - Cours SQL



La clause LIMIT



Il peut parfoit être utile de limiter le nombre de résultats d'une requête.
Pour cela, la clause LIMIT pourra faire l'affaire.

Code sql:
SELECT * FROM table LIMIT PREMIER_ENTRE_A_AFFICHER, NB_RESULTATS_MAX_A_RETOURNER


Donc, si on veut retourner les 10 premiers résultats, il faudra écrire:

Code sql:
SELECT * FROM table LIMIT 0, 10


Attention: En SQL, on commence à partir de l'entrée 0 et pas 1 donc si vous mettez 1 à la place, vous aurez à partir du 2ème résultat.

Il est aussi autorisé d'omettre le 1er paramètre (PREMIER_ENTRE) quand on commence à partir du premier enregistrement.
Donc, pour récupérer les 10 premiers résultats, il est autorisé d'écrire:

Code sql:
SELECT * FROM table LIMIT 10



La clause ORDER BY



En SQL, il peut être utile de trier des résultats.
Voici la syntaxe de base:

Code sql:
SELECT * FROM table ORDER BY champ


Vous avez 2 possibilités encore:
  • Trier par ordre croissant: ASC
  • Trier par ordre décroissant: DESC


Donc pour récupérer par exemple la liste des 20 derniers membres inscrits dans l'ordre des plus récemment inscrits, on peut faire:

Code sql:
SELECT * FROM membre ORDER BY date_inscription DESC LIMIT 20


Chapitre 5: Les requêtes imbriquées - Cours SQL



Nous allons maintenant apprendre des requêtes plus complexes qui peuvent être utiles dans certaines applications. Cependant, je vous conseille fortement d'éviter d'utiliser ce type de requête autant que possible. En effet, les requêtes imbriquées sont plus lentes et peuvent généralement être remplacées par des jointures (la requête sera plus simple et le résultat sera le même). Dans ce chapitre sur les requêtes imbriquées, j'ai décidé de prendre un exemple très simple afin de vous faciliter la compréhension du fonctionnement des requêtes imbriquées. Cependant, j'en concluerai que le choix d'une requête imbriquée n'est pas justifié ici. Retenez donc bien qu'une requête imbriqué peut généralement être remplacé par des jointures.


IN, NOT IN...



Supposons que nous avons une table article et que nous aimerions afficher tous articles de certains membres bien spécifiques.

Nous avons des milliers de membres et nous aimerions récupérer tous les articles de 'membre1', 'membre2', 'membre3' et 'membre4'. Voici comment nous pouvons écrire notre requête imbriquées :

Code sql:
SELECT * FROM article WHERE pseudo IN(SELECT 'membre1', 'membre2', 'membre3', 'membre4')


Bien sûr cette requête à peu d'intérêt. Généralement, vous aurez une vraie requête dans la requête imbriquée.
Si vous remplacer le IN par NOT IN, vous aurez TOUS les articles sauf ceux des membres "membre1', 'membre2', 'membre3' et 'membre4'.
Cours sur le SQL avancé
Auteur Grégory Bastin
Date de création 05/04/2009 à 19h20
Dernière date d'édition 18/12/2012 à 23h28
Avancement 100 %
Nombre de fois consultés 162755
Commentaires Ajouter un commentaire
Affichage complet du tutorial
Connecté(s) 1 connectés (0 membres, 1 invités)