Rudiments SQL pour Oracle BDA_RCS



Documents pareils
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Le langage SQL Rappels

Langage SQL : créer et interroger une base

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

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

Le Langage SQL version Oracle

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

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

SQL Historique

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

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

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Optimisation SQL. Quelques règles de bases

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

Bases de données relationnelles

Les bases de données

FileMaker 13. Guide de référence SQL

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

1 Introduction et installation

TD n 10 : Ma première Base de Données

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

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

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

16H Cours / 18H TD / 20H TP

1. Introduction Création d'une requête...2

Systèmes de Gestion de Bases de Données

Cours 4 : Agrégats et GROUP BY

Introduction aux Bases de Données 2004/2005

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

Vincent Augusto

Compétences Business Objects

Le Langage De Description De Données(LDD)

Devoir Data WareHouse

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

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

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Olivier Mondet

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

Bases de données Cours 4 : Le langage SQL pour ORACLE

Les bases fondamentales du langage Transact SQL

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

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

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

SQL pour. Oracle 10g. Razvan Bizoï. Tsoft, Groupe Eyrolles, 2006, ISBN : , ISBN 13 :

BTS/CGO P10 SYSTEME INFORMATION Année

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

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

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

Durée : 4 heures coefficient : 4 Le sujet se présente sous la forme de deux dossiers indépendants

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

A QUOI SERVENT LES BASES DE DONNÉES?

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

SOMMAIRE. Travailler avec les requêtes... 3

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Présentation Windows Azure Hadoop Big Data - BI

Auto-évaluation SQL. Document: f0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

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

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

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

EXCEL TUTORIEL 2012/2013

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

A QUOI SERVENT LES BASES DE DONNÉES?

CREATION WEB DYNAMIQUE

MySQL / SQL EXEMPLES

TP3 : Creation de tables 1 seance

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

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

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

Quelques aspects du Relationnel-Objet du SGBD Oracle

Les BASES de DONNEES dans WampServer

Session S12 Les bases de l optimisation SQL avec DB2 for i

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

Plan de formation : Certification OCA Oracle 11g. Les administrateurs de base de données (DBA) Oracle gèrent les systèmes informatiques

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

LE LANGAGE SQL2 1. INTRODUCTION

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

Encryptions, compression et partitionnement des données

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Introduction aux Bases de Données

Master Exploration Informatique des données DataWareHouse

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

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

INTRODUCTION AU DATA MINING

Historisation des données

TP Bases de données réparties

Corrigés détaillés des exercices

1. Base de données SQLite

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Création et Gestion des tables

Support de Cours REQUÊTES TRANSACT-SQL DANS MICROSOFT SQL SERVER Stéphane N GUESSAN Groupe Pigier Abidjan Version 1.

Gestion de références bibliographiques

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Cours: Les Jointures 1

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

Excel avancé. Frédéric Gava (MCF)

SUPPORT SQL. Thierry GRANDADAM

Transcription:

Rudiments SQL pour Oracle BDA_RCS 08-11-2014 1

La base de données Gestion des commandes 08-11-2014 2

Les noms de colonnes sont volontairement simplifiés 3

Ajout de nouvelles colonnes dans des tables qui existent déjà 4

Introduction au langage SQL 1- Définir les données (LDD ; Langage de Définition des Données gérées) 2- Manipulation de données (LMD ; Langage de Manipulation des Données) 3- Contrôle de de données (LCD ; Langage de Contrôle des Données) 5

2- Langage de Manipulation des Données Lors de la création la base de données sera vide, ne contient aucune donnée. Mais avant d aborder les requêtes de manipulation de données, nous supposons qu elle est remplie afin de pouvoir interroger ses données 6

2.1 SELECT Pour afficher les données sous la forme d un tableau dont les colonnes portent un intitulé, SQL propose l instruction SELECT... FROM...WHERE... dont voici des exemples d utilisation : -- pour afficher les numéros et les noms des -- clients SQL> SELECT numero, nom FROM clients; 7

-- pour afficher toutes les colonnes de la table articles SQL > SELECT * FROM articles; -- pour limiter les articles affichés à ceux qui coûtent moins de 100 (dinars) SQL> SELECT * FROM articles WHERE prix <= 100; 8

2.1.1 Colonnes calculées Dans la clause SELECT, on peut utiliser les opérateurs arithmétiques (+ - * /), l opérateur de concaténation des chaînes de caractères ( ) ou des fonctions SQL (comme MOD pour le modulo, FLOOR pour la troncature entière ou SUBSTR pour l extraction de sous-chaînes de caractères) 9

