Système de Gestion de Bases de Données I Prof : Soumia Kardoudi Année : 2016/2017
Programme: Concepts de base Présentation de SQL server Langage SQL Base de données Un Système de Gestion de Base de Données Un Système de Gestion de Base de Données Relationnel Présentation de SQL server Langage SQL Introduction SQL Langage de manipulation de données Langage de définition de données Langage de contrôle de transaction Langage de protections d’accès Fonctions SQL
Concepts de base Base de données: Une base de données (son abréviation est BD, en anglais DB, database) est un ensemble de données qui ont été stockées sur un support informatique, et organisées et structurées de manière à pouvoir facilement consulter et modifier leur contenu.
Utilité d'une base de données ? Une base de données permet de mettre des données à la disposition d'utilisateurs pour une consultation, une saisie ou bien une mise à jour, tout en s'assurant des droits accordés à ces derniers. Cela est d'autant plus utile que les données informatiques sont de plus en plus nombreuses. Une base de données peut être locale, c'est-à-dire utilisable sur une machine par un utilisateur, ou bien répartie, c'est-à-dire que les informations sont stockées sur des machines distantes et accessibles par réseau. L'avantage majeur de l'utilisation de bases de données est la possibilité de pouvoir être accédées par plusieurs utilisateurs simultanément.
Exemple base de données Prenons l'exemple d'un site web avec un système de news et de membres. On va utiliser une base de données MySQL pour stocker toutes les données du site : les news (avec la date de publication, le titre, le contenu, éventuellement l'auteur,…) et les membres (leurs noms, leurs emails,…). Tout ceci va constituer notre base de données pour le site. Mais il ne suffit pas que la base de données existe. Il faut aussi pouvoir la gérer, interagir avec cette base. Il faut pouvoir envoyer des message à MySQL (messages qu'on appellera "requêtes"), afin de pouvoir ajouter des news, modifier des membres, supprimer, et tout simplement afficher des éléments de la base. Une base de données seule ne suffit donc pas, il est nécessaire d'avoir également : un système permettant de gérer cette base ; un langage pour transmettre des instructions à la base de données (par l'intermédiaire du système de gestion).
Système de Gestion de Base de Données SGBD Un Système de Gestion de Base de Données (SGBD) est un logiciel (ou un ensemble de logiciels) permettant de: L'accès aux données de façon simple Autoriser un accès aux informations à de multiples utilisateurs Manipuler les données présentes dans la base de données (insertion, suppression, modification) SQL Server est un système de gestion de bases de données. SGBD BD
Le SGBD peut se décomposer en trois sous-systèmes : le système de gestion de fichiers : il permet le stockage des informations sur un support physique le SGBD interne : il gère l'ordonnancement des informations le SGBD externe : il représente l'interface avec l'utilisateur
SGBDR Système de Gestion de Base de Données Relationnelle Un SGBDR (système de gestion de base de données relationnelle) est tout simplement un SGBD, qui implémente la théorie relationnelle , c'est-à-dire gère les relations, c'est-à-dire qu'on peut définir des contraintes qui garantissent l'intégrité référentielle et fonctionnelle des données.
(attributs ou colonnes) SGBDR Champs (attributs ou colonnes) fabricant modèle fréquence Intel Pentium 4 3000 Tuples (enregistrements Ou lignes) Intel Pentium M 2000 table les données sont contenues dans ce qu'on appelle des relations, qui sont représentées sous forme de tables. Une relation est composée de deux parties, l'en-tête et le corps. L'en-tête est lui-même composé de plusieurs attributs. Par exemple, pour la relation "Client", on peut avoir l'en-tête suivant : Intel Pentium D 3000 AMD Athlon XP 2800 AMD Athlon 64 X2 3800 LE MODELE RELATIONNEL
SGBDR Différentes opérations peuvent alors être appliquées à ces relations, ce qui permet d'en tirer des informations. Parmi les opérations les plus utilisées, on peut : la sélection (ou restriction) : obtenir les lignes de $$A$$ répondant à certains critères ; la projection : obtenir une partie des attributs des lignes de $$A$$ ; l'union - $$A \cup B$$ : obtenir tout ce qui se trouve dans la relation A ou dans la relation B ; l'intersection - $$A \cap B$$ : obtenir tout ce qui se trouve à la fois dans la relation A et dans la relation B ; la différence - $$A - B$$ : obtenir ce qui se trouve dans la relation A mais pas dans la relation B ; la jointure - $$A \bowtie B$$ : obtenir l'ensemble des lignes provenant de la liaison de la relation A et de la relation B à l'aide d'une information commune. Base de Données est un ensemble de données qui ont été stockées sur un support informatique, et organisées et structurées de manière à pouvoir facilement consulter et modifier leur contenu. Un Système de Gestion de Base de Données (SGBD) est un logiciel (ou un ensemble de logiciels) permettant de: L'accès aux données de façon simple Autoriser un accès aux informations à de multiples utilisateurs Manipuler les données présentes dans la base de données (insertion, suppression, modification) SGBDR qui implémente la théorie relationnelle , c'est-à-dire gère les relations entre les tables
Présentation de SQL server Microsoft SQL Server est un système de gestion de base de données relationnelle développé par la société Microsoft. Il permet donc par son interface de créer et lister ses tables, en dessiner les diagrammes, y exécuter du code SQL appelé Transact-SQL, en visualisant son plan d'exécution, et de sauvegarder et lancer des procédures stockées et triggers. Ceci en fait une alternative compétitive avec MySQL et Oracle.
Présentation de SQL server SQL Server est chargé de : Stocker les données Vérifier les contraintes d’intégrité définies Garantir la cohérence des données qu’il stocke, même en cas de panne (arrêt brutal) du système Assurer les relations entre les données définies par les utilisateurs
Présentation de SQL server SQL Server dans son fonctionnement Bases de données Pour fonctionner, SQL Server utilise quatre bases de données : Master : base de données principales, elle contient l’ensemble des informations stratégiques nécessaires au bon fonctionnement du serveur, à savoir les métadonnées relatives à l'instance, les comptes d'ouverture de session, les points de terminaison, les serveurs liés et paramètres de configuration du système. Elle enregistre également l'existence de toutes les bases de données ainsi que l’emplacement de leurs fichiers. Model : stocke les informations permettant la création d’autres bases de données. MSDB : stocke les informations utilisées par le service SQL Server Agent : Contient toutes les informations relatives aux travaux programmés, aux alertes Tempdb : sert d’espace de stockage temporaire. Son contenu est vidé à chaque redémarrage de l’instance.
Présentation de SQL server SQL Server dans son fonctionnement Les fichiers Une base de données peut être constituée de 3 type de fichiers : Fichier primaire : ce fichier est obligatoire, il contient la structure de la base. Fichier log : fichier de journalisation qui contient toutes les modifications effectuées en base. Ce fichier est obligatoire et il peut y en avoir plusieurs. Fichier secondaire : il peut y en avoir plusieurs et n’est pas obligatoire. Il ne peut contenir que des données applicatives
Présentation de SQL server SQL Server dans son fonctionnement Les protocoles de connexion Mémoire partagée: Ce protocole est celui activé par défaut. Il ne nécessite aucune configuration et seules les personnes ou applications connectées localement peuvent avoir accès à la base de données. TCP/IP: Il s’agit du protocole le plus répandu et le plus utilisé. Les transmissions de données bénéficient des mécanismes d'amélioration des performances des sockets TCP/IP telles que le fenêtrage, les accusés de réception différés, etc... Ce protocole est donc Idéal donc pour des réseaux lents ou connectés via un WAN. Canaux nommés: Ce protocole utilise deux processus s’appelant mutuellement. Ces derniers peuvent être situés sur des serveurs différents. En comparaison au TCP/IP, un homologue n'envoie pas de données tant que l’autre homologue ne l'a pas demandé. Si l’application est installée sur le serveur de base de données, une utilisation de ce protocole de connexion est envisageable étant donné qu’il fonctionne en mode noyau et qu’il est extrêmement rapide.
Présentation de SQL server SQL Server dans son fonctionnement Authentification Il existe deux modes de connexion à SQL Server : Authentification Windows: En utilisant ce mode d’authentification, los informations d’identifications sont validées directement auprès du système d’exploitation, et ce via le protocole Kerberos. Dans le cas d’une infrastructure Active Directory, l’annuaire est interrogé afin d’authentifier l’utilisateur. Authentification Mixte: En utilisant de mode d’authentification, vous devrez créer et définir manuellement les comptes et les mots de passe d’accès à SQL Server. De ce fait, ces derniers ne seront plus stockés dans l’annuaire sinon dans la base de données elle-même. Pour information, le compte administrateur créé lors de l’installation est « sa » et il est désactivé lorsque l’authentification Windows est activée.
Présentation de SQL server SQL Server dans son fonctionnement Instance
Structured Query Language
Objectifs du SQL: Créer la structure de la base de données et de ses tables Exécuter les taches de base de la gestion des données telle que l’insertion, la modification et la suppression de données des tables. Effectuer des requêtes simples ou complexes
Historique SQL Le modèle relationnel a été inventé par Edgar Frank Codd (Directeur de recherche du centre IBM de San José) en 1970, suite à quoi de nombreux langages ont fait leur apparition: • IBM Sequel (Structured English Query Language) en 1977 • IBM Sequel/2 • IBM System/R • IBM DB2 Ce sont ces langages qui ont donné naissance au tandard SQL, normalisé en 1986 par l'ANSI (Association de Normalisation des Systèmes d’Information)pour donner SQL/86. Puis en 1989 la version SQL/89 a été approuvée. La norme SQL/92 a désormais pour nom SQL 2.
Le Langage SQL SQL se découpe en quatre grandes familles : LMD : Le langage de manipulation des données (DML, Data manipulation language). LDD : Le langage de description des données (DDL, Data definition language) LCD : Le langage de contrôle des données (DCL, Data control language) LCT : Le langage de contrôle des transactions (TCL, Transaction control language)
Syntaxe du langage SQL Commentaires: On peut insérer des commentaires de deux façons: Sur une ligne à partir de deux tirets -- ; Dans un bloc délimité par /* et par */. Noms: Tous les noms d’objets (table, colonne, variable, etc.) doivent respecter les règles suivantes : Ne pas dépasser 128 caractères parmi : les lettres (non accentuées), les chiffres, @, $, #, - ; Commencer par une lettre ; Ne pas contenir d’espace ;
Syntaxe du langage SQL Opérateurs: Les opérateurs arithmétiques disponibles sont : +, -, *, / et % le reste par division entière ; Les opérateurs de comparaison logique sont : <, <=, =, >=, > et <> (différent) ; Les autres opérateurs logique sont : AND, OR et NOT ; Et pour la concaténation des chaines de caractères on utilise +
Syntaxe du langage SQL Variables: Les principaux types disponibles sont : INT Entier DECIMAL (9,2) montant à 9 chiffres (décimaux) dont 2 après la virgule REAL réel flottant code sur 24 bits CHAR(64) Chaine de caractère de longueur fixe 64 VARCHAR(64) Chaine de caractère de longueur variable mais inferieure ou égale à 64 DATETIME date et/ou heure avec une précision de 3.33 ms
Le langage de manipulation de données (LMD) Un langage de manipulation de données LMD ( Data Manipulation Language, DML, en anglais) est un sous ensemble constitué des commandes logique opérant la manipulation des données (lectures et écritures) dans une base de données. Dans le langage SQL ce sont les commandes : SELECT, INSERT, DELETE, UPDATE et MERGE.
Le langage de manipulation de données (LMD) 1. Opération de Sélection L'instruction SELECT est la base du LMD, elle permet de renvoyer une table contenant les données correspondantes aux critères qu'elle contient. Seules les clauses "SELECT" et "FROM" sont obligatoires. La forme générale d'une instruction SELECT (on parle également de requête SELECT ) est : SELECT [ALL] | [DISTINCT] * | <liste de champs ou d'instructions d'agrégation> FROM <liste de tables> WHERE <condition> GROUP BY <champs de regroupement> HAVING <condition> ORDER BY <champs de tri> [DESC] | [ASC] SELECT liste des attributs à afficher ou liste [DISTINCT] mot clé facultatif (élimination des doublons ) FROM liste des noms de tables [WHERE] condition sur les attributs [GROUP BY] nom de l’attribut de regroupement [HAVING] condition de regroupement [ORDER BY] critère de tri [DESC] Ordre de tri descendant
Le langage de manipulation de données (LMD) 1. Opération de Sélection SELECT simple L’utilisation basique de cette commande s’effectue de la manière suivante: SELECT nom_champ FROM nom_tableau Cette requête SQL va sélectionner (SELECT) le champ nom_champ provenant (FROM) du tableau appelé nom_tableau Obtenir plusieurs colonnes Obtenir toutes les colonnes d’un tableau SELECT * FROM nom_tableau Afficher les noms société et téléphone des transporteurs select NomSociete, Telephone from dbo.Transporteur 2. Sélectionner toutes les colonnes du tableau transporteur select * from transporteur
Le langage de manipulation de données (LMD) 1. Opération de Sélection DISTINCT Dans le résultat d’un SELECT peut avoir des doublons. Pour éviter des redondances dans les résultats il faut simplement ajouter DISTINCT après le mot SELECT. SELECT DISTINCT ma_colone FROM nom_tableau Cette requête sélectionne le champ ma_colonne de la table nom_tableau en évitant de retourner des doublons. Par défaut SELECT ALL ma_colone FROM nom_tableau sélectionner les noms société des transporteurs select all NomSociete from transporteur 2. sélectionner les noms société unique des transporteurs select distinct NomSociete from transporteur
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE La commande WHERE dans une requête SQL permet d’extraire les lignes d’une base de données qui respectent une condition. Cela permet d’obtenir uniquement les informations désirées. SELECT nom_colonnes FROM nom_table WHERE condition afficher la liste des clients qui habitent à GRAZ select * from client where Ville='graz‘ select * from client where Ville like 'graz'
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE (Opérateurs de comparaison) Opérateur Description = Égale <> Pas égale != > Supérieur à < Inférieur à >= Supérieur ou égale à <= Inférieur ou égale à IN Liste de plusieurs valeurs possibles BETWEEN Valeur comprise dans un intervalle donnée (utile pour les nombres ou dates) LIKE Recherche en spécifiant le début, milieu ou fin d'un mot. IS NULL Valeur est nulle IS NOT NULL Valeur n'est pas nulle
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE C.1. SQL AND & OR L’opérateur AND permet de s’assurer que la condition1 ET la condition2 sont vrai : SELECT nom_colonnes FROM nom_table WHERE condition1 AND condition2 L’opérateur OR vérifie quant à lui que la condition1 OU la condition2 est vrai: SELECT nom=colonnes FROM nom=table WHERE condition1 OR condition2 Ces opérateurs peuvent être combinés à l’infini et mélangés (pour filtrer les données comme souhaités). L’exemple ci-dessous filtre les résultats de la table « nom_table » si condition1 ET condition2 OU condition3 est vrai : SELECT nom=colonnes FROM nom=table WHERE condition1 AND (condition2 OR condition3) afficher la liste des produit Boissons qui sont presque en rupture de stock (moins de 20 produits disponible)
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE C.2. SQL IN L’opérateur logique IN dans SQL s’utilise avec la commande WHERE pour vérifier si une colonne est égale à une des valeurs comprise dans set de valeurs déterminés. C’est une méthode simple pour vérifier si une colonne est égale à une valeur OU une autre valeur OU une autre valeur et ainsi de suite, sans avoir à utiliser de multiple fois l’opérateur OR. Pour chercher toutes les lignes où la colonne « nom_colonne » est égale à ‘valeur 1’ OU ‘valeur 2’ ou ‘valeur 3’, il est possible d’utiliser la syntaxe suivante: SELECT nom_colonne FROM table WHERE nom_colonne IN ( valeur1, valeur2, valeur3, ... ) afficher les nom clients et leurs adresses qui se trouve dans les villes suivants PARIS, LONDON, SAO PAULO, et MADRID select ContactNom, Adresse from dbo.Client where Ville in ('LONDON', 'PARIS', 'MADRID', 'SAO PAULO')
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE C.3. SQL BETWEEN L’opérateur BETWEEN est utilisé dans une requête SQL pour sélectionner un intervalle de données dans une requête utilisant WHERE. L’intervalle peut être constitué de chaînes de caractères, de nombres ou de dates. L’utilisation de la commande BETWEEN s’effectue de la manière suivante : SELECT * FROM table WHERE nom_colonne BETWEEN 'valeur1' AND 'valeur2‘ La requête suivante retournera toutes les lignes dont la valeur de la colonne « nom_colonne » sera comprise entre valeur1 et valeur2. L’exemple le plus concret consiste par exemple à récupérer uniquement les enregistrements entre 2 dates définies. afficher les employer qui se sont emboucher entre 1992-08-14 et 1993-11-07 SELECT * FROM dbo.Employe WHERE DateEmbauche BETWEEN '14-08-1992' AND '07-11-1993'
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE C.4. SQL LIKE L’opérateur LIKE est utilisé dans la clause WHERE des requêtes SQL. Ce mot-clé permet d’effectuer une recherche sur un modèle particulier. Il est par exemple possible de rechercher les enregistrements dont la valeur d’une colonne commence par telle ou telle lettre. Les modèles de recherches sont multiple. La syntaxe à utiliser pour utiliser l’opérateur LIKE est la suivante : SELECT * FROM table WHERE colonne LIKE modele Dans cet exemple le « modèle » n’a pas été défini, mais il ressemble très généralement à l’un des exemples suivants: afficher le salaires et l’adresses de tous les employées dont le nom contient a
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE C.4. SQL LIKE LIKE ‘%a’ : le caractère « % » est un caractère joker qui remplace tous les autres caractères. Ainsi, ce modèle permet de rechercher toutes les chaines de caractère qui se termine par un « a ». LIKE ‘a%’ : ce modèle permet de rechercher toutes les lignes de « colonne » qui commence par un « a ». LIKE ‘%a%’ : ce modèle est utilisé pour rechercher tous les enregistrement qui utilisent le caractère « a ». LIKE ‘pa%on’ : ce modèle permet de rechercher les chaines qui commence par « pa » et qui se terminent par « on », comme « pantalon » ou « pardon ». LIKE ‘a_c’ : peu utilisé, le caractère « _ » (underscore) peut être remplacé par n’importe quel caractère, mais un seul caractère uniquement (alors que le symbole pourcentage « % » peut être remplacé par un nombre incalculable de caractères . Ainsi, ce modèle permet de retourner les lignes « aac », « abc » ou même « azc ». afficher le nom, le salaires et l’adresses de tous les employées dont le nom contient a afficher le nom, le salaires et l’adresses de tous les employées dont le nom ce débute par la
Le langage de manipulation de données (LMD) 1. Opération de Sélection WHERE C.4. SQL IS NULL / IS NOT NULL Dans le langage SQL, l’opérateur IS permet de filtrer les résultats qui contiennent la valeur NULL. Cet opérateur est indispensable car la valeur NULL est une valeur inconnue et ne peut par conséquent pas être filtrée par les opérateurs de comparaison (cf. égal, inférieur, supérieur ou différent). Pour filtrer les résultats où les champs d’une colonne sont à NULL il convient d’utiliser la syntaxe suivante: SELECT * FROM `table` WHERE nom_colonne IS NULL A l’inverse, pour filtrer les résultats et obtenir uniquement les enregistrements qui ne sont pas null, il convient d’utiliser la syntaxe suivante: WHERE nom_colonne IS NOT NULL afficher tous les employées dont la region est null select * from employe where Region is null
Le langage de manipulation de données (LMD) 1. Opération de Sélection AS (alias) Dans le langage SQL il est possible d’utiliser des alias pour renommer temporairement une colonne ou une table dans une requête. Cette astuce est particulièrement utile pour faciliter la lecture des requêtes. La syntaxe pour renommer une colonne de colonne1 à c1 est la suivante: SELECT colonne1 AS c1, colonne2 FROM table Cette syntaxe peut également s’afficher de la façon suivante: SELECT colonne1 c1, colonne2 FROM table La syntaxe pour renommer une table dans une requête est la suivante: SELECT * FROM nom_table AS t1 Cette requête peut également s’écrire de la façon suivante: SELECT * FROM table t1 afficher le nom, prenom et telephonepersonnel de tous les employées on renomment telephonepersonnel par tel select Nom, Prenom, TelephonePersonnel as tel from employe
Le langage de manipulation de données (LMD) II.1 Opération de Sélection ORDER BY La commande ORDER BY permet de trier les lignes dans un résultat d’une requête SQL. Il est possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant ou descendant. SELECT colonne1, colonne2 FROM table ORDER BY colonne1 Par défaut les résultats sont classés par ordre ascendant, toutefois il est possible d’inverser l’ordre en utilisant le suffixe DESC après le nom de la colonne. Par ailleurs, il est possible de trier sur plusieurs colonnes en les séparant par une virgule. Une requête plus élaboré ressemblerais alors cela : SELECT colonne1, colonne2, colonne3 FROM table ORDER BY colonne1 DESC, colonne2 ASC Afficher Nom, prénom et date d’embauche des employées classifier par leurs date d’embauche select Nom, Prenom, DateEmbauche from employe ORDER BY DateEmbauche afficher nom, prénom et le salaire de tous les employées ayant le salaire moins que 5200 trié par salaire par ordre décroissent et par leur nom select Nom, Prenom, SalaireActuel from employe where SalaireActuel < 5200 ORDER BY SalaireActuel
Le langage de manipulation de données (LMD) 1. Opération de Sélection GROUP BY La commande ORDER BY est utilisée en SQL pour grouper plusieurs résultats et utiliser une fonction de totaux sur un groupe de résultat. Sur une table qui contient toutes les ventes d’un magasin, il est par exemple possible de liste regrouper les ventes par clients identiques et d’obtenir le coût total des achats pour chaque client. SELECT colonne1, fonction(colonne2) FROM table GROUP BY colonne1 Afficher pour chaque service le salaire max select MAX(SalaireActuel) from employe group by ServiceId
Le langage de manipulation de données (LMD) 1. Opération de Sélection HAVING La condition HAVING en SQL est presque similaire à WHERE à la seule différence que HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(), MIN() ou MAX(). L’utilisation de HAVING s’utilise de la manière suivante : SELECT colonne1, SUM(colonne2) FROM nom_table GROUP BY colonne1 HAVING fonction(colonne2) operateur valeur Cela permet donc de SÉLECTIONNER les colonnes DE la table «nom_table» en GROUPANT les lignes qui ont des valeurs identiques sur la colonne « colonne1 » et que la condition de HAVING soit respectée. Important : HAVING est très souvent utilisé en même temps que GROUP BY bien que ce ne soit pas obligatoire. afficher pour chaque service le salaire moyen, pour tout service ayant le salaire max à 6000 select avg(SalaireActuel) from employe group by ServiceId having MAX(salaireactuel)=6000
Le langage de manipulation de données (LMD) Opération de Sélection JOINTURE Les jointures en SQL permettent d’associer plusieurs tables dans une même requête. Cela permet d’exploiter la puissance des bases de données relationnelles pour obtenir des résultats qui combinent les données de plusieurs tables de manière efficace. Afficher le nom de l’employer, son salaire et nom de service
Le langage de manipulation de INNER JOIN B ON A.key = B.key données (LMD) 1. Opération de Sélection G.1. Jointure Interne jointure interne pour retourner les enregistrements qui ont une correspondance dans les deux tables. Ces jointures comprennent les équi-jointures et les jointures naturelles. C’est les jointures les plus communes. Afficher les commandes passer par la cliente maria anders et traiter par l’empoyé dufour select cd.* from dbo.Commande cd, dbo.Client c, dbo.Employe e where cd.ClientId= c.ClientId and c.ContactNom='maria anders' and cd.EmployeId=e.EmployeId and e.Nom='dufour' SELECT * FROM A INNER JOIN B ON A.key = B.key
Le langage de manipulation de données (LMD) 1. Opération de Sélection G.1. Jointure Interne Les jointures internes utilisent un opérateur de comparaison afin d'assurer la correspondance des lignes de deux tables basées sur des valeurs dans les colonnes communes de chaque table. Par exemple, l'extraction de toutes les lignes dont les employés travaillant à "DALLAS" Aussi en peut utiliser la clause where (voir l’exemple dans le commentaire) l'extraction de toutes les lignes dont les employés travaillant à "DALLAS" (utiliser les tables dept et emp voir les exercices) select emp* from emp, dept where emp.deptno = dept.deptno and loc='DALLAS'
Le langage de manipulation de données (LMD) 1. Opération de Sélection Les jointures externes peuvent être des jointures externes gauches, droites ou complètes. G.2. Jointure Externe : LEFT JOIN Ce type de jointure retourne toutes les lignes d’enregistrements de la table de gauche, qu’il y ait ou non une correspondance avec la table de droite. Les enregistrements de la table de droite qui sont présents dans la table de gauche sont également retournés. SELECT * FROM A LEFT JOIN B ON A.key = B.key
Le langage de manipulation de données (LMD) 1. Opération de Sélection G.2. Jointure Externe : LEFT JOIN (sans l’intersection de B) Ce type de jointure afficher que les enregistrements de la table de gauche non-présents dans celle de droite SELECT * FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL
Le langage de manipulation de données (LMD) 1. Opération de Sélection G.2. Jointure Externe : RIGHT JOIN Ce type de jointure retourne toutes les lignes d’enregistrements de la table de droite, qu’il y ait ou non une correspondance avec la table de gauche. Les enregistrements de la table de gauche qui sont présents dans la table de droite sont également retournés. SELECT * FROM A RIGHT JOIN B ON A.key = B.key
Le langage de manipulation de données (LMD) 1. Opération de Sélection G.2. Jointure Externe : RIGHT JOIN (sans l’intersection de A) Ce type de jointure afficher que les enregistrements de la table de droite non-présents dans celle de gauche SELECT * FROM A RIGHT JOIN B ON A.key = B.key WHERE B.key IS NULL
Le langage de manipulation de données (LMD) 1. Opération de Sélection G.2. Jointure Externe : FULL JOIN Ce type de jointure retourne les lignes d’enregistrements de la table de gauche qui ne sont pas présentes dans la table de droite et vice-versa. SELECT * FROM A FULL JOIN B ON A.key = B.key
Le langage de manipulation de JOIN tablea T2 ON T1.champ = T2.champ données (LMD) 1. Opération de Sélection G.3. Auto-jointures Il est possible de joindre une table sur elle-même dans une jointure réflexive. Vous pouvez utiliser une jointure réflexive lorsque vous souhaitez créer un jeu de résultats qui joint des enregistrements d'une table à d'autres enregistrements de cette même table. Pour faire deux fois référence à une table dans une même requête, vous devez fournir un alias de table pour au moins une instance du nom de table. Exemple : SELECT * FROM tablea T1 JOIN tablea T2 ON T1.champ = T2.champ Aussi en peut utiliser la clause where dans les Auto-jointures (voir l’exemple dans le commentaire) Afficher le Noms et dates d'embauche des employés embauchés avant leur manager, avec le nom et la date d'embauche du manager (utiliser les tables dept et emp voir les exercices) select e.ename, e.hiredate, m.ename, m.hiredate from emp e, emp m where e.mgr=m.empno and e.hiredate < m.hiredate
Le langage de manipulation de données (LMD) 2. Instruction INSERT L’insertion de données dans une table s’effectue à l’aide de la commande INSERT INTO. Cette commande permet au choix d’inclure une seule ligne à la base existante ou plusieurs lignes d’un coup. Insérer une ligne en spécifiant toutes les colonnes INSERT INTO table VALUES ('valeur 1', 'valeur 2', ...) Cette syntaxe possède les avantages et inconvénients suivants : Obliger de remplir toutes les données, tout en respectant l’ordre des colonnes Il n’y a pas le nom de colonne, donc les fautes de frappe sont limitées. Par ailleurs, les colonnes peuvent être renommées sans avoir à changer la requête L’ordre des colonnes doit resté identique sinon certaines valeurs prennent le risque d’être complétée dans la mauvaise colonne
Le langage de manipulation de données (LMD) 2. Instruction INSERT Insérer une ligne en spécifiant seulement les colonnes souhaitées INSERT INTO table (nom_colonne_1, nom_colonne_2, ... VALUES ('valeur 1', 'valeur 2', ...) Il est possible de ne pas renseigner toutes les colonnes. De plus, l’ordre des colonnes n’est pas important. Lorsque le champ à remplir est de type VARCHAR ou TEXT il faut indiquer le texte entre guillemet simple. En revanche, lorsque la colonne est un numérique tel que INT ou BIGINT il n’y a pas besoin d’utiliser de guillemet, il suffit juste d’indiquer le nombre. A noter, pour spécifier en une seule fois plusieurs insertion, il faut séparer les attributions de valeur par des virgules. Ainsi la syntaxe deviendrait la suivante INSERT INTO table (nom_colonne_1, nom_colonne_2, ... ) VALUES ('valeur 1', 'valeur 2', ...), ('valeur 1', 'valeur 2', ...) , ('valeur 1', 'valeur 2', ...), ('valeur 1', 'valeur 2', ...) Copier une table : select * into nom_nouveau_table from nom_table
Le langage de manipulation de données (LMD) 3. Instruction UPDATE La commande UPDATE permet d’effectuer des modifications sur des lignes existantes. Très souvent cette commande est utilisée avec WHERE pour spécifier sur quelles lignes doivent porter la ou les modifications. UPDATE table SET nom_colonne_1 = 'nouvelle valeur’ WHERE condition Cette syntaxe permet d’attribuer une nouvelle valeur à la colonne nom_colonne_1 pour les lignes qui respectent la condition stipulé avec WHERE. Il est aussi possible d’attribuer la même valeur à la colonne nom_colonne_1 pour toutes les lignes d’une table si la condition WHERE n’était pas utilisée. A noter, pour spécifier en une seule fois plusieurs modification, il faut séparer les attributions de valeur par des virgules. Ainsi la syntaxe deviendrait la suivante : UPDATE table SET colonne_1 = 'valeur 1', colonne_2 = 'valeur 2', colonne_3 = 'valeur 3'
Le langage de manipulation de données (LMD) 4. Instruction DELETE La commande DELETE en SQL permet de supprimer des lignes dans une table. En utilisant cette commande associé à WHERE il est possible de sélectionner les lignes concernées qui seront supprimées. DELETE FROM `table` WHERE condition Attention : s’il n’y a pas de condition WHERE alors toutes les lignes seront supprimées et la table sera alors vide. Supprimer une ligne DELETE FROM `utilisateur` WHERE `id` = 1 Supprimer plusieurs lignes Si l’ont souhaite supprimer les utilisateurs qui se sont inscrit avant le 10/04/2012, il va falloir effectuer la requête suivante : DELETE FROM `utilisateur` WHERE `date_inscription` < '2012-04-10’
Le langage de manipulation de données (LMD) 4. Instruction DELETE Supprimer toutes les données Pour supprimer toutes les lignes d’une table il convient d’utiliser la commande DELETE sans utiliser de clause conditionnelle. DELETE FROM `utilisateur` Supprimer toutes les données (TRUNCATE) Pour supprimer toutes les lignes d’une table, il est aussi possible d’utiliser la commande TRUNCATE, de la façon suivante : TRUNCATE TABLE `utilisateur` Cette requête est similaire (à delete). La différence majeure étant que la commande TRUNCATE va ré-initialiser l’auto-incrémente s’il y en a un. Tandis que la commande DELETE ne ré-initialise pas l’auto-incrément.
Le Langage SQL SQL se découpe en quatre grandes familles : LMD : Le langage de manipulation des données (DML, Data manipulation language). LDD : Le langage de définition des données (DDL, Data definition language) LCD : Le langage de contrôle des données (DCL, Data control language) LCT : Le langage de contrôle des transactions (TCL, Transaction control language)
Langage de Définition de Données (LDD) LDD est le sous ensemble du langage SQL, pour créer modifier et supprimer des objets de base de données, en utilisant quatre types de commandes : CREATE : création de la structure ALTER : modification de la structure DROP : suppression des données et de la structure qui peuvent porter sur les objets (TABLE, VIEW, USER …) TABLE : table unité de stockage élémentaire composé de lignes et de colonnes INDEX : index améliore les performances de certaines requetes VIEW : table virtuelle représente d’une manière logique des sous groupes de données USER : utilisateur
Langage de Définition de Données (LDD) 1. Création base de données 1.1 Conventions de Dénomination Un nom : Doit commencer par une lettre Peut comporter de 1 à 249 caractères Ne peut contenir que les caractères A à Z, a à z, 0 à 9, (=, $, et #, et espaces déconseillés) Ne doit pas porter le nom d’un autre objet appartenant au même utilisateur Ne doit pas être un mot réservé à SQL Server Utilisez des noms signifiants
Langage de Définition de Données (LDD) Create database ma_base 1. Création base de données 1.2 L’ordre create database Pour créer une base de données qui sera appelé "ma_base" il suffit d’utiliser la requête suivante qui est très simple: Create database ma_base Utilisez des noms signifiants
Langage de Définition de Données (LDD) 1. Création base de données 1.2 L’ordre create database Le chemin par défaut des fichiers journaux et primaire: C:\Program Files\Microsoft SQL server\MSSQL10_50.MSSQLSERVER\MSSQL\data Fichier de données primaire (.mdf) B.D Fichiers journaux (.ldf) Fichiers de données secondaires (.ndf) Le fichier de données primaire constitue le point de départ de la base de données et il pointe vers les autres fichiers de la base de données. Chaque base de données comprend un fichier de données primaire. L'extension de fichier recommandée est .mdf. Fichiers de données secondaires constituent tous les fichiers de données autres que le fichier de données primaires. Certaines bases de données possèdent plusieurs fichiers de données secondaires, tandis que d'autres n'en possèdent aucun. L'extension de fichier recommandée est .ndf. Fichiers journaux contiennent toutes les informations de suivi nécessaires à la récupération de la base de données. Il doit exister au moins un fichier journal par base de données. L'extension de fichier recommandée est .ldf.
Langage de Définition de Données (LDD) 1. Création base de données 1.2 L’ordre create database Create database NomBD On primary ( NAME = Nomlogique, FILENAME = 'chemain\fichier.mdf', SIZE = 10Mb, MAXSIZE = 50Mb, FILEGROWTH = 5 Mb) LOG ON ( NAME = Nomlogique, FILENAME = 'chemain\fichier.ldf', SIZE = 10Mb, MAXSIZE = 50Mb, FILEGROWTH = 5 Mb);
Langage de Définition de Données (LDD) Les tables 1. Création base de données 1.3 L’ordre Drop database Drop database ma_base permet de supprimer totalement une base de données et tout ce qu’elle contient. Cette commande est à utiliser avec beaucoup d’attention car elle permet de supprimer tout ce qui est inclus dans une base: les tables, les données, les index .. Utilisez des noms signifiants
Langage de Définition de Données (LDD) 2. Création des tables 2.1 Types de données Les types de base pour les valeurs d’une colonne proposés par SQL Server Utilisez des noms signifiants
Langage de Définition de Données (LDD) 2. Création des tables 1.1 Types de données Utilisez des noms signifiants
Langage de Définition de Données (LDD) 2. Création des tables 1.1 Types de données Utilisez des noms signifiants
Langage de Définition de Données (LDD) 2. Création des tables 1.1 Types de données Utilisez des noms signifiants
Langage de Définition de Données (LDD) 2. Création des tables 2.2 L’ordre create table CREATE TABLE [schema.]table (column1 datatype [DEFAULT expr], column2 datatype, ...) Schema: nom du schema Table nom de la table Column1,column2: nom de la colonne Datatype: type de données et longueur de la colonne DEFAULT expr: spécifie une valeur par défaut Une base de données contient un ou plusieurs schéma(s) nommé(s) qui, eux, contiennent des tables. Les schémas contiennent aussi d'autres types d'objets nommés (types de données, fonctions et opérateurs, par exemple). Le même nom d'objet peut être utilisé dans différents schémas sans conflit ; par exemple, schema1 et mon_schema peuvent tous les deux contenir une table nommée ma_table. À la différence des bases de données, les schémas ne sont pas séparés de manière rigide : un utilisateur peut accéder aux objets de n'importe quel schéma de la base de données à laquelle il est connecté, sous réserve qu'il en ait le droit. Il existe plusieurs raisons d'utiliser les schémas : autoriser de nombreux utilisateurs à utiliser une base de données sans interférer avec les autres ; organiser les objets de la base de données en groupes logiques afin de faciliter leur gestion ; les applications tiers peuvent être placées dans des schémas séparés pour éviter les collisions avec les noms d'autres objets. Les schémas sont comparables aux répertoires du système d'exploitation, à ceci près qu'ils ne peuvent pas être imbriqués. Exemple: create table T_TYPE ( TYP_CODE CHAR(8), TYP_LIBELLE VARCHAR(32) );
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité On fait appel à des contraintes pour empêcher l'entrée de données incorrectes dans des tables. Il s’agit d’une Approche non spécifique à SQL Server mais mis en œuvre par tous les SGBD conformes au modèle relationnel à la norme SQL.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité On utilise des contraintes pour : Appliquer des règles au niveau d'une table chaque fois qu'une ligne est insérée, mise à jour ou supprimée dans cette table. La contrainte doit être satisfaite pour que l'opération réussisse. Empêcher la suppression d'un enregistrement s'il y a une dépendance avec un autre enregistrement de la table en relation. Éviter la suppression d'une table dont dépend une autre table. Appliquer des règles aux valeurs insérées dans une colonne pour vérifier qu’elles sont conformes aux règles définies
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Types d’intégrité des données Intégrité de domaine Spécifie un ensemble de valeurs pour une colonne Détermine si les valeurs nulles sont autorisées Implémentation par contrôle de validité Intégrité des entités Toute ligne doit avoir un identifiant unique Notion de clé primaire Intégrité référentielle Assure l’intégrité des relations entre la clé primaire de la table référencée et les clés étrangères On ne peut supprimer une ligne ni modifier la clé primaire si une clé étrangère y fait référence DEFAULT NOT NULL CHECK UNIQUE PRIMARY KEY IDENTITY FOREIGN KEY
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité:Types de contraintes : DEFAULT NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK IDENTITY
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Valeur par défaut (DEFAULT) La contrainte DEFAULT permet de préciser une valeur qui sera automatiquement insérée en l'absence de précision d'une valeur explicite dans un ordre d'insertion CREATE TABLE T_PERSONNE2 (PRS_ID INTEGER, PRS_NOM VARCHAR(32), PRS_PRENOM VARCHAR(32), PRS_SEXE CHAR(1) DEFAULT 'M', PRS_DATE_NAISSANCE DATE DEFAULT getdate()); CURRENT_DATE (oracle)
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Obligatoire (NOT NULL) On peut rendre la saisie d'une colonne obligatoire en apposant le mot clef NOT NULL. Dans ce cas, la colonne devra toujours être renseigné lors des ordres d'insertion INSERT et de modification UPDATE. Si l'on désire que la colonne puisse ne pas être renseignée (donc accepter les marqueurs NULL), il n'est pas nécessaire de préciser le mot clef NULL CREATE TABLE T_PERSONNE1 (PRS_ID INTEGER NOT NULL, PRS_NOM VARCHAR(32) NOT NULL, PRS_PRENOM VARCHAR(32) NULL, PRS_DATE_NAISSANCE DATE); insertion et modification acceptées : INSERT INTO T_PERSONNE1 VALUES (1, 'DUPONT', NULL, NULL) INSERT INTO T_PERSONNE1 (PRS_ID, PRS_NOM) VALUES (2, 'DURAND') insertion et modification refusées : INSERT INTO T_PERSONNE1 VALUES (3, NULL, 'Marcel', NULL) INSERT INTO T_PERSONNE1 (PRS_ID, PRS_PRENOM) VALUES (4, 'Jean')
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Unicité (UNIQUE) Une contrainte d'intégrité de type clé UNIQUE exige que chaque valeur dans une colonne ou dans un ensemble de colonnes soit unique CREATE TABLE T_PERSONNE7 (PRS_NOM VARCHAR(32), PRS_PRENOM VARCHAR(32), PRS_TELEPHONE CHAR(14) UNIQUE) ; INSERT INTO T_PERSONNE7 VALUES ('Dupont', 'Marcel', '01 44 21 57 18') INSERT INTO T_PERSONNE7 VALUES ('Duval', 'André', NULL) INSERT INTO T_PERSONNE7 VALUES ('Durand', 'Jean', '06 11 86 46 69') INSERT INTO T_PERSONNE7 (PRS_NOM, PRS_PRENOM) VALUES ('Dubois', 'Claude') INSERT INTO T_PERSONNE7 VALUES ('Dugland', 'Alfred', '06 11 86 46 69') Violation de la contrainte UNIQUE KEY REMARQUE : Dans cet exemple Dugland n'a pas été inséré car son numéro de téléphone est identique à Durand. certains SGBDR comme MS SQL Server refuse de voir la présence de plusieurs marqueurs NULL dans la cas d'une contrainte d'unicité.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Unicité (UNIQUE) Un contrainte d'unicité peut être portée sur plusieurs colonnes. Dans ce cas chaque n-uplets de valeurs explicite doit être différents.Dans ce cas la syntaxe est : CONSTRAINT nom_contrainte UNIQUE (liste_colonne) Exemple: CREATE TABLE T_PERSONNE10 (PRS_ID INTEGER, PRS_NOM VARCHAR(32), PRS_PRENOM VARCHAR(32), CONSTRAINT UNI_NOM_PRENOM UNIQUE (PRS_NOM, PRS_PRENOM)) ; INSERT INTO T_PERSONNE10 VALUES (1, 'Dupont', 'Marcel') INSERT INTO T_PERSONNE10 VALUES (2, 'Duval', 'André') INSERT INTO T_PERSONNE10 VALUES (3, 'Dupond', NULL) INSERT INTO T_PERSONNE10 VALUES (4, NULL, NULL) INSERT INTO T_PERSONNE10 VALUES (5, NULL, 'Alfred') INSERT INTO T_PERSONNE10 VALUES (6, 'Duval', 'André') Violation de la contrainte UNIQUE KEY 'UNI_NOM_PRENOM' certains SGBDR comme MS SQL Server refuse de voir la présence de plusieurs marqueurs NULL dans la cas d'une contrainte d'unicité.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Clé primaire (PRIMARY KEY) La contrainte PRIMARY KEY assure qu'il n'y aura aucune valeur redondante (doublon) dans la colonne. Une table ne peut contenir qu'une seule contrainte PRIMARY KEY. Exemple: CREATE TABLE T_PERSONNE5 (PRS_ID INTEGER PRIMARY KEY, PRS_NOM VARCHAR(32), PRS_PRENOM VARCHAR(32));
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Clé primaire (PRIMARY KEY) La clef d'une table peut être composée de plusieurs colonnes. Dans ce cas la syntaxe est : CONSTRAINT nom_contrainte PRIMARY KEY (liste_colonne) Exemple: CREATE TABLE T_PERSONNE9 (PRS_NOM VARCHAR(32) NOT NULL, PRS_PRENOM VARCHAR(32) NOT NULL, PRS_TELEPHONE CHAR(14), CONSTRAINT PK_PRS PRIMARY KEY (PRS_NOM, PRS_PRENOM)); Toutes les colonnes définies dans une contrainte PRIMARY KEY doivent avoir la valeur NOT NULL. Si vous ne spécifiez pas la possibilité ou non de valeurs NULL, toutes les colonnes participant à une contrainte PRIMARY KEY sont définies à NOT NULL.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Intégrité référentielle (FOREIGN KEY / REFERENCES) La contrainte de type FOREIGN KEY permet de mettre en place une intégrité référentielle entre une (ou plusieurs) colonnes d'une table afin d'assurer les relations existantes et joindre les tables dans le requête selon le modèle relationnel que l'on a défini. Exemple: CREATE TABLE T_FACTURE1 (FTC_ID INTEGER, PRS_ID INTEGER FOREIGN KEY REFERENCES T_PERSONNE5 (PRS_ID) , FCT_DATE DATE, FCT_MONTANT DECIMAL(16,2)); La table T_FACTURE1 est liée à la table T_PERSONNE5 et ce lien se fait entre la clef étrangère PRS_ID de la table T_FACTURE1 et la clef de la table T_PERSONNE5 qui s'intitule aussi PRS_ID. INSERT INTO T_PERSONNE5 VALUES (1, 'Dupont', 'Marcel') INSERT INTO T_PERSONNE5 VALUES (2, 'Duval', 'André') INSERT INTO T_FACTURE1 VALUES (1, 1, '2002-03-15', 1256.45) INSERT INTO T_FACTURE1 VALUES (1, 2, '2002-04-22', 7452.89) (Tentative d'insertion d'une facture dont la personne n'est pas référencé dans la table T_PERSONNE5) INSERT INTO T_FACTURE1 VALUES (1, 3, '2002-03-15', 1256.45) Conflit entre l'instruction INSERT et la contrainte COLUMN FOREIGN KEY (Tentative de suppression d'une personnet possédant encore des factures) DELETE FROM T_PERSONNE5 WHERE PRS_NOM = 'Dupont'; Conflit entre l'instruction DELETE et la contrainte COLUMN REFERENCE
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Intégrité référentielle (FOREIGN KEY / REFERENCES) Comme dans la cas d'une contrainte référentielle de colonne, il est possible de placer une contrainte d'intégrité portant sur plusieurs colonne. Ceci est d'autant plus important qu'il n'est pas rare de trouver des tables dont la clef est composée de plusieurs colonnes. La syntaxe est la suivante : CONSTRAINT nom_contrainte FOREIGN KEY (liste_colonne) REFERENCES nom_table_ref (liste_colonne_ref)
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Intégrité référentielle (FOREIGN KEY / REFERENCES) Exemple: CREATE TABLE T_FACTURE2 (FTC_ID INTEGER, PRS_NOM VARCHAR(32), PRS_PRENOM VARCHAR(32), FCT_DATE DATE, FCT_MONTANT DECIMAL(16,2), CONSTRAINT FK_FCT_PRS FOREIGN KEY (PRS_NOM, PRS_PRENOM) REFERENCES T_PERSONNE9 (PRS_NOM, PRS_PRENOM)) La table T_FACTURE2 est liée à la table T_PERSONNE9 et ce lien se fait entre la clef étrangère composite PRS_NOM / PRS_PRENOM de la table T_FACTURE2 et la clef de la table T_PERSONNE9 elle même composée des colonnes PRS_NOM / PRS_PRENOM.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Intégrité référentielle cascade Les contraintes d'intégrité référentielle en cascade définissent les actions exécutées par SQL Server lorsqu'un utilisateur tente de supprimer ou de mettre à jour une clé vers laquelle pointent des clés étrangères existantes. Les clauses REFERENCES des instructions CREATE TABLE et ALTER TABLE prennent en charge les clauses ON DELETE et ON UPDATE. Les actions en cascade peuvent également être définies à l'aide de la boîte de dialogue Relations de clé étrangère : [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Intégrité référentielle cascade [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] ON DELETE CASCADE Indique qu'en cas de tentative de suppression d'une ligne possédant une clé référencée par des clés étrangères dans des lignes d'autres tables, toutes les lignes contenant ces clés étrangères sont également supprimées. ON UPDATE CASCADE Spécifie qu'en cas de tentative de mise à jour, dans une ligne, d'une valeur de clé référencée par des clés étrangères dans des lignes d'autres tables, toutes les valeurs qui composent la clé étrangère sont également mises à jour et remplacées par la nouvelle valeur spécifiée pour la clé. CONSTRAINT fk_name FOREIGN KEY (child_col1, child_col2, ... child_col_n) REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n) ON DELETE CASCADE On UPDATE CASCADE
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Intégrité référentielle cascade [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] ON DELETE SET NULL Spécifie qu'en cas de tentative de suppression d'une ligne possédant une clé référencée par des clés étrangères dans des lignes d'autres tables, toutes les valeurs qui composent la clé étrangère des lignes référencées prennent la valeur NULL. Cette contrainte ne peut être exécutée que si toutes les colonnes de clé étrangère de la table cible acceptent des valeurs NULL.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Intégrité référentielle cascade [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] ON DELETE SET DEFAULT Spécifie qu'en cas de tentative de suppression d'une ligne possédant une clé référencée par des clés étrangères dans des lignes d'autres tables, toutes les valeurs qui composent la clé étrangère des lignes référencées prennent leur valeur par défaut. Cette contrainte ne peut être exécutée que si toutes les colonnes de clé étrangère de la table cible possèdent une définition par défaut. Si une colonne accepte des valeurs NULL et qu'aucune valeur par défaut explicite n'est définie, NULL devient la valeur par défaut implicite de la colonne.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Validation (CHECK) La contrainte CHECK de validation est celle qui offre le plus de possibilité. En contre partie son exécution est très coûteuse. Elle permet de définir un prédicat complexe, basé sur une comparaison pouvant contenir une requête de type SELECT. Pour valider la contrainte, le prédicat doit être évalué à TRUE ou UNKNOWN (présence de NULL). Sa syntaxe est : CHECK ( condition) où condition peut contenir le mot clef VALUE pour faire référence à la colonne pour laquelle la contrainte est définie.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Validation (CHECK) Exemple: CREATE TABLE T_PERSONNE8 (PRS_ID INTEGER CHECK (VALUE > 0), PRS_NOM VARCHAR(32) CHECK (CHARACTER_LENGTH(VALUE) > 2), PRS_PRENOM VARCHAR(32), PRS_SEXE CHAR(1) CHECK (VALUE IN ('M', 'F))); La colonne PRS_ID ne peut avoir de valeurs inférieures à 0. La colonne PRS_NOM doit avoir des valeurs contenant au moins 2 caractères. La colonne PRS_SEXE peut avoir exclusivement les valeurs M ou F.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Auto incrément (IDENTITY) Le mécanisme d’auto incrément de SQL Server via la propriété IDENTITY fait désormais partie de la norme SQL:2003. dont la syntaxe est la suivante : IDENTITY [ ( #graine , #pas ) ] ou #graine est la valeur de départ et #pas le pas d’incrément. En l’absence des valeurs #graine et #pas le défaut est de 1 pour les deux (commence à 1 avec un pas de 1). Ainsi :IDENTITY (8192, 7) Signifie que l’auto incrément commencera à 8192 et augmentera de 7 à chaque nouvelle ligne insérée.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Auto incrément (IDENTITY) Exemple: CREATE TABLE T_CLIENT_CLI (CLI_ID INT NOT NULL IDENTITY(12485, 1) PRIMARY KEY, CLI_NOM CHAR(32) NOT NULL, CLI_PRENOM VARCHAR(25)); syntaxe omettant la liste des colonnes INSERT INTO T_CLIENT_CLI VALUES ('DUPONT', 'Paul'); syntaxe avec la liste des colonnes non IDENTITY INSERT INTO T_CLIENT_CLI (CLI_NOM, CLI_PRENOM) VALUES ('DUPONT', 'Paul'); il ne peut y avoir qu’une seule colonne auto incrémentée par table. Ce n’est pas parce que vous dotez une colonne de la propriété IDENTITY, que cette dernière devient une clef primaire. Ce n’est pas parce que vous dotez une colonne de la propriété IDENTITY, que les valeurs de cette colonne sont automatiquement unique.
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Auto incrément (IDENTITY) Il est possible de forcer une valeur dans la colonne pourvue de la propriété IDENTITY. Pour ce faire il faut utiliser le flag : SET IDENTITY_INSERT #MaTable { ON | OFF } Dans ce cas, les INSERT devront mentionner impérativement la liste des colonnes et la colonne pourvue de la propriété IDENTITY devra y figurer. Exemple : SET IDENTITY_INSERT T_CLIENT_CLI ON; INSERT INTO T_CLIENT_CLI (CLI_ID, CLI_NOM, CLI_PRENOM) VALUES (-1, 'DUPONT', 'Paul'); SET IDENTITY_INSERT T_CLIENT_CLI OFF; Notez que si vous utilisez une valeur supérieur au dernier « jeton» consommé, alors la valeur courante du générateur sera repoussée. Résultat : SELECT * FROM T_CLIENT_CLI CLI_ID CLI_NOM CLI_PRENOM ----------- -------------- ------------ -1 DUPONT Paul 12486 DUPONT Paul 12487 DUPONT Paul
Langage de Définition de Données (LDD) 2. Création des tables 2.3 Gestion des contraintes d’intégrité: Auto incrément (IDENTITY) Récupérer la valeur du dernier auto incrément Exemple :SELECT IDENT_CURRENT('dbo.T_CLIENT_CLI') SQL Server dispose de 3 outils pour récupérer la valeur du dernier auto incrément. La variable @@IDENTITY La fonction SCOPE_IDENTITY() IDENT_CURRENT(‘nom_table‘)
Langage de Définition de Données (LDD) 3. Modification des tables: (Alter table) ON utilise l'ordre ALTER TABLE pour : Ajouter une colonne Modifier une colonne existante Définir une contraints pour une colonne Supprimer une colonne
Langage de Définition de Données (LDD) 3. Modification des tables: (Alter table) 3.1 Ajouter une colone: ALTER TABLE nom_table ADD nom_column datatype [contraintes d’intégrité] Exemple : ALTER TABLE Auditeur ADD Moyenne Decimal(4,2); La nouvelle colonne est placée à la fin.
Langage de Définition de Données (LDD) 3. Modification des tables: (Alter table) 3.1 Ajouter une colonne: Ajout d’une contrainte ALTER TABLE NomTable ( ADD CONSTRAINT FK_MaCleEtrangere FOREIGN KEY (NomColonne) REFERENCES MyTable (NomColonne) ) ALTER TABLE NomTable ( ADD CONSTRAINT FK_MaCleEtrangere FOREIGN KEY (NomColonne) REFERENCES MyTable (NomColonne) )
Langage de Définition de Données (LDD) 3. Modification des tables: (Alter table) 3.2 modifier une colonne existante : ALTER TABLE nom_table ALTER COLUMN nom_colonne datatype Exemple : ALTER TABLE Auditeur ALTER COLUMN Moyenne Decimal(3,2); La nouvelle colonne est placée à la fin. Vous pouvez modifier le type de données, la taille d'une colonne.
Langage de Définition de Données (LDD) 3. Modification des tables: (Alter table) 3.3 Renommer une colonne: sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] Exemple : EXECUTE sp_rename N'dbo.Table.AncienNom', N'NouveauNom', 'COLUMN' ALTER TABLE nom_table RENAME COLUMN nom_colonne TO nouveau_nom; pour oracle postgreesql Change COLUMN nom_colonne TO nouveau_nom; pour mysql
Langage de Définition de Données (LDD) DROP COLUMN nom_colonne 3. Modification des tables: (Alter table) 3.3 Supprimer une colonne existante : ALTER TABLE nom_table DROP COLUMN nom_colonne Exemple : ALTER TABLE Auditeur DROP COLUMN Moyenne; Vider une Table TRUNCATE TABLE est un autre ordre LDD, qui permet de supprimer toutes les lignes d'une table tout en libérant l'espace utilisé pour stocker cette table. Destruction La destruction s’effectue avec la clause DELETE dont la syntaxe est : DELETE FROM nom table where
Langage de Définition de Données (LDD) 3. Modification des tables: (Alter table) 3.3 Suppression d’une contrainte : ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte Exemple : ALTER TABLE NomTable DROP CONSTRAINT FK_MaCleEtrangere
Langage de Définition de Données (LDD) 4. Renommer une table Pour renommer une table : ALTER TABLE nom_table RENAME TO nouveau_nom; Exemple : ALTER TABLE produits RENAME TO elements;
Langage de Définition de Données (LDD) 5. Suppression de Table L'ordre DROP TABLE supprime la définition d'une table, Lorsque vous supprimez une table, la base de données perd toutes les données de la table ainsi que tous les index associés. DROP TABLE nom_table Exemple : DROP TABLE Auditeur
Langage de Définition de Données (LDD) Les INDEX À l'instar de l'index d'un livre, l'index d'une base de données vous permet de retrouver rapidement des informations dans une table ou une vue indexée. Un index se compose de clés créées à partir d'une ou plusieurs colonnes dans la table ou la vue et de pointeurs qui mappent sur l'emplacement de stockage des données spécifiées. Un index bien conçu améliore de manière significative les performances des requêtes et des applications de base de données. Un index peut réduire la quantité de données qui doivent être lues par une requête pour retourner un ensemble de résultats.
Langage de Définition de Données (LDD) Les INDEX 1. Création des Index En SQL, la commande CREATE INDEX permet de créer un index. L’index est utile pour accélérer l’exécution d’une requête SQL qui lit des données et ainsi améliorer les performances d’une application utilisant une base de données. CREATE INDEX `index_nom` ON `table`; Il est également possible de créer un index sur une seule colonne en précisant la colonne sur laquelle doit s’appliquer l’index : CREATE INDEX `index_nom` ON `table` (`colonne1`); Pour Afficher les informations sur les index d'une table ou d'une vue: sp_helpindex nom_table
Langage de Définition de Données (LDD) 1. Création des Index SQL Server propose deux types d’index : ● Les index organisés ou cluster: trient et stockent les lignes de données de la table ou la vue en fonction de leurs valeurs de clé. Ce sont les colonnes incluses dans la définition de l'index. Il n'y a qu'un index cluster par table car les lignes de données ne peuvent être triées que dans un seul ordre. ● Les index non organisés ou non cluster: possèdent une structure distincte de celle des lignes de données. Un index non-cluster contient les valeurs de clé de l'index non-cluster et chaque entrée de valeur de clé dispose d'un pointeur vers les lignes de données qui contient la valeur de clé. Pour Afficher les informations sur les index d'une table ou d'une vue: sp_helpindex nom_table
Langage de Définition de Données (LDD) Les INDEX ALTER TABLE nomTable ADD CONSTRAINT nomContrainte PRIMARY KEY [CLUSTERED|NONCLUSTERED] (listeColonnes); CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX nom=index ON { nom=table | nom=vue } ( colonne [ ASC | DESC ] ) Pour Afficher les informations sur les index d'une table ou d'une vue: sp_helpindex nom_table
Langage de Définition de Données (LDD) Les INDEX 2. Suppression des Index Seuls les index définis avec l’instruction CREATE INDEX peuvent être supprimés avec DROP INDEX. Un index peut être supprimé lorsque sa présence ne permet pas un gain de performances significatif en comparaison du coût de maintenance. DROP INDEX nomIndex ON nomTable
Langage de Définition de Données (LDD) Les Vues Une vue est une table virtuelle dont la définition s’appuie sur des tables ou d’autres vues. Elle affiche des données qui ne lui sont pas propres, mais c’est comme une fenêtre par laquelle il est possible de visualiser ou de modifier des données venant des tables.
Langage de Définition de Données (LDD) Les Vues Les avantages d'une Vue: Limite l'accès à la base de données en affichant une sélection de celle-ci. Permet aux utilisateurs de créer des requêtes simples pour extraire les résultats de requêtes complexes. Par exemple, vous pouvez extraire des informations de plusieurs tables sans savoir écrire un ordre de jointure.
Langage de Définition de Données (LDD) Les Vues Les avantages d'une Vue: Garantit l'indépendance des données pour des utilisateurs et des programmes d'application contextuels. Une vue peut être utilisée pour extraire les données de plusieurs tables. Vous pouvez ainsi modifier la structure d’une table sans avoir à recompiler la vue. Permet à des groupes d'utilisateurs d'accéder aux données en fonction de leurs critères particuliers, notamment de règles de confidentialité. Ainsi, on peut proposer une vue restreinte d’une table à certains utilisateurs, en omettant une colon
Langage de Définition de Données (LDD) Les Vues 1. Création d'une vue La création d'une vue se fait grâce à la clause CREATE VIEW suivie du nom que l'on donne à la vue, puis du nom des colonnes dont on désire agrémenter cette vue, puis enfin d'une clause AS précédant la sélection CREATE VIEW Nom_de_la_Vue (colonnes) AS SELECT ... cela pourrait donner : CREATE VIEW Vue (colonneA,colonneB,colonneC,colonneD) AS SELECT colonne1,colonne2,colonneI,colonneII FROM Nom_table1 Alias1,Nom_tableII AliasII WHERE Alias1.colonne1 = AliasII.colonneI AND Alias1.colonne2 = AliasII.colonneII créer une vue contenant les numéros, noms et salaires des employés ainsi que leur nom de département (en utilisant les tables dept et emp) create view employes (num_emp, nom, salaire, departement) as select e.empno, e.ename, e.sal, d.dname from emp4 e, dept4 d where e.deptno=d.deptno; select * from employes
Langage de Définition de Données (LDD) ALTER VIEW Nom_de_la_Vue Les Vues 2. Modifier une vue Après avoir défini une vue, vous pouvez modifier sa définition sans la supprimer ni être obligé de la recréer à l'aide de SQL Server Management Studio ou de Transact-SQL. ALTER VIEW Nom_de_la_Vue AS select_statement
Langage de Définition de Données (LDD) Les Vues 3. Supprimer une vue L'ordre DROP VIEW Nom_de_la_Vue : permet de supprimer une vue. La suppression d'une vue n'a aucun effet sur les tables sur lesquelles la vue est basée.
Le Langage SQL SQL se découpe en quatre grandes familles : LMD : Le langage de manipulation des données (DML, Data manipulation language). LDD : Le langage de définition des données (DDL, Data definition language) LCD : Le langage de contrôle des données (DCL, Data control language) LCT : Le langage de contrôle des transactions (TCL, Transaction control language)
LANGAGE DE CONTRÔLE DE TRANSACTION (LCT) Une transaction est une suite d'opérations effectuées comme une seule unité logique de travail. Une unité logique de travail doit posséder quatre propriétés appelées propriétés ACID (Atomicité, Cohérence, Isolation et Durabilité). Atomique, au sens ou on ne peut pas la diviser en une partie qui échoue et une partie qui réussit. Cohérence, au sens où une fois la transaction terminée, la base est de nouveau dans un état cohérent. Isolée, au sens où une transaction considère que, pendant son exécution, les données qu’elle manipule ne sont pas modifiées par une autre transaction. Durable, au sens où les modifications opérées par la transaction sont enregistrées de façon permanente (et recouvrables en cas de reconstruction de la base).
LANGAGE DE CONTRÔLE DE TRANSACTION (LCT) Liste d’instruction SQL L'instruction Begin TRANSACTION Indique le début d'une transaction L'instruction ROLLBACK annule toutes les modifications de données effectuées depuis le début de la transaction ou à partir d'un point d'enregistrement. Elle libère également les ressources bloquées par la transaction. L'instruction COMMIT TRANSACTION marque la fin d'une transaction, effectuées les modifications en permanentes dans la base de données depuis le début de la transaction, libère les ressources détenues par la transaction Begin TRANSACTION Liste d’instruction SQL COMMIT TRANSACTION
Le Langage SQL SQL se découpe en quatre grandes familles : LMD : Le langage de manipulation des données (DML, Data manipulation language). LDD : Le langage de définition des données (DDL, Data definition language) LCD : Le langage de contrôle des données (DCL, Data control language) LCT : Le langage de contrôle des transactions (TCL, Transaction control language)
Langage de protections d’accès (DCL) Gestion des connections à SQL Server Deux modes d’authentification: Authentification approuvée par Windows Principe associé à : Un compte utilisateur Un groupe d’utilisateurs Mise en œuvre rapide Fonctionnalités de sécurité avancées Authentification SQL Server Pour permettre l’accès à des clients non Microsoft Couche supplémentaire de sécurité Plus lourd à mettre en œuvre Un serveur peut mettre en œuvre le mode d’authentification Windows seul ou le mode mixte (Windows + SQL Server)
Langage de protections d’accès (DCL) Gestion des connections à SQL Server En mode sécurité Windows : CREATE LOGIN nom_connexion FROM WINDOWS [WITH DEFAULT_DATABASE=maBD] nom_connexion doit être un nom d’utilisateur valide <domaine\nom_utilisateur> Si aucune BD par défaut n’est précisée, Master est la BD par défaut (attention ce n’est pas un bon choix !). Attribuez le nom complet : <domaine(nom_ordinateur)\nom_utilisateur>. CREATE LOGIN [DELL-PC\win1] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
Langage de protections d’accès (DCL) Gestion des connections à SQL Server En mode sécurité Mixte : CREATE LOGIN [nom_connexion] WITH PASSWORD = mon_mot_de_passe CHECK_POLICY=OFF DEFAULT_DATABASE=[maBD] On peut également désactiver une connexion et ne l’activer que lorsque l’on en a besoin afin de renforcer la sécurité. sous SQL Server Management Studio : fenêtre de propriétés de la connexion : Etat Transact SQL : ALTER LOGIN nom_connexion {ENABLE|DISABLE} Attention: utilise la stratégie de mot de passe si on ne précise pas check_policy=OFF CREATE LOGIN [ccc] WITH PASSWORD=N'ccc', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF CREATE LOGIN nom_connexion WITH PASSWORD='monmotdepasse' Motdepasse HASHED MUST_CHANGED, DEFAULT_DATABASE=Master, DEFAULT_LANGUAGE=langue, CHECK_EXPIRATION=ON, CHECK_POLICY=ON PASSWORD : Permet de préciser un mot de passe. L’option HASHED, permet de hacher le mot de passe lors de son stockage en fonction de la chaine de caractères précisée avant de mot clé. DEFAULT_DATABASE : Permet de préciser le nom de la base de données par default. DEFAULT_LANGUAGE : Permet de préciser un langage par défaut. CHECK_EXPIRATION : A OFF par défaut. Il n’est possible d’activer cette option que si CHECK_POLICY est aussi activé. Elle permet d’appliquer la politique de changement des mots de passe défini sur le serveur. CHECK_POLICY : A ON par défaut, cette option permet de récupérer au niveau serveur, les options définies pour la politique de sécurité.
Langage de protections d’accès (DCL) Gestion des utilisateurs de base de données Après la définition des connexions (login) au niveau du serveur, il est nécessaire de définir des utilisateurs dans les différentes bases de données. C’est au niveau des utilisateurs de base de données que seront attribués les droits d’utilisation des objets définis dans la base de données. Lors de la définition d’une connexion, la base de données par défaut permet de positionner le compte de connexion sur une base de données pour commencer à travailler. Cependant, la connexion ne pourra réellement travailler sur la base que s’il existe un compte d’utilisateur défini au niveau base et associé à la connexion. C’est un point de passage obligatoire, sauf si la connexion s’est vue attribuée des privilèges de haut niveau.
Langage de protections d’accès (DCL) Gestion des utilisateurs de base de données C’est par l’intermédiaire de l’instruction CREATE USER qu’il est possible de définir des comptes utilisateurs au niveau de la base de données CREATE USER nom_utilisateur FOR LOGIN nom_connexion WITH DEFAULT_SCHEMA = nom_schema Pour modifier un utilisateur nous allons utiliser l’instruction ALTER USER. ALTER USER nom_utilisateur WITH NAME=nouveau_nom, DEFAULT_SCHEMA=nouveau_schema Pour supprimer un utilisateur, nous allons utiliser l’instruction DROP USER. DROP USER nom_utilisateur un utilisateur est mappé sur un schéma dès sa création, obligatoirement. Si aucun nom de schéma n’est précisé, alors l’utilisateur sera mappé sur dbo par défaut.
Langage de protections d’accès (DCL) Gestion des schémas Un schéma est un ensemble logique d’objets à l’intérieur des bases de données sur le serveur. Leur but est de faciliter l’échange de données entre les utilisateurs CREATE SCHEMA nom_schema AUTHORIZATION nom_proprietaire Pour modifier un schéma avec du code, nous allons utiliser cette syntaxe : ALTER SCHEMA nomschema TRANSFERT nomobje. Pour supprimer un schéma, nous allons utiliser l’instruction DROP SCHEMA nomschema nom_proprietaire=utilisateur USE [Ventes] CREATE SCHEMA [pppp] AUTHORIZATION [v333] le fonctionnement des schémas prenons un exemple. Un utilisateur est mappé sur un schéma nommé RU. Pour requêter sur les objets de la base, il pourra écrire directement le nom seul de cet objet si celui-ci est compris dans le schéma sur lequel il est mappé. Dans le cas contraire, l’utilisateur devra préciser le schéma de l’objet, le nom de l’objet et à ce moment là, SQL Server cherchera si le dit utilisateur possède les droit d’utiliser l’objet auquel il tente d’accéder. On peut retenir que les schémas servent essentiellement à faciliter le partage d’information entre les utilisateurs mappés sur ce schéma Après la clause TRANSFERT, on peut spécifier les divers objets à déplacer dans le schéma. Il faut savoir que le nom de ces objets doit être au format suivant : AncienSchema.NomObjet.
Langage de protections d’accès (DCL) Gestion des droits Les droits sont les autorisations qui vont nous permettre de travailler avec notre base de données. L’attribution des droits peut être faite à tous les niveaux, que se soit au niveau serveur, au niveau base de données ou encore directement sur les schémas ou les objets. Ils peuvent être accordés soit à un utilisateur, soit à une connexion. Il est possible de gérer ces permissions grâce à 3 instructions simples dans SQL Server : GRANT, DENY, REVOKE. GRANT permet de donner un privilège REVOKE permet de le retirer si celui-ci a été donné auparavant DENY permet de l’interdire même si il a été donné au travers d’un rôle. Droits d’instruction: CREATE DATABASE, CREATE TABLE, CREATE FUNCTION, CREATE PROCEDURE, CREATE VIEW, BACKUP DATABASE, BACKUP LOG Droits d’utilisation :INSERT, UPDATE, SELECT, DELETE, EXECUTE.
Langage de protections d’accès (DCL) Gestion des droits Pour ajouter, supprimer ou interdire un droit à un utilisateur de base de données, nous allons utiliser les instructions GRANT, DENY et REVOKE comme énoncé précédemment. Ajout : GRANT nom_droit TO nom-utilisateur Suppression : REVOKE nom_droit FROM nom-utilisateur Interdiction : DENY nom_droit TO nom-utilisateur --Ajout : GRANT CREATE TABLE TO Guest --Suppression : REVOKE CREATE TABLE FROM Guest --Interdiction : DENY CREATE TABLE TO Guest Les permissions de bases de données ALTER - ALTER ANY APPLICATION ROLE - ALTER ANY ASSEMBLY - ALTER ANY ASYMMETRIC KEY - ALTER ANY CERTIFICATE - ALTER ANY CONTRACT - ALTER ANY DATABASE DDL TRIGGER- ALTER ANY DATABASE EVENT NOTIFICATION - ALTER ANY DATASPACE - ALTER ANY FULLTEXT CATALOG - ALTER ANY MESSAGE TYPE - ALTER ANY REMOTE SERVICE BINDING - ALTER ANY ROLE - ALTER ANY ROUTE - ALTER ANY SCHEMA - ALTER ANY SERVICE - ALTER ANY SYMMETRIC KEY - ALTER ANY USER - AUTHENTICATE - BACKUP DATABASE - BACKUP LOG - CHECKPOINT - CONNECT - CONNECT REPLICATION - CONTROL - CREATE AGGREGATE - CREATE ASSEMBLY - CREATE ASYMMETRIC KEY - CREATE CERTIFICATE - CREATE CONTRACT - CREATE DATABASE - CREATE DATABASE DDL EVENT NOTIFICATION - CREATE DEFAULT - CREATE FULLTEXT CATALOG - CREATE FUNCTION - CREATE MESSAGE TYPE - CREATE PROCEDURE - CREATE QUEUE - CREATE REMOTE SERVICE BINDING - CREATE ROLE - CREATE ROUTE - CREATE RULE - CREATE SCHEMA - CREATE SERVICE - CREATE SYMMETRIC KEY - CREATE SYNONYM - CREATE TABLE - CREATE TYPE - CREATE VIEW - CREATE XML SCHEMA COLLECTION - DELETE - EXECUTE - INSERT – REFERENCES - SELECT - SHOWPLAN - SUBSCRIBE QUERY NOTIFICATIONS - TAKE OWNERSHIP - UPDATE - VIEW DATABASE STATE - VIEW DEFINITION . Les privilèges au niveau serveur s’attribuent de la même manière que ceux de niveau base de données, simplement, ils ne sont pas les mêmes. En revanche, ces privilèges ne sont pas attribués à un utilisateur, mais à une connexion: - ADMINISTER BULK OPERATIONS - ALTER ANY CONNECTION - ALTER ANY CREDENTIAL - ALTER ANY DATABASE - ALTER ANY ENDPOINT - ALTER ANY EVENT NOTIFICATION - ALTER ANY LINKED SERVER - ALTER ANY LOGIN - ALTER RESOURCES - ALTER SERVER STATE - ALTER SETTINGS - ALTER TRACE - AUTHENTICATE SERVER - CONNECT SQL - CONTROL SERVER - CREATE ANY DATABASE - CREATE DDL EVENT NOTIFICATION - CREATE ENDPOINT - CREATE TRACE EVENT NOTIFICATION - EXTERNAL ACCESS ASSEMBLY - SHUTDOWN - UNSAFE ASSEMBLY - VIEW ANY DATABASE - VIEW ANY DEFINITION - VIEW SERVER STATE
Langage de protections d’accès (DCL) Gestion des Rôles les rôles sont des ensembles de droits qui portent un nom et qu’on peut les attribuer aux utilisateurs ou des connexions. Pour faciliter la gestion SQL Server propose des rôles fixes prédéfinis: Au niveau des serveurs : rôle fixe de serveur Au niveau des Bases de données : rôle fixe de base de données Vous pouvez définir vos propres rôles afin de regrouper des droits sur des fonctions accessibles à une catégorie d’employés
Langage de protections d’accès (DCL) Gestion des Rôles Principaux rôles fixes de serveur -Sysadmin : Administrateur du serveur. Serveradmin : Permet de configurer les paramètres niveau serveur. Setupadmin : Permet d’exécuter certaines procédures stockées et d’ajouter des serveurs liés. Securityadmin : Permet de gérer les connexions serveur. Processadmin : Permet de gérer les traitements au sein de SQL Server. Dbcreator : Permet de créer ou modifier des bases de données. -Diskadmin : Permet de gérer les fichiers sur le disque. -Bulkadmin : Permet d’exécuter l’instruction BULK INSERT.
Langage de protections d’accès (DCL) Gestion des Rôles Rôles fixes de base de données - Db_owner : Equivalent à propriétaire base de données. Db_accessadmin : Permet d’ajouter et supprimer des utilisateurs de base de données. Db_datareader : Permet d’utiliser l’instruction SELECT. - Db_datawriter : Permet les instructions INSERT, UPDATE et DELETE. - Db_ddladmin : Permet les opérations sur les objets de base de données. - Db_securityadmin : Permet de gérer les éléments de sécurité sur la base de données. - Db_backupoperator : Permet l’utilisation des backups. - Db_denydatareader : Interdit l’instruction SELECT. - Db_denydatawriter : Interdit l’écriture sur la base de données
Langage de protections d’accès (DCL) Gestion des Rôles Pour créer un rôle: CREATE ROLE nom_role AUTHORIZATION propriétaire Pour modifier un rôle: ALTER ROLE nom_role WITH NAME = nouveau_nom Pour supprimer un rôle: DROP ROLE nom_role Propriétaire= utilisateur
Langage de protections d’accès (DCL) Gestion des Rôles Attribuer des rôles à des utilisateurs EXEC sp_addrolemember 'nom_role', 'utilisateur'; L'exemple suivant ajoute l'utilisateur de base de données Mary5 au rôle de base de données Production dans la base de données actuelle. EXEC sp_addrolemember 'Production', 'Mary5'; Supprimer le rôle d'un utilisateur EXEC sp_droprolemember 'nom_role', 'utilisateur'; L'exemple suivant retire le rôle Sales Attribuer à l'utilisateur JonB EXEC sp_droprolemember 'Sales', 'Jonb'; sp_droprolemember [@rolename=] 'role' , [@membername=] 'security_account' sp_droprolemember [ @rolename = ] 'role' , [ @membername = ] 'security_account'
Fonctions SQL 1. Fonctions d’agrégation Les fonctions d’agrégation dans le langage SQL permettent d’effectuer des opérations statistiques sur un ensemble d’enregistrement. Étant données que ces fonctions s’appliquent à plusieurs lignes en même temps, elle permettent des opérations qui servent à récupérer l’enregistrement le plus petit, le plus grand ou bien encore de déterminer la valeur moyenne sur plusieurs enregistrement. AVG() pour calculer la moyenne sur un ensemble d’enregistrement COUNT() pour compter le nombre d’enregistrement sur une table ou une colonne distincte MAX() pour récupérer la valeur maximum d’une colonne sur un ensemble de ligne. Cela s’applique à la fois pour des données numériques ou alphanumérique MIN() pour récupérer la valeur minimum de la même manière que MAX() SUM() pour calculer la somme sur un ensemble d’enregistrement
Fonctions SQL 1. Fonctions d’agrégation (Exemple) Quelle est la meilleure note ? Quelle est la plus mauvaise note ? Quelle la somme pondérée des notes ? Quelle est la moyenne (pondérée) de Pierre ? Dans combien de matières Pierre a-t-il eu plus de 12 ? Résultats (de Pierre) Matière Coef Note Maths 4 15 Sc Nat 3 9 Sc Phy 12 Français 2 13 Sc Hum 11 Anglais 1 10 Sport SELECT MAX(Note) FROM Résultats SELECT MIN(Note) FROM Résultats 9 SELECT SUM(Note*Coef) FROM Résultats 193 SELECT SUM(Note*Coef)/Sum(Coef) FROM Résultats 12,06 SELECT COUNT(*) FROM Résultats WHERE Note > 12 2
EXEC sp_help nom_table_ou_objet Pour afficher la description d'une table ou objet