polycopié
Transcription
polycopié
PC(*) Bases de données 2014/2015 1 Principe Un système de bases de données permet de stocker et de traiter des informations sous forme de tables, dont les colonnes contiennent des données de type prédéfini (entier, réel, chaîne de caractères, booléen, etc.). L’exemple typique est celui du carnet de contacts (nom , prénom, numéro de téléphone, adresse, etc.) La base de donnée, qui contient ses renseignements, doit être accessible à un grand nombre d’utilisateur, ce qui nécessite un système complexe de clients et de requêtes. Les requêtes de chacun des utilisateurs doivent pouvoir se faire en parallèle, en respectant la hiérarchie des droits, la transparence des modifications, et la cohérence et l’intégrité de la table de données. Voici un tableau avec des types de données courant : code nom description I Integer entier long N Number réel SI Short Integer entier court BL Boolean booléen A Char caractères alpha de longueur fixe VA VarChar caractères alpha longueur variable avec un maximum D Date date MN Money monnaie 2 Quelques commandes 2.1 CREATE Elle permet de créer une base de données, soit manuellement, soit automatiquement à partir d’un fichier .csv (séries de données séparées par un délimiteur : virgule, point-virgule, tabulation, espace, etc. Par exemple, la commande : (CREATE table classe_pc nom VARCHAR(30) PRIMARY KEY NOT NULL, prenom VARCHAR(19) NOT NULL, date_naissance DATE , email VARCHAR ,) ; prépare la création de la table classe_pc avec quatre données (dont deux obligatoires). Il faut encore renseigner ces données pour chaque élève de la classe. PRIMARY KEY autorise la donnée nom à servir de référence pour un index. NOT NULL interdit la valeur nulle (absence de données). VARCHAR(30) indique une chaîne de caractère limitée à 30 caractères. 2.2 SELECT Elle permet de rechercher des éléments dans la base de données, avec des critères de sélection. Considérons par exemple une base de données pays contenant quatre colonnes : Pays Chine Inde Etats-Unis Population 1367820387 1192148288 320504419 Superficie 9596961 3287263 9629047 Densite 142.53 362.66 33.29 Alors on utilisera la commande avec la syntaxe : SELECT FROM WHERE syntaxe liste des attributs nom de la table conditions exemple SELECT * FROM pays WHERE ‘Pays‘ LIKE U% L’exemple donné correspond à la recherche de tous les pays dont le nom commence par la lettre ’U’. Opérateurs de conditions pour la commande WHERE Opérateur Description exemple WHERE ‘Pays‘ = ’Vatican’ = égale <>, != différent WHERE ‘Pays‘ <> ’Russie’ WHERE ‘Densité‘ >= 100 > supérieur à < inférieur à WHERE ‘Population‘ < 1000000 WHERE ‘Densité‘ >= 100 >= supérieur ou égale à <= inférieur ou égale à WHERE ‘Population‘ <= 1000000 WHERE Pays IN ( ’Maurice’, ’Suisse’, ’Luxembourg’ ) IN présent dans une liste BETWEEN inclus dans un intervalle WHERE ‘Densité‘ BETWEEN 50 AND 125 LIKE recherche en spécifiant un schéma WHERE ‘Pays‘ LIKE ’U%’ IS NULL valeur absente WHERE ‘email‘ IS NULL IS NOT NULL valeur présente WHERE ‘email‘ IS NOT NULL Concernant la commande LIKE, les schémas de recherche sont formés en utilisant les opérateurs _ (n’importe quel caractère) ou % (n’importe quel groupe non vide de caractère). On peut utiliser les opérateurs logiques AND, OR, NOT. 2.3 JOIN Supposons que l’on dispose d’une deuxième base de données, paycap, organisée ainsi : Pays Capitale Abou Dhabi Emirats arabes unis Abuja Nigeria Accra Ghana On cherche à savoir, en utilisant les tables paycap et paypop, quel est la densité du pays dont la capitale est Hagåtña (notée Hagatna pour plus de commodité dans notre base). On utilisera la syntaxe : SELECT * FROM ‘paycap‘ NATURAL JOIN ‘paypop‘ qui renvoie la table, qui est une fusion des deux tables paycap et paypop : Pays Chine Inde Etats-Unis Indonesie Bresil Pakistan Nigeria Capitale Pekin New Delhi Washington Jakarta Brasilia Islamabad Abuja Population 1367820387 1192148288 320504419 255461701 203891082 191541725 187380807 Superficie 9596961 3287263 9629047 1910931 8547877 796096 923768 Densite 143 363 33 134 24 241 203 SELECT * FROM ‘paycap‘ NATURAL JOIN ‘paypop‘ WHERE ‘Capitale‘ LIKE ’Hagatna’ renvoie Pays Capitale Population Superficie Densite Guam Hagatna 160378 544 295 et SELECT ‘Densite‘ FROM ‘paycap‘ NATURAL JOIN ‘paypop‘ WHERE ‘Capitale‘ LIKE ’Hagatna’ renvoie 295. 3 Exemples et pratique On pourra utiliser le serveur mis en place sur Camille, à l’adresse http://info-cpge.lyc-camilleguerin.fr/phpmyadmin avec l’identifiant pc et le mot de passe db-#&+ . B ne modifiez pas les bases déjà existantes. Vous créérez votre propre base, que vous pourrez modifier à votre guise. On aboutit sur une interface graphique permettant de créer des requêtes SQL, et renvoyant le texte de la requête. onglet « afficher » onglet « opérations » onglet « rechercher » On trouve sur le serveur deux bases : (les pays dont le nom contient un x) ∗ paypop donnant une liste de pays avec leur superficie, leur population et leur densité. ∗ paycap donnant une liste de capitales correspondant aux pays. B l’import des caractères accentués a posé un problème : ils ont été remplacés par des caractères non accentués. Par ailleurs, le choix de la capitale d’un pays est parfois contesté. 3.1 création d’une table Utiliser l’onglet Opérations pour créer votre propre table, en copiant la table paycap vers une autre table avec un nom personnalisé. Vous pourrez modifier cette table (entrées, lignes, type de données, etc.). 3.2 Quelques recherches Utiliser l’onglet recherches pour déterminer : ∗ les pays de population >= 1M hab et de superficie <= 10000 km 2 ; ∗ les pays dont le nom commence par ’U’ ∗ les pays dont le nom contient la lettre ’q’ et la capitale contient la lettre ’a’ ; ∗ les pays dont le nom contient un ’w’ et ayant plus de 10M hab. 3.3 Quelques recherches en ligne de commandes Utiliser l’onglet SQL pour déterminer : ∗ les pays dont le nom contient la lettre ’q’ mais pas la lettre ’u’ ∗ la superficie des pays de plus de 10 000 000 d’habitants dont le nom ne contient pas la lettre ’u’ ∗ les pays de moins de 100 000 km 2 dont le nom contient la lettre ’v’ ; ∗ les pays de densité < 100 dont la capitale contient une des lettres ’J’ ou ’V’ ; 4 solutions 3.2 ∗ les pays de population >= 1M hab et de superficie <= 10000 km 2 . SELECT * FROM ‘paypop‘ WHERE ‘Population‘ >=1000000 AND ‘Superficie‘ <=10000 Hong Kong Singapour Palestine Porto Rico Trinite-et-Tobago Bahrein Maurice Chypre 7219700 5469724 4420549 3548397 1346832 1346344 1219265 1172458 1104 718 6020 9104 5128 770 2040 9251 6540 7615 734 390 263 1749 598 127 ∗ les pays dont le nom commence par ’U’ SELECT * FROM ‘paypop‘ WHERE ‘Pays‘ LIKE ’U%’ Ukraine Uruguay 42928892 3467054 576468 176215 74 20 ∗ les pays dont le nom contient un ’w’ et ayant plus de 10M hab SELECT * FROM ‘paypop‘ WHERE ‘Pays‘ LIKE ’%w%’ AND ‘Population‘ >=10000000 Taiwan Malawi Zimbabwe Rwanda 23373517 15316860 13061239 11077897 36191 118484 390757 25283 646 129 33 438 ∗ les pays dont le nom contient la lettre ’q’ et la capitale contient la lettre ’a’ ; SELECT * FROM ‘paycap‘ WHERE ‘Capitale‘ LIKE ’%a%’ AND ‘Pays‘ LIKE ’%q%’ Ankara Turquie Bangui Republique centrafricaine Bratislava Slovaquie Brazzaville Republique du Congo Le Cap Afrique du Sud Doha Qatar Kinshasa Republique democratique du Congo Malabo Guinee equatoriale Maputo Mozambique Prague Republique tcheque Roseau Dominique Saint-Domingue Republique dominicaine 3.3 ∗ les pays dont le nom contient la lettre ’q’ mais pas la lettre ’u’ ; SELECT ‘Pays‘ FROM ‘paycap‘ WHERE ‘Pays‘ LIKE ’%q%’ AND ‘Pays‘ NOT LIKE ’%u%’ Un seul pays : le Qatar. ∗ la superficie des pays de plus de 10 000 000 d’habitants dont le nom ne contient pas la lettre ’u’ ; SELECT ‘Superficie‘ FROM ‘paypop‘ WHERE ‘Pays‘ NOT LIKE ’%U%’ AND ‘Population‘ >=60000000 AND ‘Densite‘ >75 9596961,3287263, 1910931, 796096, 923768, 147570, 377944, 300439, 1127127, 330951, 1001449, 357340, 513120, 551695, 302072 (total 21524726) ∗ les pays de densité < 100 dont la capitale contient une des lettres ’J’ ou ’V’ ; SELECT ‘Pays‘ FROM ‘paycap‘ WHERE (‘Capitale‘ LIKE ’%J%’ NATURAL JOIN ‘paypop‘ OR ‘Capitale‘ LIKE ’%V%’) AND ( ‘Densite‘ <100 ) Ukraine, Malaisie, Madagascar, Tchad, Soudan du Sud, Benin, Autriche, Laos, Costa Rica, Liberia, BosnieHerzegovine, Lituanie, Macedoine, Gabon, Fidji, Djibouti, Islande, Vanuatu.