Exemples -- pour afficher le prix unitaire TTC des articles SELECT designation, prix * 1.196 AS "prix TTC" FROM articles; -- pour afficher l initiale + nom et l age des clients SELECT SUBSTR(prenom, 1, 1). nom AS "identité", FLOOR((SYSDATE - naissance) / 365.25) AS «âge", MOD((SYSDATE - naissance), 365) AS "nombre de jours depuis l anniversaire" FROM clients; 10

Dans cette même clause SELECT, on peut aussi utiliser les fonction d agrégation SQL (tableau 2) : syntaxe description COUNT SUM MIN MAX AVG dénombrement des lignes somme des valeurs numériques valeur numérique minimale valeur numérique maximale moyenne (average) des valeurs numériques 11

Exemples: -- pour afficher le prix de l article le plus cher, -- le prix le moins cher et le prix moyen Exemple 1 SELECT MAX(prix) AS "prix le plus cher", MIN(prix) AS "prix le moins cher", AVG(prix) AS "prix moyen" FROM articles; 12

Exemple 2: -- pour afficher le nombre de clients SELECT COUNT(numero) AS "nombre de clients" FROM clients; -- comme * signifie toutes les colonnes SELECT COUNT(*) AS "nombre de clients" FROM clients; 13

2.1.2 Clause WHERE La clause WHERE d une requête peut être très riche en conditions de sélection. D abord, tous les opérateurs de comparaison peuvent être utilisés -- pour afficher les clients dont la date de naissance n est pas le 25 décembre 1960. SELECT * FROM clients WHERE naissance <> 25/12/1960 ; 14

-- Pour afficher les clients dont connaît le code postal SELECT * FROM clients WHERE code_postal IS NOT NULL; Dans cet exemple, le mot-clé logique NOT est utilisé. Nous avons également à notre disposition les mots-clès AND et OR logiques 15

Exemple 3 -- pour afficher les articles bleus dont le prix est supérieur ou égal à 100 ou inférieur ou égal à 10 SELECT * FROM articles WHERE couleur = bleu AND (prix >= 100 OR prix <= 10); 16

En revanche, pour un segment de valeurs bornes incluses, il n est pas nécessaire d utiliser la syntaxe... >=... AND... <=..., car nous pouvons utiliser l opérateur BETWEEN : -- pour afficher les articles dont le prix est entre 10 et 100 SELECT * FROM articles WHERE prix BETWEEN 10 AND 100; 17

Ensuite, une condition de sélection peut faire intervenir une liste de valeurs, auquel cas c est l opérateur IN qui est approprié : -- pour afficher les clients qui ne s appellent ni Bilal, ni Mariam SELECT * FROM clients WHERE nom NOT IN ( Bilal, Mariam ); 18

Enfin, l opérateur de filtre LIKE et du caractère % qui remplace toute série de caractère(s) (y compris vide) -- pour afficher les clients dont le nom commence par M SELECT * FROM clients WHERE nom LIKE M% ; 19

-- pour afficher les clients dont le nom finit par a SELECT * FROM clients WHERE nom LIKE %a ; -- pour afficher les clients dont le nom ne contient pas s SELECT * FROM clients WHERE nom NOT LIKE %s% ; 20

2.1.3 Opérations sur le résultat Le résultat d une requête SELECT peut comporter plusieurs fois la même ligne. Pour éliminer les lignes doublons, il existe le mot-clé DISTINCT : -- pour afficher l ensemble des patronymes des clients SELECT DISTINCT nom FROM clients; 21

Ensuite, pour trier les lignes du résultat (ce qui n est pas le cas, par défaut), nous disposons de la clause ORDER BY : SELECT DISTINCT nom FROM clients ORDER BY nom ASC; ASC pour classer dans l ordre croissant DESC pour classer dans l ordre décroissant On peut utiliser dans la clause ORDER BY les alias de la clause SELECT 22

Enfin, pour ne garder que les 100 premières lignes du résultat, Oracle a prévu de numéroter les lignes du résultat dans une colonne cachée nommée ROWNUM : SELECT DISTINCT nom FROM clients WHERE ROWNUM <= 100 ORDER BY nom ASC; 23

2.1.4 Opérations ensemblistes UNION, INTERSECT et MINUS : -- pour afficher les identités de tous les clients -- et de tous les employés SELECT prenom nom AS "identité" FROM clients UNION SELECT prenom nom AS "identité" FROM employes ORDER BY "identité" ASC; 24

-- pour afficher les identités de tous les -- clients qui ont un homonyme parmi les -- employés SELECT prenom nom AS "identité" FROM clients INTERSECT SELECT prenom nom AS "identité" FROM employes ORDER BY "identité" ASC; 25

