Title: PTE / Informatique / Informatique - SQL

[latex]
\begin{itemize}
\item $IdComp$ est un attribut
\item une chaîne de caractères
\item un entier
\item $\{IdComp, Nom, Prenom, naissance, mort\}$
\item une valeur de l'attribut $IdComp$
\item une entrée de la table $compositeur$
\end{itemize}
[/latex]

Q: [latex]Ecrire une requête SQL pour aller chercher les noms et prénoms des compositions dont le nom est bach.[/latex]
A: [latex]SELECT Nom, Prenom FROM compositeurs WHERE Nom = "Bach";[/latex]

Q: [latex]Qu'est-ce qu'il ne faut surtout pas oublier dans une requête SQL ?[/latex]
A: [latex]Le point virgule (;) à la fin.[/latex]

Q: [latex]Quels sont les opérateurs de comparaison en SQL ?[/latex]
A: [latex]= $>$ $<$ $<=$ $>=$ et $<>$ (attention au dernier !)[/latex]

Q: [latex]Comment limiter le nombre de résultats renvoyés par une requête SQL ?[/latex]
A: [latex]A la fin, on ajoute l'attribut LIMIT 4 pour limiter à 4 éléments par exemple.[/latex]

Q: [latex]Comment ordonner les résultats renvoyés par une requête SQL ?[/latex]
A: [latex]ORDER BY pour des résultats croissants, ORDER BY desc pour des résultats décroissants.[/latex]

Q: [latex]Comment sauter les premiers résultats renvoyés par une requête SQL ?[/latex]
A: [latex]A la find e la requête, on oeut utiliser OFFSET 3 pour sauter les 3 premiers résultats par exemple.[/latex]

Q: [latex]Comment fait on lorsqu'on veut extraire des attributs de plusieurs relations ?[/latex]
A: [latex]On peut faire une construction ensembliste. Pour cela on utilise les intersections et les unions d'ensembles:
INTERSECT et UNION
\textit{Notons qu’il est souvent possible de remplacer avantageusement une union par l’opération booléenne OR et une intersection par l’opération AND.}
[/latex]

Q: [latex]Comment viser tous les éléments en SQL ?[/latex]
A: [latex]On n'utilise pas ALL !!! Ce n'est pas la même chose. On utilise *[/latex]

[latex]Donner les fonctions d'agrégation en SQL pour compter (x2), faire la moyenne, la somme, obtenir le minimum ou le maximum.[/latex]

Q: [latex]Définir la notion de jointure dans le cadre des requêtes SQL et donner la syntaxe associée.[/latex]
A: [latex]Une jointure permet de former une table à l’aide d’une sélection d’attributs provenant de deux tables différentes.
Synthaxe: SELECT R1.A1, R1.A2, R2.A3 FROM R1 JOIN R2 ON R1.A1 = R2.A4 ;
Ou bien: SELECT R1.A1, R1.A2, R2.A3 FROM R1, R2 WHERE R1.A1 = R2.A4 ;[/latex]

Q: [latex]Donner les trois cas d'utilisation d'une sous-requête / d'une requête complexe.[/latex]
A: [latex]On rappelle que l'on peut utiliser le résultat d'une requête comme une table et imbriquer ainsi des requêtes.
Voici quelques cas particulier avec des requêtes complexes:\\
- si le résultat d'une requête (R) ne comporte qu'une seule ligne et une colonne, on peut utuliser le résultat dans une autre requête:
SELECT ... FROM ... WHERE attribut = (R);
- si le résulat d'une requête (R) ne comporte qu'une seule colonne, on peut tester l'appartenance dans une autre requête:
SELECT ... FROM ... WHERE attribut IN (R);
- on peut tester si le résultat d'une requête fournit au moins un résultat avec:
SELECT ... FROM ... WHERE EXISTS (R).
[/latex]

Q: [latex]Comment compter les éléments d'une requête sans compter les doublons en SQL ?[/latex]
A: [latex]COUNT(DISTINCT attribut)[/latex]

Q: [latex]Comment créer une requête SQL qui détermine un taux (par exemple)?[/latex]
A: [latex]
On a découvert pendant les révisions d'info que l'on pouvait faire des opérations sur les résultats des requêtes, très simple d'ailleurs:
$SELECT\; nom, cas/pop*100\; FROM ...$
[/latex]