2.1 - Introduction à SQL


Base de données

Introduction à SQL

Plan

  • Modèle relationnel de données
  • Création de tables
  • Requêtes d'insertion
  • Requêtes de récupération

Modèle relationnel de données

Modèle relationnel de données

Offre une représentation visuelle de la structure d'une base de données

  • Tables
  • Colonnes
    • Type de donnée
    • Attributs(Auto-incrément, Non null, Unicité)
    • Valeur par défaut

On vise à protéger l'intégrité des données via la définition explicite des caractéristiques de l'information stockée

  • Précise, Complète, Cohérente

Modèle relationnel de données


Quelles caractéristiques peut-on identifier sur ce modèle de données?

Règles de rédaction de SQL

Quelques bonne pratiques à garder en tête lors de la rédaction de code SQL

  • Standardiser les mots-clés en MAJUSCULE vs minuscule
  • Nom des tables au pluriel
  • Nom des colonnes en lower_snake_case
  • Utiliser la forme explicite des commandes

ℹ️ Référence

Création de tables

Base de données

Pour rappel

  • 1 instance de MariaDB
  • Héberge plusieurs base de données
  • 1 BD peut contenir plusieurs tables

Il faut donc préciser la BD à utiliser pour les commandes SQL subséquentes

USE db_name;

Créer les tables

Créer les tables

CREATE [OR REPLACE] TABLE [IF NOT EXISTS] table_name (
  column_name data_type [column_attributes],
  other_colum_name data_type [column_attributes]
);

data_type: 
  https://mariadb.com/kb/en/data-types/

column_attributes:
  [NOT NULL] [AUTO_INCREMENT KEY] [UNIQUE] [DEFAULT default_value]

📚 Documentation DATATYPES et CREATE TABLE

Une fois une base de données en fonction, on veut préserver l'information, tout en étant capable de la faire évoluer selon les besoins.

📚 ALTER TABLE

Exemples

Créer les tables

CREATE TABLE teachers (
  employee_number INT AUTO_INCREMENT KEY,
  name VARCHAR(200) NOT NULL,
  email VARCHAR(200) UNIQUE NOT NULL
);
CREATE TABLE courses (
  code CHAR(10) NOT NULL UNIQUE,
  credits DOUBLE(2,1) NOT NULL DEFAULT 1,
  name VARCHAR(200) NOT NULL,
  description VARCHAR(1000)
);

Manipuler les tables

-- Voir les tables d'une BD
SHOW TABLES [FROM db_name];
-- Voir la structure d'une table
DESCRIBE table_name;
-- Voir la requête de création d'une table
SHOW CREATE TABLE table_name;
-- Supprimer une table
-- Attention, supprimer une table n'efface pas les privilèges associés
DROP TABLE [IF EXISTS] table_name [, table_name ...];
-- Reinitialiser une table (DROP + CREATE)
TRUNCATE TABLE table_name;

Requêtes d'insertion

Requêtes d'insertion

INSERT INTO table_name [(column_name, ...)]
VALUES ({expr | DEFAULT}, ...), (...), ...

📚 Documentation

Pour insérer des données, on fait correspondre une valeur à chacune des colonnes de la table, dans le même ordre qu'elles sont définies dans la table.

On peut également préciser un sous-ensemble des colonnes et associer une valeur seulement pour ces dernières. Les colonnes ignorées doivent avoir une valeur par défaut/AUTO_INCREMENT.

Requêtes d'insertion

INSERT INTO teachers VALUES ( DEFAULT, 'nom a', 'email a' );
-- est equivalent a
INSERT INTO teachers (employee_number, name, email) VALUES ( DEFAULT, 'nom b', 'email b' );

-- La colonne AUTO_INCREMENT doit avoir la valeur DEFAULT pour être incrémentée automatiquement
-- ou être ignorée
INSERT INTO teachers (name, email) VALUES ('nom c', 'email c' );
-- On peut 'déplacer' la valeur d'AUTO_INCREMENT en saisissant manuellement une valeur
INSERT INTO teachers
VALUES ( 100, 'nom d', 'email d' ), (DEFAULT, 'nom e', 'email e' );
-- DEFAULT sera 101, et ainsi de suite pour les prochains INSERT

Requêtes de récupération

Requêtes de récupération

SELECT column_def [, column_def, ...]
FROM table_name
[WHERE where_condition]

column_def :
  Utiliser * pour lister toutes les colonnes, sinon nommer explicitement les colonnes
  Opérateur AS permets de renommer une colonne

where_condition :
  Applique un critère de sélection aux lignes à retourner
  Les opérateurs logiques disponibles sont IS NULL, IS NOT NULL, >, >=, <, <=, =, <>, &&, || 

📚 Documentation

Requêtes de récupération

SELECT * FROM teachers;
SELECT name, email FROM teachers;
SELECT name AS Nom, credits AS `Crédits` FROM courses;
SELECT * 
FROM courses
WHERE description IS NOT NULL;
SELECT * 
FROM courses
WHERE (description IS NOT NULL AND description <> '') OR (credits > 2);

Exercices

👉 Énoncé