Premiers SELECTs

Module S1

Dalibo SCOP

24.09

29 août 2024

Sur ce document

Formation Module S1
Titre Premiers SELECTs
Révision 24.09
PDF https://dali.bo/s1_pdf
EPUB https://dali.bo/s1_epub
HTML https://dali.bo/s1_html
Slides https://dali.bo/s1_slides
TP https://dali.bo/s1_tp
TP (solutions) https://dali.bo/s1_solutions

Licence Creative Commons CC-BY-NC-SA

Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :

  • Paternité
  • Pas d’utilisation commerciale
  • Partage des conditions initiales à l’identique

Marques déposées

PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.

Versions de PostgreSQL couvertes

Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 12 à 16.

Introduction et premiers SELECT

Préambule

  • Qu’est-ce que le standard SQL ?
  • Comment lire des données
  • Quels types de données sont disponibles ?
  • Principes d’une base de données
  • Premières requêtes
  • Connaître les types de données

Objectifs

  • Comprendre les principes
  • Écrire quelques requêtes en lecture
  • Connaître les différents types de données
    • et quelques fonctions très utiles

Principes d’une base de données

  • Base de données
    • ensemble organisé d’informations
  • Système de Gestion de Bases de Données
    • acronyme SGBD (DBMS en anglais)
    • programme assurant la gestion et l’accès à une base de données
    • assure la cohérence des données

Type de bases de données

  • Modèle hiérarchique
  • Modèle réseau
  • Modèle relationnel
  • Modèle objet
  • Modèle relationnel-objet
  • NoSQL

Type de bases de données (1)

  • Modèle hiérarchique
    • structure arborescente
    • redondance des données
  • Modèle réseau
    • structure arborescente, mais permettant des associations
    • ex : Bull IDS2 sur GCOS

Type de bases de données (2)

  • Modèle relationnel
    • basé sur la théorie des ensembles et la logique des prédicats
    • standardisé par la norme SQL
  • Modèle objet
    • structure objet
    • pas de standard
  • Modèle relationnel-objet
    • le standard SQL ajoute des concepts objets

Type de bases de données (3)

  • NoSQL : Not only SQL
    • pas de norme de langage de requête
    • clé-valeur (Redis, Riak)
    • graphe (Neo4J)
    • document (MongoDB, CouchDB)
    • orienté colonne (HBase)
  • Rapprochement relationnel/NoSQL
    • PostgreSQL permet de stocker des documents (JSON, XML)

Modèle relationnel

  • Indépendance entre la vue logique et la vue physique
    • le SGBD gère lui-même le stockage physique
  • Table ou relation
  • Un ensemble de tables représente la vue logique

Caractéristiques du modèle relationnel

  • Théorie des ensembles
  • Logique des prédicats
  • Logique 3 états

ACID

Gestion transactionnelle : la force des bases de données relationnelles :

  • Atomicité (Atomic)
  • Cohérence (Consistent)
  • Isolation (Isolated)
  • Durabilité (Durable)

Langage SQL

  • Norme ISO 9075
    • dernière version stable : 2023
  • Langage déclaratif
    • on décrit le résultat et pas la façon de l’obtenir
    • comme Prolog
  • Traitement ensembliste
    • par opposition au traitement procédural
    • « on effectue des opérations sur des relations pour obtenir des relations »

SQL est un langage

  • Langage
    • règles d’écriture
    • règles de formatage
    • commentaires
  • Améliore la lisibilité d’une requête

Recommandations d’écriture et de formatage

  • Écriture
    • mots clés SQL en MAJUSCULES
    • identifiants de colonnes/tables en minuscule
  • Formatage
    • dissocier les éléments d’une requête
    • un prédicat par ligne
    • indentation