-- pour afficher les identités de tous les -- clients qui n ont pas d homonyme parmi -- les employés SELECT prenom nom AS "identité" FROM clients MINUS SELECT prenom nom AS "identité" FROM employes ORDER BY "identité" ASC; 26

Remarques Les règles à respecter avec ces opérations ensemblistes sont les suivantes : Les colonnes affichées par les deux requêtes doivent être compatibles, en nombre, en ordre et en type de données ; les éventuels alias ne sont définis que dans la première clause SELECT ; 27

Dernières remarques une éventuelle clause ORDER BY n est possible qu à la fin de la dernière requête, car elle agit sur le résultat final. par défaut, l opérateur UNION élimine les doublons ;pour les conserver, il faut utiliser l opérateur UNION ALL ; contrairement à UNION et INTERSECT, l opérateur MINUS n est pas commutatif, donc l ordre dans lequel les requêtes sont écrites, de part et d autre,a de l importance. 28

2.2 INSERT Lorsque l on connaît directement les valeurs à insérer, il faut utiliser une instruction INSERT INTO... VALUES par ligne : INSERT INTO clients(nom, prenom, code_postal) VALUES ( BOUB, Nabil, 16000 ); 29

Quelques remarque sur Insert Les valeurs qui sont données via VALUES doivent être dans le même ordre que les colonnes qui sont précisées dans le INTO ; et avec un type de données compatible à celui qui a été déclaré dans la table ; Toutes les colonnes qui ne sont pas précisées, reçoivent alors la valeur défaut qui leur a été attribuée(bien souvent, il s agit de la valeur NULL) ; 30

Exemple avec séquence CREATE SEQUENCE sq_clients MINVALUE 1 MAXVALUE 999999 START WITH 1 INCREMENT BY 1; INSERT INTO clients(numero, nom, prenom, code_postal) VALUES (sq_clients.nextval, Boub, Nabil, 1600 ); 31

Insertion à partir d une autre table -- insérons les commandes qui datent de plus de 6 mois dans cette table INSERT INTO /*+ Append */ commandes_anciennes(numero, jour, client) SELECT numero, jour, client FROM commandes WHERE (SYSDATE - jour) >= 180; 32

2.3 DELETE -- pour supprimer les commandes qui datent de plus de 6 mois DELETE FROM commandes WHERE (SYSDATE - jour) >= 180; -- suppression de toutes les commandes DELETE FROM commandes; 33

2.4 UPDATE Pour modifier la valeur d une ou plusieurs colonne(s), d une ou plusieurs ligne(s), mais dans une seule table, c est l instruction UPDATE... SET... WHERE... qu il faut utiliser : UPDATE articles SET prix = prix * 1.15; 34

Oracle 9I et 10G CREATE TABLE test1 AS SELECT * FROM all_objects WHERE 1=2; -- No matched clause, insert only. MERGE INTO test1 a USING all_objects b ON (a.object_id = b.object_id) WHEN NOT MATCHED THEN INSERT (object_id, status) VALUES (b.object_id, b.status); 35

Oracle 9I et 10G MERGE INTO test1 a USING all_objects b ON (a.object_id = b.object_id) WHEN MATCHED THEN UPDATE SET a.status = b.status WHERE b.status!= 'VALID' WHEN NOT MATCHED THEN INSERT (object_id, status) VALUES (b.object_id, b.status) WHERE b.status!= 'VALID'; 36

avec la Delete Clause MERGE INTO test1 a USING all_objects b ON (a.object_id = b.object_id) WHEN MATCHED THEN UPDATE SET a.status = b.status WHERE b.status!= 'VALID' DELETE WHERE (b.status = 'VALID'); 37

3 Jointures Pour afficher à la fois la date de commande et le nom du client qui a passé la commande, les deux tables commandes et clients doivent figurer dans la clause FROM et il faut rappeler la liaison entre ces deux tables, dans la clause WHERE :. -- Requête avec des alias de table SELECT a.numero, a.jour, b.numero, b.nom FROM commandes a, clients b WHERE a.client = b.numero; 38

Pour alléger la clause WHERE, il est d ailleurs recommandé d utiliser l opérateur JOIN (disponible avec les versions récentes d Oracle) dans la clause FROM : SELECT a.numero, a.jour, b.numero, b.nom FROM commandes a JOIN clients b ON (a.client = b.numero); 39

-- afficher les commandes complètes du client n 3945 SELECT c.designation, c.prix, b.quantite, c.prix * b.quantite AS "total" FROM commandes a, lignes_commandes b, articles c WHERE a.numero = b.commande AND b.article = c.numero AND a.client = 3945; 40

