Structured Query Language
Lancer en une seule commande la vérification de l’intégrité de l’ensemble des bases de données d’une instance SQL Server :
EXEC sp_msforeachdb 'DBCC CHECKDB(''?'')'
Comment diminuer la taille des fichiers de log SQL :
Les journaux de transactions se stockent dans les fichiers de journalisation, communément appelés fichiers de LOG (extension ldf). Ces fichiers prennent parfois une taille démesurée liée à l’activité du serveur SQL. Nous allons voir comment diminuer la taille de ces fichiers.
DBCC SQLPERF(LOGSPACE)
EXEC sp_helpfile
BACKUP LOG NOM_BASE TO DISK = ’D :\DOSSIER\DE\BACKUP\NOM_BASE.trn’
DBCC SHRINKFILE(NOM_LOGIQUE_LOG, 10)
rollback
transaction : exécute un script qui commence par “begin transaction” mais ne l’applique pas.
commit
transaction : exécute et applique un script qui commence par “begin transaction” (modification en base).
Différence entre les clauses WHERE et HAVING
Ce sont 2 clauses de filtrage : WHERE ⇒ filtre sur les données des tables HAVING ⇒ filtre sur les résultats des calculs de la requête.
/* Liste des personnes de prénom "Pierre" dans ma table */ SELECT NOM, PRENOM FROM PERSONNE WHERE PRENOM = "Pierre"
/* Liste des prénoms dont le nombre d’occurrences dans ma table > 10 */ SELECT PRENOM, COUNT(*) AS NOMBRE FROM PERSONNE GROUP BY PRENOM HAVING COUNT(*) > 10
/* Liste des prénoms dont le nombre d’occurrences dans ma table > 3 */ /* pour les personnes dont le nom commence par A */ SELECT PRENOM, COUNT(*) AS NOMBRE FROM PERSONNE WHERE NOM LIKE ’A%’ --Restriction sur le SELECT GROUP BY PRENOM HAVING COUNT(*) > 3 --Restriction sur le regroupement
TO_DATE('2016/02/12 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
TO_DATE('01/01/2017', 'dd/mm/yyyy')
update table set champ = NULL
UPDATE <table> SET <champ> = TO_DATE(sysdate)
ou
UPDATE <table> SET <champ> = TO_DATE(current_date)
(testé sur SQL server)
SELECT liste_nombre FROM table ORDER BY liste_nombre + 0
NOT IN permet à la requête suivante de retourner tous les enregistrements de la table1 pour lesquels la valeur de champ1 n’apparait nul part dans le champ1 de la table 2. En supprimant le NOT, on obtient l’inverse, c’est à dire l’intersection des deux tables.
SELECT table1.champ1, table1.champ2 (, .....) FROM table1 WHERE table1.champ1 NOT IN (SELECT table2.champ1 FROM table2)
Exemple de requêtes SQL à partir du modèle relationnel ci-dessous :
Extraire le catalogue des oeuvres par auteur et le nombre d’exemplaires achetés pour chaque oeuvre :
SELECT "Livre"."ISBN", COUNT("Livre"."ISBN") AS NB_LIVRES, "Oeuvre"."Auteur", "Oeuvre"."Titre" FROM "Livre" AS "Livre", "Oeuvre" AS "Oeuvre" WHERE "Livre"."ISBN" = "Oeuvre"."IDISBN" GROUP BY "Livre"."ISBN", "Oeuvre"."Auteur", "Oeuvre"."Titre" ORDER BY "Oeuvre"."Auteur"
Extraire le décompte, par oeuvre, des prêts et la date du dernier prêt. Pour chaque œuvre, nous voulons le total des emprunts et la date du dernier emprunt (quelque soit le livre de cette œuvre) :
SELECT "Titre", COUNT(*)AS "Nb prêts", MAX( "DateSortie" ) AS "Date" FROM "Oeuvre" INNER JOIN "Livre" ON "Livre"."ISBN" = "Oeuvre"."IDISBN" INNER JOIN "Emprunt" ON "Livre"."IDNumeroOrdre" = "Emprunt"."NumeroOrdre" GROUP BY "Titre" ORDER BY "Titre"
PS : ces requêtes ont été “syntaxées” pour le SGBD Open Office/Libre Office