Bases de données 1/14 Bases de données Langage SQL Nils Schaefer [email protected] Nils Schaefer Bases de données 2/14 SGBD et SQL ● ● Système de Gestion de Bases de Données – Gestion physique des bases de données – Manipulation des bases de données – Exemples : MySQL, PostGreSQL, SQL Serveur ... Structured Query Language – Langage normalisé ● Base commune entre les différents SGBD – Langage pour créer des bases de données – Langage pour manipuler des données Nils Schaefer Bases de données 3/14 Requête SQL d'extraction ● Requête SELECT ● Retourne une ou plusieurs lignes – Avec un ou plusieurs champs par ligne ● Aucun impact sur les données ● Exemple – ● SELECT nom,prenom FROM utilisateurs Nombreuses possibilités de sélection, d'agrégation et de tri des données extraites Nils Schaefer Bases de données 4/14 Requêtes SQL de modification ● ● Requête qui ont un impact sur une ou plusieurs lignes d'une base de données Ajout de données – ● Mise à jour de données – ● INSERT INTO UPDATE Suppression de données – DELETE Nils Schaefer Bases de données 5/14 Requêtes SELECT avancées ● Utilisation de WHERE – Filtrage des lignes de la requête – Test réalisé ligne par ligne ● ● – ● Si le test est vrai la ligne est conservée Si le test est faux la ligne n'est pas conservée Penser à l'indexation ! Exemple SELECT * FROM Salaries WHERE Salaire>20000 AND (Nom='Durand' OR Nom='Dupond') Nils Schaefer Bases de données 6/14 Requêtes SELECT avancées ● Utilisation de GROUP BY – Fusionne les lignes de résultat ● – Couplé à un agrégat ● ● Basé sur un ou plusieurs champs Dénombrement, somme, moyenne... Exemple SELECT Salaire,COUNT(*) FROM Salaries WHERE Salaire>20000 GROUP BY Salaire Nils Schaefer Bases de données 7/14 Requêtes SELECT avancées ● Utilisation de HAVING – Couplé à un GROUP BY – Equivalent du WHERE ● – ● Intervient APRES le GROUP BY Possibilité d'utiliser les agrégats Exemple SELECT Salaire,COUNT(*) FROM Salaries WHERE Salaire>20000 GROUP BY Salaire HAVING COUNT(*)>5 Nils Schaefer Bases de données 8/14 Requêtes SELECT avancées ● ● Utilisation de JOIN – Fusionne deux tables sur égalité d'un ou plusieurs champs – Plusieurs JOIN successifs possibles – Entre deux tables qui ont une relation PK/FK Exemple SELECT Nom,Prenom FROM Utilisateurs AS u JOIN CommandesUtilisateurs AS cu ON u.idUtilisateur= cu.idUtilisateur JOIN Commandes AS c ON cu.idCommande=c.idCommande WHERE montant>=500 Nils Schaefer Bases de données 9/14 Requêtes SELECT avancées ● ● Utilisation de ORDER BY – Réalisation d'un tri des données – Un ou plusieurs champs – Croissant ou décroissant – Plus efficace qu'en PHP grâce aux index ! Exemple SELECT Nom,Prenom,Salaire FROM Salaries ORDER BY Nom,Prenom,Salaire DESC Nils Schaefer Bases de données 10/14 Fonctions sur les chaînes ● CHAR_LENGTH(str) – ● CONCAT(str1,str2,...) – ● Concaténation avec séparateur LOWER(str) – ● Concaténation d'au moins deux chaînes CONCAT_WS(separator, str1, str2,...) – ● Longueur d'une chaîne (éviter LENGTH) Conversion en minuscules UPPER(str) – Conversion en majuscules Nils Schaefer Bases de données 11/14 Fonctions sur les dates ● NOW() – ● CURDATE() – ● Heure au format 'HH:MM:SS' UNIX_TIMESTAMP() – ● Date au format 'YYYY-MM-DD' CURTIME() – ● Date au format 'YYYY-MM-DD HH:MM:SS' Date sous la forme d'un Timestamp Unix Opérations possibles (+ et -) avec INTERVAL – '1997-12-31 23:59:59' + INTERVAL 1 SECOND Nils Schaefer