===== SQL =====
Structured Query Language
==== Commandes SQL ====
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(''?'')'
==== Journaux de transactions ====
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.
- Afficher les statistiques sur le taux d’utilisation de l’espace du journal des transactions pour toutes les bases de données :DBCC SQLPERF(LOGSPACE)
- Afficher le nom logique du log de la base sur laquelle on pointe :\\ //(le nom logique est celui qui s’affiche dans la colonne “name” sans extension .ldf)//EXEC sp_helpfile
- Effectue une sauvegarde du journal de la base vers laquelle on pointe :BACKUP LOG NOM_BASE TO DISK = ’D :\DOSSIER\DE\BACKUP\NOM_BASE.trn’
- Réduit la taille du fichier journal de la base sur laquelle on pointe (ici 10Mo au mieux) :DBCC SHRINKFILE(NOM_LOGIQUE_LOG, 10)
==== Commit ou rollback ? ====
''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).
==== WHERE ou HAVING ? ====
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.
* WHERE est une clause de restriction qui s’applique sur tous type de commande SELECT, UPDATE... :/* Liste des personnes de prénom "Pierre" dans ma table */
SELECT NOM, PRENOM
FROM PERSONNE
WHERE PRENOM = "Pierre"
* HAVING est plutôt utilisé lorsque l’on a une clause GROUP BY sur des fonctions d’aggrégation (MAX, SUM, ...) :/* 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
* Combiner les 2 clauses permet de donner une restriction sur le SELECT suivi d’une autre restriction sur le regroupement :/* 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
* Si l’on a pas de clause GROUP BY, WHERE et HAVING ont le même comportement, donc dans ces conditions, préférer la clause WHERE plus généralement utilisée.
* Pour bien comprendre :\\ http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L2
==== Format de date SQL ====
TO_DATE('2016/02/12 00:00:00', 'yyyy/mm/dd hh24:mi:ss')
TO_DATE('01/01/2017', 'dd/mm/yyyy')
==== Exemples de requêtes SQL ====
=== Mettre à jour un champ avec la valeur NULL ===
update table set champ = NULL
=== Mettre à jour un champ DATE à la date du jour ===
UPDATE