Création de base de données en SQL - exercices dans le cadre du cours à l'ibis. Sébastien Clément, avril 2011



Documents pareils
Bases de Données relationnelles et leurs systèmes de Gestion

SQL Historique

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

TP3 : Creation de tables 1 seance

Le Langage De Description De Données(LDD)

Langage SQL : créer et interroger une base

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Création et Gestion des tables

Cours Bases de données 2ème année IUT

Historisation des données

Olivier Mondet

CREATION WEB DYNAMIQUE

Bases de données relationnelles

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Partie 0 : Gestion des tablespace et des utilisateurs... 3

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Intégrité des données

Auto-évaluation Oracle: cours de base

Les bases de données

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

PHP 5. La base de données MySql. A. Belaïd 1

Les BASES de DONNEES dans WampServer

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

TP Contraintes - Triggers

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Présentation Windows Azure Hadoop Big Data - BI

Gestion de base de données

Devoir Data WareHouse

Modélisation et Gestion des bases de données avec mysql workbench

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Compétences Business Objects

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Encryptions, compression et partitionnement des données

MySQL / SQL EXEMPLES

Notes de cours : bases de données distribuées et repliquées

I4 : Bases de Données

1. Base de données SQLite

Corrigés détaillés des exercices

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

BTS/CGO P10 SYSTEME INFORMATION Année

Application web de gestion de comptes en banques

Introduction au Système de Gestion de Base de Données et aux Base de Données

Cours SQL. Base du langage SQL et des bases de données

Le Langage SQL version Oracle

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Intégrité sémantique dans les bases de données relationnelles

Administration des bases de données. Jean-Yves Antoine

Cours Bases de données 2ème année IUT

Gestion des utilisateurs et de leurs droits

Paginer les données côté serveur, mettre en cache côté client

Tutorial sur SQL Server 2000

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Le langage SQL (première partie) c Olivier Caron

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Les Utilisateurs dans SharePoint

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Pour les débutants. langage de définition des données

1 Position du problème

Introduction aux Bases de Données 2004/2005

Systèmes de Gestion de Bases de Données

I. MySQL : Serveur et SGBD

Objectifs du TP : Initiation à Access

Département Génie Informatique

Partie II Cours 3 (suite) : Sécurité de bases de données

Mysql. Les requêtes préparées Prepared statements

Sybase Adaptive Server Enterprise 15

Bases de données et sites WEB Licence d informatique LI345

MODE OPERATOIRE OPENOFFICE BASE

Guide d'installation et de configuration du module

Le langage SQL Rappels

Master Exploration Informatique des données DataWareHouse

Réplication logique avec PostgreSQL 9.4

Les bases fondamentales du langage Transact SQL

BIRT (Business Intelligence and Reporting Tools)

BASES DE DONNEES TP POSTGRESQL

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

OpenPaaS Le réseau social d'entreprise

BD51 BUSINESS INTELLIGENCE & DATA WAREHOUSE

Manuel Viadeis CRM Connecteur intégration L100 étendue.

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

SQL Server 2000, Analysis Services et DTS

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Les déclencheurs. Version 1.0. Grégory CASANOVA

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

A QUOI SERVENT LES BASES DE DONNÉES?

PHP 4 PARTIE : BASE DE DONNEES

Transcription:

Création de base de données en SQL - exercices dans le cadre du cours à l'ibis. Sébastien Clément, avril 2011 Interface Web PhpPgAdmin: permet de faire des requêtes SQL ( 1 commandes) permet de visualiser la structure des tables et leur contenu navigation facile avec les onglets. Paramètres de connexion au serveur de BD PostgreSQL: http://dbs.arborea.ulaval.ca/phppgadmin/ Entrer votre nom d'utilisateur et mot de passe: Choisir: A) SQL - pour effectuer les commandes de création B) Schéma: ibis01, ibis02,... (selon votre utilisateur) - pour visualiser la structure et les données Note: schéma = partition à l'intérieur d'une base de données A B

Terminal SQL: Note: pour constater les restrictions d'accès spécifiques aux utilisateurs (privilèges), tentez de voir ou de manipuler les données dans les schémas des autres utilisateurs. COMMANDES SQL - Création des tables, contraintes et enregistrements (DDL et DML): Création de table 1 - ADNs: CREATE TABLE adns ( nom TEXT, espece TEXT, type TEXT ); Insertion d'enregistrements: Note: on a entré 2 fois le même enr.! On efface tout: DELETE FROM adns; Pour empêcher la duplication d'enr.: ALTER TABLE adns ADD CONSTRAINT pk_adns PRIMARY KEY (nom); Réinsertion 1: Réinsertion 2: Note: ici, la contrainte d'intégrité empêche les valeurs dupliquées dans "nom"