Commentaires

  • Commentaire sur le reste de la ligne
    -- commentaire
  • Commentaire dans un bloc
    /* bloc
     +/

Les 4 types d’ordres SQL

  • DDL
    • Data Definition Language
    • définit les structures de données
  • DML
    • Data Manipulation Language
    • manipule les données
  • DCL
    • Data Control Language
    • contrôle l’accès aux données
  • TCL
    • Transaction Control Language
    • contrôle les transactions
    • implicites si « autocommit »

Lecture de données

  • Ordre SELECT
    • lecture d’une ou plusieurs tables
    • ou appel de fonctions

Syntaxe de SELECT

SELECT expressions_colonnes
 [ FROM elements_from ]
 [ WHERE predicats ]
 [ ORDER BY expressions_orderby ]
 [ LIMIT limite ]
 [ OFFSET offset ];

Liste de sélection

  • Description du résultat de la requête
    • colonnes retournées
    • renommage
    • dédoublonnage

Colonnes retournées

  • Liste des colonnes retournées
    • expression
    • séparées par une virgule
  • Expression
    • constante
    • référence de colonne :
    table.colonne
  • opération sur des colonnes et/ou des constantes

Alias de colonne

  • Renommage
    • ou alias
    • AS :
    expression AS alias
  • le résultat portera le nom de l’alias

Dédoublonnage des résultats

    SELECT DISTINCT expressions_colonnes...
  • Dédoublonnage des résultats avant de les retourner
    • à ne pas utiliser systématiquement

Dérivation

  • SQL permet de dériver les valeurs des colonnes
    • opérations arithmétiques : +, -, /, *
    • concaténation de chaînes : ||
    • appel de fonction

Fonctions utiles

  • Fonctions sur données temporelles :
    • date et heure courante : now()
    • âge : age(timestamp)
    • extraire une partie d’une date : extract( 'year' FROM timestamp)
    • ou date_part('Y',timestamp)
  • Fonctions sur données caractères :
    • longueur d’une chaîne de caractère : char_length(chaine)
  • Compter les lignes : count(*)

Clause FROM

FROM expression_table [, expression_table ...]
  • Description des tables mises en œuvre dans la requête
    • une seule table
    • plusieurs tables jointes
    • sous-requête

Alias de table

  • Mot-clé AS
    • optionnel :
    reference_table alias
  • La table sera ensuite référencée par l’alias
    reference_table [AS] alias
    reference_table AS alias (alias_colonne1, ...)

Nommage des objets

  • Noms d’objets convertis en minuscules
    • Nom_Objet devient nom_objet
    • certains nécessitent l’emploi de majuscules
  • Le guillemet double " conserve la casse
    • "Nom_Objet"

Clause WHERE

  • Permet d’exprimer des conditions de filtrage
    • prédicats
  • Un prédicat est une opération logique
    • renvoie vrai ou faux
  • La ligne est présente dans le résultat
    • si l’expression logique des prédicats est vraie

Expression et opérateurs de prédicats

  • Comparaison
    • =, <, >, <=, >=, <>
  • Négation
    • NOT
expression operateur_comparaison expression

Combiner des prédicats

  • OU logique
    • predicat OR predicat
  • ET logique
    • predicat AND predicat

Correspondance de motif

  • Comparaison de motif
    chaine LIKE motif ESCAPE 'c'
  • % : toute chaîne de 0 à plusieurs caractères
    • _ : un seul caractère
  • Expression régulière POSIX
    chaine ~ motif

Listes et intervalles

  • Liste de valeurs
    expression IN (valeur1 [, ...])
  • Chevauchement d’intervalle de valeurs
    expression BETWEEN expression AND expression
  • Chevauchement d’intervalle de dates
    (date1, date2) OVERLAPS (date3, date4)

Tris

  • SQL ne garantit pas l’ordre des résultats
    • tri explicite requis
  • Tris des lignes selon des expressions
    ORDER BY expression  [ ASC | DESC | USING opérateur ]
                         [ NULLS { FIRST | LAST } ] [, ...]
  • ordre du tri : ASC ou DESC
    • placement des valeurs NULL : NULLS FIRST ou NULLS LAST
    • ordre de tri des caractères : COLLATE collation

Limiter le résultat

  • Obtenir des résultats à partir de la ligne n
    • OFFSET n
  • Limiter le nombre de lignes à n lignes
    • FETCH {FIRST | NEXT} n ROWS ONLY
    • LIMIT n
  • Opérations combinables
    • OFFSET doit apparaitre avant FETCH
  • Peu d’intérêt sur des résultats non triés

Utiliser plusieurs tables

  • Clause FROM
    • liste de tables séparées par ,
  • Une table est combinée avec une autre
    • jointure
    • produit cartésien

Types de données

  • Type de données
    • du standard SQL
    • certains spécifiques PostgreSQL

Qu’est-ce qu’un type de données ?

  • Le système de typage valide les données
  • Un type détermine
    • les valeurs possibles
    • comment les données sont stockées
    • les opérations que l’on peut appliquer

Types de données

  • Types standards SQL
  • Types dérivés
  • Types spécifiques à PostgreSQL
  • Types utilisateurs

Types standards (1)

  • Caractère
    • char, varchar
  • Numérique
    • integer, smallint, bigint
    • real, double precision
    • numeric, decimal
  • Booléen
    • boolean

Types standards (2)

  • Temporel
    • date, time
    • timestamp
    • interval
  • Chaînes de bit
    • bit, bit varying
  • Formats validés
    • JSON
    • XML

Caractères

  • char(n)
    • longueur fixe
    • de n caractères
    • complété à droite par des espaces si nécessaire
  • varchar(n)
    • longueur variable
    • maximum n caractères
    • n optionnel

Représentation données caractères

  • Norme SQL
    • chaîne encadrée par '
    • 'chaîne de caractères'
  • Chaînes avec échappement du style C
    • chaîne précédée par E ou e
    • E'chaîne de caractères'
  • Chaînes avec échappement Unicode
    • chaîne précédée par U&
    • U&'chaîne de caractères'

Numériques

  • Entier
    • smallint, integer, bigint
    • signés
  • Virgule flottante
    • real, double precision
    • valeurs inexactes
  • Précision arbitraire
    • numeric(precision, echelle), decimal(precision, echelle)
    • valeurs exactes

Représentation de données numériques

  • Chiffres décimaux : 0 à 9
  • Séparateur décimal : .
  • chiffres
  • chiffres.[chiffres][e[+-]chiffres]
  • [chiffres].chiffres[e[+-]chiffres]
  • chiffrese[+-]chiffres
  • Conversion
    • TYPE 'chaine'

Booléens

  • boolean
  • 3 valeurs possibles
    • TRUE
    • FALSE
    • NULL (ie valeur absente)

Temporel

  • Date
    • date
  • Heure
    • time
    • avec ou sans fuseau horaire
  • Date et heure
    • timestamp
    • avec ou sans fuseau horaire
  • Intervalle de temps
    • interval

Représentation des données temporelles

  • Conversion explicite
    • TYPE 'chaine'
  • Format d’un timestamp
    • 'YYYY-MM-DD HH24:MI:SS.ssssss'
    • 'YYYY-MM-DD HH24:MI:SS.ssssss+fuseau'
    • 'YYYY-MM-DD HH24:MI:SS.ssssss' AT TIME ZONE 'fuseau'
  • Format d’un intervalle
    • INTERVAL 'durée interval'

Gestion des fuseaux horaires

  • Paramètre timezone
  • Session : SET TIME ZONE
  • Expression d’un fuseau horaire
    • nom complet : 'Europe/Paris'
    • nom abbrégé : 'CEST'
    • décalage : '+02'

Chaînes de bits

  • Chaînes de bits
    • bit(n), bit varying(n)

Représentation des chaînes de bits

  • Représentation binaire
    • chaîne de caractères précédée de la lettre B
    • B'01010101'
  • Représentation hexadécimale
    • chaîne de caractères précédée de la lettre X
    • X'55'

XML

  • Type validé
    • xml
  • Chaîne de caractères
    • validation du document XML

JSON

  • Type json : texte, avec validation du format JSON
  • Préférer le type jsonb (binaire)
  • Fonctions de manipulation

Types dérivés

  • Types spécifiques à PostgreSQL
  • Incrémentés:
    • principe de l’« autoincrement »
    • serial
    • smallserial
    • bigserial
    • équivalent à un type entier associé à une séquence et avec une valeur par défaut
    • (v 10+) préférer un type entier + la propriété IDENTITY
  • Caractères
    • text

Types additionnels non SQL

  • bytea
  • array
  • enum
  • cidr, inet, macaddr
  • uuid
  • json, jsonb, hstore
  • range

Types utilisateurs

  • Types utilisateurs
    • composites
    • énumérés (enum)
    • intervalles (range)
    • scalaires
    • tableau
    CREATE TYPE

Conclusion

  • SQL : traitement d’ensembles d’enregistrements
  • Pour les lectures : SELECT
  • Nom des objets en minuscules
  • Des types de données simples et d’autres plus complexes

Bibliographie

  • Bases de données - de la modélisation au SQL (Laurent Audibert)
  • SQL avancé : programmation et techniques avancées (Joe Celko)
  • SQL : Au coeur des performances (Markus Winand)
  • The Manga Guide to Databases (Takahashi, Mana, Azuma, Shoko)
  • The Art of SQL (Stéphane Faroult)

Questions

N’hésitez pas, c’est le moment !

Travaux pratiques

Travaux pratiques (solutions)