3.2 Auto-jointure Illustration via un exemple Afficher les numéros des clients qui ont commandé en même temps. La solution consiste à faire intervenir dans cette requête, deux fois la table des commandes (ce qui n est possible que grâce aux alias de table) avec une condition de jointure qui assure qu à chaque ligne, les deux clients sont distincts : 41

-- couples de clients qui ont commandé en -- même temps SELECT DISTINCT a.client, b.client FROM commandes a, commandes b WHERE a.client < b.client AND a.jour = b.jour; -- DISTINCT est indispensable car sinon, -- deux clients qui ont commandé en même temps -- deux fois, apparaîtraient deux fois. 42

Par ailleurs, pour compter les couples de clients, le mot-clé DISTINCT (qui est indispensable) doit apparaître à l intérieur de la fonction COUNT : -- nombre de couples de clients -- qui possède le même code postal SELECT COUNT(DISTINCT *) FROM clients a, clients b WHERE a.numero < b.numero AND a.code_postal = b.code_postal; 43

3.3 Jointure externe Clients Annuaire_clients numéro client nom client prénom client date naissance code postal numéro client <pi> Numérique (10) Caractère variable (30) Caractère variable (30) Date Numérique (8) <pi> <O> #n client n téléphone email adresse #n client <pi> <pi> Numérique (10) Numérique (10) Caractère variable (50) Caractère variable (250) <O> -- affichage de toutes les informations -- relatives à tous les clients SELECT * FROM clients a, annuaire_client b WHERE a.numero = b.numero (+); 44

Le signe + ne fonctionne pas avec l opérateur JOIN, il faut utiliser l opérateur LEFT OUTER JOIN : -- requête équivalente SELECT * FROM clients a LEFT OUTER JOIN annuaire_client b ON (a.numero= b.numero); 45

4 Sous-requêtes -- pour afficher les articles dont le prix -- est supérieur à tous ceux des articles bleus SELECT * FROM articles WHERE prix >= ( SELECT MAX(prix) FROM articles WHERE couleur = bleu ); 46

4.2 Sous-requête qui renvoient une colonne -- requête équivalente à la précédente SELECT * FROM articles WHERE prix >= ALL ( SELECT prix FROM articles WHERE couleur = bleu ); 47

Utilisation de l opérateur IN -- pour afficher les commandes des clients -- dont la date de naissance est le 13 mars 1950 SELECT *FROM commandes WHERE client IN ( SELECT numero FROM clients WHERE naissance = 13/03/1950 ); 48

4.3 Sous-requête qui renvoient plusieurs colonnes -- pour afficher toutes les informations -- complémentaires -- et l âge des 10 clients les moins âges SELECT *, FLOOR((SYSDATE - b.naissance) / 365.25) AS "âge" FROM ( SELECT * FROM clients WHERE ROWNUM <= 10 ORDER BY naissance DESC ) a, annuaire_client b WHERE a.client = b.numero (+); 49

4.4 Corrélation Une sous-requête peut avoir besoin d information provenant de la requête principale. On dit alors que la sous-requête est corrélée et le passage d information se fait par utilisation d alias de table 50

Exemple 1 SELECT a.article, a.quantite AS "quantité commandée maximale", b.client AS "client qui l a commandée" FROM lignes_commandes a, commandes b WHERE a.commande = b.numero AND a.quantite = ( SELECT MAX(c.quantite) FROM lignes_commmandes c WHERE c.article=a.article); 51

5.1 Clause GROUP BY Pour reconnaître une requête SELECT qui nécessite une clause GROUP BY, il suffit de se demander si le résultat doit afficher plusieurs valeurs d une même fonction d agrégation : -- pour afficher la quantité moyenne de -- chaque article sur une commande SELECT article, AVG(quantite) AS "quantité_moyenne"from lignes_commande GROUP BY article; 52

5.2 Clause GROUP BY --Pour afficher le nombre de commandes par client SELECT client, COUNT(numero) AS " nombre de commande " FROM commandes GROUP BY client; --Pour afficher le montant total de chaque commande SELECT a.commande, SUM(a.quantite * b.prix) AS " montant total " FROM lignes_commandes a, arictles b WHERE a.article=b.numero GROUP BY a.commande; 53

5.3 Clause HAVING Exemple -- pour afficher le nombre de commandes -- par client mais uniquement pour les -- clients qui ont 4 commandes ou plus SELECT client, COUNT(numero) AS "nombre de commandes" FROM commandes GROUP BY client HAVING COUNT(numero) >= 4; 54