Création de table 2 - Amorces: CREATE TABLE amorces ( nom TEXT, sequence TEXT, sens TEXT, adn_gabarit TEXT, pos_vs_gabarit INTEGER, date_creation date ); On crée la clé primaire: ALTER TABLE amorces ADD CONSTRAINT pk_amorces PRIMARY KEY (nom); Note: aurait-on pu choisir une autre colonne comme clé primaire? On ne peut avoir qu'une clé primaire par table. Cependant, on peut imposer l'unicité des valeurs dans un autre champ, comme suit ALTER TABLE amorces ADD CONSTRAINT ct_check_sequence_uniqueness UNIQUE (sequence); Insertion d'enregistrements: (nom,sequence,sens,adn_gabarit,pos_vs_gabarit,date_creation) VALUES ('at39234f','acacacaacaacacaattcg','f','at_312',43,'2011-02-12'); (nom,sequence,sens,adn_gabarit,pos_vs_gabarit,date_creation) VALUES ('at39234r','catacatatcatactatcaacta','r','at_312',512,'2011-02-12'); Note: remarquez la présence ou l'absence d'apostrophes dans les valeurs insérées On veut que l'adn gabarit ayant servi à créer les amorces provienne de notre table ADNs: Actuellement, pas le cas: (nom,sequence,sens,adn_gabarit,pos_vs_gabarit,date_creation) VALUES ('amorce1234','acacacacatcatcatacat','f','adn du frigo 1223B',512,'2011-02-12'); On efface cette amorce: DELETE FROM amorces WHERE nom='amorce1234'; voir contenu amorces On crée une clé étrangère dans 'amorces', pointant vers 'adns': ALTER TABLE amorces ADD constraint fk_amorces_adn_gabarit FOREIGN KEY (adn_gabarit) REFERENCES adns(nom) ON UPDATE CASCADE; Note: ON UPDATE CASCADE... Voir structure table Nouvelle tentative: (nom,sequence,sens,adn_gabarit,pos_vs_gabarit,date_creation) VALUES ('amorce1234','acacacacatcatcatacat','f','adn du frigo 1223B',512,'2011-02- 12'); Note: interdit l'ajout de toute amorce non basée sur un ADN existant dans la table adns (intégrité référentielle)

Autre exemple de la puissance de cette contrainte: SELECT * FROM adns; SELECT * FROM amorces; UPDATE adns SET nom='at_312_nouveau' where nom='at_312'; SELECT * FROM adns; SELECT * FROM amorces; UPDATE adns SET nom='at_312' where nom='at_312_nouveau'; Créer 3e table: PCRs CREATE TABLE pcrs ( id SERIAL, adn_nom TEXT, amorce_f_nom TEXT, amorce_r_nom TEXT, programme TEXT, melange TEXT, utilisateur TEXT, date_execution DATE, taille_amplicon INTEGER, details TEXT ); Note: SERIAL: numéro auto incrémenté, assure l'unicité de la clé. On crée les clés primaires et secondaires: ALTER TABLE pcrs ADD CONSTRAINT pk_pcrs PRIMARY KEY (id); ALTER TABLE pcrs ADD constraint fk_pcrs_adn_nom FOREIGN KEY (adn_nom) REFERENCES adns(nom) ON UPDATE CASCADE; ALTER TABLE pcrs ADD constraint fk_pcrs_amorce_f_nom FOREIGN KEY (amorce_f_nom) REFERENCES amorces(nom) ON UPDATE CASCADE; ALTER TABLE pcrs ADD constraint fk_pcrs_amorce_r_nom FOREIGN KEY (amorce_r_nom) REFERENCES amorces(nom) ON UPDATE CASCADE; Note: encore une fois, de cette façon, on ne peut créer que des PCRs avec des amorces et ADNs existants. Ça implique une rigueur dans l'ordre d'entrée des enr. (adns et amorces avant), mais ça assure une cohérence des données impossible à atteindre sans programmation en fichiers à plat ou en Excel. Ajout du reste des données ADNs: INSERT INTO adns (nom,espece,type) VALUES ('pt_221s','p. taeda','cdna'); INSERT INTO adns (nom,espece,type) VALUES ('pg_s352','p. glauca','cdna'); INSERT INTO adns (nom,espece,type) VALUES ('ADN_K33','P. aeruginosa','plasmidique'); INSERT INTO adns (nom,espece,type) VALUES ('ce_tty14','c. elegans','cdna');

