Le SQL est un langage normalisé, mais il en existe plusieurs normes. La plupart des SGBD reprennent la norme et y ajoute des fonctionnalités propres à leur SGBD (Non portable).
Il est donc important d'éviter les fonctionnalités spécifiques à un environnement si on sait que le SGBD sera changé par la suite.
-
DML : Data Manipulation Language
- Opérations CRUD : Create, Read, Update, Delete
- SELECT : Read
- UPDATE : Update
- INSERT : Create
- DELETE : Delete
- Opérations CRUD : Create, Read, Update, Delete
-
DDL : Data Definition Language
- Défininitions des données
- CREATE : Créer
- DROP : Supprimer
- ALTER : Modifier
- Défininitions des données
-
DCL : Data Control Language
- Sécurité
- GRANT
- REVOKE
- Transaction
- BEGIN
- COMMIT
- ROLLBACK
- Sécurité
- Un espace est égal à une suite d'espaces
- Délimiteur d'instruction : ;
- Commentaires
- -- : pour les commentaires sur une ligne
- /* */ : pour les commentaires sur plusieurs lignes
- Délimiteur de chaîne : ' (single quote)
- Délimiteur d'identifiants : " (Attention à la casse)
SELECT {* / col1, [col2, [col3...]]}
FROM tableName
[{INNER / LEFT / RIGHT} JOIN tableToJoin on (condition)]
[WHERE (condition)]
[GROUP BY col1, [col2, [col3...]]
[HAVING (condition)] ]UPDATE modifie un tuple qui existe déjà.
UPDATE tableName
SET col1 = expression1,
[col2 = expression2,
[col3 = expression3...]]
[WHERE (condition)]Attention, sans le WHERE, tous les tuples sont modifiés ! Souvent, on prendra une clé primaire dans la condition.
Si une contrainte d'intégrité est violée lors d'un UPDATE, aucune ligne n'est modifiée. (Atomicité de l'instruction : Tout est fait ou rien n'est fait)
Lorsqu'on effectue un SELECT et un UPDATE en même temps, l'un des deux se fait toujours avant l'autre pour ne pas avoir d'incohérence. On travaille sur un état figée de la base de données.
Lors d'une requête, trois cas peuvent se passer :
- RC = 0 : Tout s'est bien passé
- RC > 0 : Warning (Exemple, aucune ligne modifiées lors d'un UPDATE)
- RC < 0 : Erreur
- Sémantique
- Syntaxique
- Droits insuffisants
DELETE supprime un/des tuple(s) respectant la condition. Si aucune condition fournie, tous les tuples sont supprimées si les contraintes le permettent.
DELETE FROM tableName
[WHERE (condition)]INSERT insère un/des tuple(s) dans une table.
INSERT INTO tableName [ (colNamesList) ]
{ VALUES(colValues) /
SELECT STATEMENT }On peut spécifier une liste de colonnes pour l'ordre des colonnes dans le champ VALUES, il est recommandé de procéder de cette manière pour éviter les erreurs. À la place de spécifier des valeurs, on peut également placer un SELECT reprenant toutes les colonnes décrites dans la liste des colonnes (colNamesList).
Une transaction est un ensemble minimum d'instructions qui fait passer la base de données d'un état cohérent vers un autre état cohérent. Une transaction a un début et une fin.
Une transaction doit respectr le principe ACID :
- A : Atomicity
- Une transaction est indivisible, tout est effectué ou rien n'est effectué.
- C : Consistency
- I : Isolation
- Une transaction est isolée des autres transactions. (Pas d'effets pervers)
- D : Durability
Attention, une transaction ne fonctionne que sur le DML.
COMMIT termine et valide une transaction.
COMMIT;ROLLBACK termine et annule une transaction.
ROLLBACK;GRANT sert à octroyer des privilèges à un utilisateur ou un groupe d'utilisateur.
GRANT { ALL / liste-privilege }
ON object_name
TO {public / liste-role}
[WITH GRANT OPTION]-
WITH GRANT OPTION : Sert à donner le droit de donner les mêmes privilèges donnés.
-
Droits : SELECT, DELETE, DROP, UPDATE, INSERT, ALTER
-
References : Le droit de faire une foreign key sur une table pas à moi.
-
Execute : Utiliser une fonction
REVOKE {ALL / liste-privileges}
ON name_object
FROM {liste user-col}
[CASCADE CONSTRAINTS]Le DDL est la partie qui définit le schéma des données. C'est à dire, création de table, supression, modification de table, ajout de contraintes, etc.
CREATE TABLE tableName (
colName1 type[(size)] [CONSTRAINT] [DEFAULT value] [NOT NULL] [,
colName2 type[(size)] [,
colName3 type[(size)] [
...]]]
[,
CONSTRAINTS ...
]
);-
Les chaînes de longueurs fixes :
- CHARACTER[(n)] / CHAR[(n)]
-
Les chaînes de longueurs variables :
- CHARACTER VARYING(n) / VARCHAR(n)
-
Les chaînes de bits :
- BIT(n)
- BIT VARYING(n)
-
Les nombres :
- NUMBER(precision, scale)
- DECIMAL(precision, scale)
- precision est le nombre de chiffres
- scale est le nombre de chiffres après la virgule
- FLOAT / REAL / DOUBLE PRECISION
- INT / INTEGER
-
Les moments :
- DATE : Date
- TIME : Moment (heure, minute, seconde, etc)
- TIMESTAMP : DATE + TIME
-
LOB (Large Objects) :
- Destiné aux stockages volumineux.
- CLOB : Character Large Object
- BLOB : Binary Large Object
- PRIMAREY KEY : Clé primaire
- UNIQUE : Clé candidate
- FOREIGN KEY : Clé étrangère
- CHECK : Condition à respectée
CONSTRAINT :
[CONSTRAINT constraintName] newConstraintoù newConstraint est une des contraintes cité ci dessus.
CONSTRAINT PK_tableName PRIMAREY KEY(colName(s))CONSTRAINT U_tableName_Col1 UNIQUE(colName(s))CONSTRAINT check_condition CHECK(condition)CONSTRAINT FK_col1_otherTable_col2
FOREIGN KEY col1
REFERENCES otherTable(col2)
[ON DELETE {RESTRICT / SET NULL / CASCADE }]Préciser le nom d'une contrainte est fortement recommandé pour pouvoir la retrouver facilement.
Dans un CREATE TABLE, une contrainte peut être précisé après un attribut et n'est effective que sur cet attribut ou bien après la déclaration de tous les attributs et on peut alors définir des contraintes de table.
Cette option sert à gérer les conflit d'une clé étrangère lorsqu'on veut supprimer un tuple.
- RESTRICT : Option par défaut, refuse la supression et lance une erreur.
- SET NULL : Met les valeurs référencant la valeur à supprimer à NULL.
- CASCADE : Toutes les références sont supprimées. Très dangereux !
Lors d'une transaction, on peut différer le contrôle des contraintes. Les contraintes seront toutes vérifiées à la fin de la transaction et non à chaque instructions de cette transaction. Cela permet de modifier la base de données et la mettre dans un état incohérent tout en pouvant la remettre dans un état cohérent avant la fin de la transaction.
DEFERRABLE [INITIALLY {DEFERRED / IMMEDIATE}]Quand on ne précise rien, l'option par défaut du système est appliquée.
- DEFERRED : On attend la fin de la transaction (COMMIT) pour vérifier.
- IMMEDIATE : Les contraintes sont vérifiées à chaques instructions.
On peut modifier la valeur d'une contrainte définie DEFERRABLE avec :
SET CONSTRAINTS {constraintsList / ALL} {IMMEDIATE / DEFERRED}Attention : ALL modifie les contraintes définies avec DEFERRABLE !
ALTER TABLE table_name
{ADD col_name TYPE |
DROP col_name |
ADD CONSTRAINT ... |
DROP CONSTRAINT constraint_name |
MODIFY col_name ... } MODIFY n'est pas accepté partout.
COMMENT ON TABLE table_name IS 'comment'.COMMENT ON COLUMN table_name.col_name IS 'comment'.Tables :
- SYSTABLES : Table système qui reprend toutes les tables de la BD.
- SYSCOLUMNS
- SYSINDEXES
- SYCONSTRAINTS
CREATE VIEW view_name [(col1, col2, ...)]
AS
SELECT STATEMENT
[WITH CHECK OPTION]WITH CHECK OPTION vérifie que les conditions du SELECT STATEMENT lors du'ne modification de tuple dans la vue.
DROP VIEW view_nameCREATE [UNIQUE] INDEX index_name
ON table_name (col1, col2, ...)DROP INDEX index_name