Langage SQL
• Créer votre première table :
CREATE TABLE entity2 (
id INTEGER,
name TEXT NOT NULL,
jurisdiction TEXT,
jurisdiction_description TEXT,
incorporation_date DATE,
status TEXT,
service_provider TEXT,
id_address INTEGER,
source TEXT,
telephone TEXT,
end_date DATE,
url TEXT,
lifetime INTEGER,
PRIMARY KEY(id)
)
• Ajouter des données dans la table :
INSERT INTO
entity2 (id, name, jurisdiction, jurisdiction_description, incorporation_date)
VALUES
(1, 'Une société', 'IMG', 'Le Pays Imaginaire', '2024-01-01'),
(2, 'Une autre société', 'IMG', 'Le Pays Imaginaire', '2025-01-01'),
(3, 'Encore une société', 'IMG', 'Le Pays Imaginaire', '2026-01-01');
• Supprimer une table : DROP TABLE entity2
• Créer du lien entre vos tables :
FOREIGN KEY ( <colonnes clés étrangères> ) REFERENCES <table référencée> ( <clé
primaire de la table référencée> )
Exemple
CREATE TABLE entity2 (
id INTEGER,
name TEXT NOT NULL,
jurisdiction TEXT,
jurisdiction_description TEXT,
incorporation_date DATE,
status TEXT,
service_provider TEXT,
id_address INTEGER,
source TEXT,
note TEXT,
end_date DATE,
url TEXT,
lifetime INTEGER,
PRIMARY KEY(id),
FOREIGN KEY (id_address) REFERENCES address (id_address)
)
• Pour spécifier une table : FROM tableName
• Pour spécifier plusieurs tables : FROM tableName1, tableName2
• Pour sélectionner une colonne ou un groupe de colonnes : SELECT columnName
• Pour sélectionner plusieurs colonnes : SELECT column1, column2 FROM tableName
• Pour sélectionner toutes les colonnes d’une table : SELECT * FROM tableName
• Éliminer les doublons dans la réponse attendue :
SELECT DISTINCT columnName FROM tableName
• Fonction upper qui passe les minuscules en MAJUSCULES :
SELECT upper('Bonjour')
®BONJOUR
• Fonction lower qui passe les MAJUSCULES en minuscules :
SELECT lower('BONJOUR')
®bonjour
• Fonction random renvoie un nombre choisi au hasard : SELECT random()
• Fonction round(x, n) va nous renvoyer l’arrondi d’un nombre x avec n décimal :
SELECT round(3.1416, 2)
® 3.14
• Fonction date renvoie la date actuelle :
SELECT date() SQLite
SELECT current_date() MySQL
• Renommer une colonne :
SELECT
ABS( (- id) *2 ) AS calcul_bizarre,
name,
status
FROM entity ;
• Concaténer les lignes d’une colonne :
SQLite
SELECT
name || ‘(‘ || status || ‘)’ AS name_and_status
FROM entity ;
MySQL
SELECT
concat( name, ‘(‘ , status, ‘)’ ) AS name_and_status
FROM entity ;
• Utiliser un opérateur de comparaison :
SELECT
date() > incorporation_date
FROM entity
Renvoie une colonne avec des valeurs booléennes
® TRUE (ou 1)
® FALSE (ou 0)
• Pour filtrer les lignes de cette table et trouver la ou les lignes souhaitées : WHERE
• Pour obtenir la ligne recherchée :
SELECT *
FROM entity
WHERE name = ‘dataName’;
• Pour donner des « surnoms » aux tables :
SELECT
e.id AS id_entity,
e.name AS nom_societe,
a.id_address,
a.address,
a.countries
FROM
entity e, address a;
• Pour compter le nombre de lignes d’une requête :
SELECT count(*)
FROM (requête)
r;
• Effectuer une jointure interne :
Option 1
SELECT
e.id_address AS 'e.id_address',
a.id_address AS 'a.id_address',
FROM
entity e, address a
WHERE
e.id_address = a.id_address;
Option 2 (préférable)
SELECT *
FROM entity
JOIN address ON entity.id_address = address.id_address;
• Effectuer une jointure interne sur plusieurs colonnes :
Option 1
SELECT *
FROM t1, t2
WHERE
(t1.fk1 = t2.pk1 AND t1.pk2 = t2.pk2);
Option 2 (préférable)
SELECT *
FROM t1
JOIN t2 ON (t1.fk1 = t2.pk1 AND t1.pk2 = t2.pk2);
• Effectuer deux jointures internes :
Exemple
SELECT
i.id AS intermediary_id,
i.name AS intermediary_name,
e.id AS entity_id,
e.name AS entity_name,
e.status AS entity_status
FROM
entity e,
assoc_inter_entity a,
intermediary i
WHERE
e.id = a.entity
AND i.id = a.inter
AND e.name = 'Big Data Crunchers Ltd.';
• Effectuer une jointure externe :
A gauche
SELECT
e.id AS id_entity,
e.name AS nom_societe,
e.id_address AS 'e.id_address',
a.id_address AS 'a.id_address',
a.address,
a.countries
FROM entity e
LEFT OUTER JOIN address a ON e.id_address = a.id_address;
A droite
RIGHT OUTER JOIN
Entière
FULL OUTER JOIN
• Effectuer une jointure naturelle :
SELECT
e.id AS id_entity,
e.name AS nom_societe,
e.id_address AS 'e.id_address',
a.id_address AS 'a.id_address',
a.address,
a.countries
FROM entity e
NATURAL JOIN address a;
• Effectuer une agrégation :
SELECT
colonne_partitionnement, (Optionnel)
fonctionAgregation(colonne)
FROM tableName
GROUP BY colonne_partitionnement
Attention : dans le SELECT se trouve uniquement les colonnes de partitionnement et
les fonctions d’agrégation sinon ERROR.
Exemple
SELECT
jurisdiction,
status,
avg(lifetime),
count(*) //compter le nombre de lignes dans l’agrégat
FROM entity
GROUP BY jurisdiction, status;
• Effectuer un filtrage après une agrégation :
SELECT
colonne_partitionnement, (Optionnel)
fonctionAgregation(colonne)
FROM tableName
GROUP BY colonne_partitionnement
HAVING fonctionAgregation(colonne) OpérateurComparaison ValeurComparaison ;
Exemple
SELECT
i.id AS intermediary_id,
i.name AS intermediary_name,
count(*) AS nb_societes
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id AND
a.inter = i.id AND
(i.id = 5000 OR i.id = 5001)
GROUP BY
i.id, i.name
HAVING
count(*) > 50 ;
• Trier les lignes d’une table du plus petit au plus grand (par défaut) :
SELECT * FROM entity ORDER BY lifetime ; //Classe les entity selon la colonne lifetime
SELECT * FROM entity ORDER BY incorporation_date ASC ;
• Trier les lignes d’une table du plus grand au plus petit :
SELECT * FROM entity ORDER BY incorporation_date DESC ;
Exemple
SELECT
i.id AS intermediary_id,
i.name AS intermediary_name,
count(*) AS nb_societes
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id AND
a.inter = i.id AND
(i.id = 5000 OR i.id = 5001)
GROUP BY
i.id, i.name
ORDER BY
nb_societes DESC
LIMIT
5 ; //Affiche les 5 premiers résultats
• Effectuer une recherche dans des chaînes de caractères :
% remplace 0, 1 ou plusieurs caractères inconnus (ou aucun)
SELECT * FROM entity WHERE name LIKE 'A%' ;
_ remplace UN caractère inconnu
SELECT * FROM fruit WHERE name LIKE 'Ban_ne' ;
Astuce : Utiliser la function LOWER pour convertir en minuscule avant la recherche
SELECT * FROM entity WHERE lower(name) LIKE 'a%' ;
• Unir des tables :
SELECT "Adresse" AS type, address AS recherche, NULL AS url, id_address AS
identifiant FROM address
UNION
SELECT "Société (entité)" AS type, name AS recherche, url AS url, id AS identifiant
FROM entity
• Effectuer une recherche dans des chaînes de caractères après une union :
SELECT *
FROM
("Adresse" AS type, address AS recherche, NULL AS url, id_address AS
identifiant FROM address
UNION
SELECT "Société (entité)" AS type, name AS recherche, url AS url, id AS identifiant
FROM entity ) AS table_union
WHERE lower(recherche) LIKE ‘%abou%’ ;