Amorces: ('pt00324f','gcctgcaagaagaccctagtt','pt_221s','f',52,'2011-03-05'); ('pt00324r','cacttaggcaacatccacttacc','pt_221s','r',744,'2011-03-05'); ('K33_001F','CCAGATCTACTACATACTTACTAT','ADN_K33','F',23,'2010-09-07'); ('K33_001R','CAACATCTATCTACTATCTAT','ADN_K33','R',455,'2010-09-07'); ('K33_002F','CACACACACAATACGACACAT','ADN_K33','F',433,'2010-09-07'); ('K33_002R','CGGCGATTATTCGATTACGATCT','ADN_K33','R',971,'2010-09-07'); PCRs: ('at_312','at39234f','at39234r','prog0077','mix321','g. Turcotte','2011-04-02',NULL,'Non-spécifique'); ('at_312','at39234f','at39234r','prog0002','mix321','g. Turcotte','2011-04-08',1400,'Belle amplification'); ('ADN_K33','K33_001F','K33_001R','Prog0012','Mix217','M. Simard','2011-02-09',NULL,'Aucune amplification'); ('ADN_K33','K33_001F','K33_001R','Prog0012','Mix218','M. Simard','2011-02-10',450,'Belle amplification'); Note1: remarquer l'utilisation du NULL (absence de valeur) et non pas de '', qui n'est pas une valeur nulle Note2: l'ajout de données en lot (ex: 1000 lignes et plus) plutôt que par commandes SQL individuelles, est non-seulement possible, mais préférable Autres contraintes: ALTER TABLE adns ADD CONSTRAINT ct_adns_type_domain CHECK (type IN ('cdna','plasmidique','génomique')); ALTER TABLE amorces ADD CONSTRAINT ct_amorces_sequence_allow_nucleotide_letters_only CHECK (sequence!~ '[^atgcatgc]');

COMMANDES SQL - Interroger une base de données (DML): Base SELECT * from amorces; Sélection des colonnes SELECT nom,sequence FROM amorces; Sélection des lignes: SELECT * FROM amorces WHERE sens='f'; Calculs et constantes: SELECT (pos_vs_gabarit+1000) AS pos_corrigee FROM amorces; SELECT nom,'georges' AS createur, date_creation FROM amorces; Condition et concaténation: SELECT nom, (CASE WHEN sens='f' THEN 'Forward' ELSE 'Reverse' END) AS sens_long,pos_vs_gabarit sens AS pos_sens FROM amorces; Clauses DISTINCT, ORDER BY, NULL, IN: SELECT DISTINCT sens FROM amorces; Multi-tables SELECT * FROM amorces ORDER BY date_creation; SELECT * FROM pcrs WHERE taille_amplicon IS NOT NULL; SELECT adn_nom,amorce_f_nom,amorce_r_nom FROM pcrs WHERE id >1 AND programme IN ('Prog0002','Prog0012'); Jointure normale: SELECT adns.nom,adns.espece,adns.type, amorces.nom, amorces.sequence FROM adns JOIN amorces ON adns.nom=amorces.adn_gabarit; Note1: Dans les requêtes multi-tables, il y a risque d'avoir un nom de champ commun à plusieurs tables, donc on doit spécifier la table devant le nom du champ, séparé par un point. Note2: Pour chaque ADN, il peut y avoir plus d'une amorce, donc les infos sur l'adn sont répliquées. Note3: la jointure limite les enregistrements à ceux communs entre 'adns' et 'amorces', c'est à dire que les ADN pour lesquels il n'y a pas d'amorces n'apparaissent pas. Pour faire apparaître aussi ces ADN, on utilise la jointure à gauche (ci-dessous). Jointure à gauche: SELECT adns.nom,adns.espece,adns.type, amorces.nom, amorces.sequence FROM adns LEFT JOIN amorces ON adns.nom=amorces.adn_gabarit; Sous-requêtes/requêtes imbriquées: SELECT adn_nom,amorce_f_nom, (SELECT sequence FROM amorces WHERE nom=amorce_f_nom) AS am_f_seq FROM pcrs; Note: Alternative à une jointure quand on veut aller chercher un enregistrement précis

d'une autre table avec une clé de la table actuelle, à condition que la sous-requête ne retourne qu'un enregistrement et une seule colonne. Requêtes d'agrégation SELECT sens, AVG(pos_vs_gabarit) AS avg_pos, COUNT(*) AS nb_amorces FROM amorces GROUP BY sens; Recherche par expressions régulières: LIKE POSIX SELECT * FROM amorces WHERE sequence LIKE '%GGC%'; SELECT * FROM amorces WHERE nom ~ '[^0-9]3'; SELECT nom, sequence, length(sequence) FROM amorces WHERE nom ~ '[^0-9]3'; SELECT nom, sequence, round((length(regexp_replace(sequence,'[^gc]','','g'))::numeric/le ngth(sequence)::numeric*100),1) AS pct_gc, length(sequence) FROM amorces WHERE nom ~ '[^0-9]3'; Sauvegarder une requête (création de vue): CREATE VIEW v_calculs_amorces AS SELECT nom, sequence, round((length(regexp_replace(sequence,'[^gc]','','g'))::numeric/le ngth(sequence)::numeric*100),1) AS pct_gc, length(sequence) FROM amorces; Maintenant, la définition de la vue est sauvegardée dans 'Views' Pratique pour les vues utilisées couramment. Dès que les données sont mises-à-jour, les changements sont visibles dans cette vue.