« Programmation SQL/Langage de manipulation de données » : différence entre les versions

Contenu supprimé Contenu ajouté
m →‎Alias : concordance des temps
Ftiercel (discussion | contributions)
m Mise en page
Ligne 1 :
{{Programmation SQL}}
''Pour tester les exemples et suivre correctement ce tutorial, nous vous conseillons de lire l'instruction[[Instruction suivantepour bien suivre le cours SQL]].''
== Introduction ==
 
Pour tester les exemples et suivre correctement ce tutorial, nous vous conseillons de lire l'instruction suivante.
 
* [[Instruction pour bien suivre le cours SQL]]
 
== Instruction SELECT ==
Ligne 31 ⟶ 27 :
=== SELECT ===
 
La clause SELECT permet de spécifier les informations qu'on veut récupererrécupérer. Elle contient des champs provenant de tables spécifiées dans la clause FROM, ainsi que des instructions d'agrégation portant sur ces champs.<br />
Le nom des champs ne doit pas être équivoque, ce qui veut dire que si des champs de tables différentes ont le même nom, les champs doivent être préfixés par le nom de la table : <tt>nom_de_table.nom_de_champs</tt><br />
Les noms des champs sont séparés par des virgules. Si la requête comporte la clause DISTINCT, les doublons (lignes de la table de resultatrésultat ayant exactement les mêmes valeurs dans tous les champs) seront éliminés, alors qu'avec la clause ALL, tous les resultatsrésultats sont renvoyés.<br />
SELECT * permet de renvoyer tous les champs de toutes les tables spécifiées dans FROM.
 
Ligne 49 ⟶ 45 :
=== FROM ===
 
Clause obligatoire qui détermine sur quelles tables l'on fait la requête. Les nomnoms des tables sont séparés par des virgules.
 
''Exemple :''
Ligne 129 ⟶ 125 :
|}
 
Vous pouvez adapter le résultat à certaincertains critères.
 
''Exemple : ''
Ligne 327 ⟶ 323 :
AND nom Like "J%" ;</source>
<br/>
Sélectionner les élèves qui ont 7 ans ou dont le nom commence par J (y compris ceux qui ont 7 ans '''<u>et'''</u> dont le nom commence par J)
 
''Exemple : ''
Ligne 423 ⟶ 419 :
 
 
Sélectionne des mots qui commencecommencent par "B", suivi de n'importe quel caractère, suivi d'un caractère entre "l" et "r", suivi d'une chaîne de caractères.
 
''Critère'' : "B_[l-r]%"<br/>
Ligne 573 ⟶ 569 :
 
===== Auto jointures =====
 
=== ORDER BY ===
 
Cette clause permet d'ordonner les résultats d'une requête. On peut les ordonner de deux manières : ascendante (ou dans l'ordre croissant) avec le mot clé ASC ou descendant (décroissant) avec le mot clé DESC.
 
Reprenons notre modèle logique :
 
'''élèves'''( <u>'''id_élève'''</u>, nom_élève, prénom_élève, adresse_éléve, cp_élève, ville_élève,''' # id_classe''' )
 
Si l'on désire afficher les élèves par ordre alphabétique croissant sur le nom, on fait :
 
<source lang="sql">SELECT *
FROM élèves
ORDER BY nom_élève ASC;</source>
 
La requête ci -dessous est équivalente :
 
<source lang="sql">SELECT *
FROM élèves
ORDER BY nom_élève</source>
 
La plupart des SGBD trient par défaut de manière croissante.<br />
 
Nous pouvons préciser le tri. Par exemple nous voulons trier sur le nom, puis le prénom puis l'adresse de manière décroissante.<br />
 
<source lang="sql">SELECT *
FROM élèves
ORDER BY (nom_élève, prénom_élève, adresse_élève) DESC;</source>
 
=== GROUP BY ===
Ligne 609 ⟶ 633 :
 
* La présence de la clause GROUP BY est nécessaire dès que la requête comporte simultanément dans la clause de sélection (SELECT) le filtre (WHERE), des jointures, des colonnes de tables hors calcul et des calculs d'agrégation.
* Dans ce cas, '''<u>toutes les colonnes représentées hors des calculs d'agrégation doivent figurer dans la clause GROUP BY</u>.'''
 
=== HAVING ===
Ligne 635 ⟶ 659 :
HAVING Count(*) BETWEEN 15 AND 30
ORDER BY nom ASC</source>
 
=== ORDER BY ===
 
Cette clause permet d'ordonner les résultats d'une requête. On peut les ordonner de deux manières : ascendante (ou dans l'ordre croissant) avec le mot clé ASC ou descendant (décroissant) avec le mot clé DESC.
 
Reprenons notre modèle logique :
 
'''élèves'''( <u>'''id_élève'''</u>, nom_élève, prénom_élève, adresse_éléve, cp_élève, ville_élève,''' # id_classe''' )
 
Si l'on désire afficher les élèves par ordre alphabétique croissant sur le nom, on fait :
 
<source lang="sql">SELECT *
FROM élèves
ORDER BY nom_élève ASC;</source>
 
La requête ci dessous est équivalente :
 
<source lang="sql">SELECT *
FROM élèves
ORDER BY nom_élève</source>
 
La plupart des SGBD trient par défaut de manière croissante.<br />
 
Nous pouvons préciser le tri. Par exemple nous voulons trier sur le nom, puis le prénom puis l'adresse de manière décroissante.<br />
 
<source lang="sql">SELECT *
FROM élèves
ORDER BY (nom_élève, prénom_élève, adresse_élève) DESC;</source>
 
== Instruction INSERT ==
Ligne 688 ⟶ 684 :
VALUES ('1','brindzingue','toto','trifoullie les oyes','66000','un coin perdu','12');
 
Pour n'ajouter que quelques données (données obligatoires par exemple, c'est -à -dire, celles qui ne doivent pas être nulles dans un enregistrement) on peut opèrer comme suit :
 
En imaginant que les données adresse_éléve, cp_élève et ville_élève soient optionnelles dans la base de données :
Ligne 752 ⟶ 748 :
| align="center" | toto
| align="center" | trifoullie les oyes
| align="center" | 66000
| align="center" | un coin perdu
| align="center" | 12
|}
 
'''<u>Attention, l'absence de condition peut entrainer certains problèmes (modification des champs de tous les enregistrements par exemple) qui ne provoque pas d'erreur SQL mais qui falsifie toutes les données de la base (les anciennes "bonnes" données risque fort d'être définitivement perdues !!!).'''</u>
 
== Instruction DELETE ==
Ligne 796 ⟶ 792 :
La table est désormais vide.
 
'''<u>Attention à la condition. Si elle n'est pas présente, la requête s'applique à tous les enregistrements de la table. En d'autres termes, vous videz la table.'''</u>
 
[[Catégorie:Programmation SQL (livre)]]