Structured Query Language : langage de requêtes.
Définir un langage standard pour la manipulation de données dans un SGBDR.
SQL n'est pas un langage de programmation (il ne comporte pas de structures de contrôle, d'instructions de branchement, de boucles, etc.), mais un langage de requêtes. Il utilise des mots-clés proches du langage naturel (anglais).
Les jointures permettent d'exploiter les relations définies entre tables.
Une requête est exécutée dans l'ordre suivant :
SQL est utilisable :
Version | 1 | SQL89 | 2 (SQL92) | 3 | Commentaire | ||
---|---|---|---|---|---|---|---|
Domaine | Technologie | Année | 1986/1987 | 1989 | 1992 | ||
Niveau de conformité | Entrée | Oui | |||||
Intermédiaire | Non | Oui | |||||
Complet | Non | Oui | |||||
Codes d'erreur standards | Non | Oui | |||||
Structure base | Non | Oui | |||||
Tables système (meta) | Non | (complet) | |||||
Types | Caractères | CHAR (longueur) |
Oui | Chaîne de caractères de longueur fixe. Les délimiteurs sont des cotes simples
('Javarome' par exemple)
|
|||
CHARACTER (longueur) | |||||||
VARCHAR (longueur) |
Non | Oui | Chaîne de caractères de longueur variable | ||||
CHAR VARYING (longueur) | |||||||
CHARACTER VARYING (longueur) | |||||||
NCHAR (longueur) | Non | Oui | Chaîne de caractères nationaux de longueur fixe | ||||
NATIONAL CHAR (longueur) | |||||||
NATIONAL CHARACTER (longueur) | |||||||
NCHAR VARYING (longueur) |
Non | Oui | Chaîne de caractères nationaux de longueur variable | ||||
NATIONAL CHAR VARYING (longueur) | |||||||
NATIONAL CHARACTER VARYING (longueur) | |||||||
CLOB | Character Large OBject. | ||||||
Nombres | INT INTEGER |
Oui | Nombre entier | ||||
SMALLINT | Oui | Petit nombre entier | |||||
NUMERIC (précision, échelle) | Oui | Nombre décimal | |||||
DECIMAL (précision, échelle) | Oui | ||||||
DEC (précision, échelle) | Oui | ||||||
FLOAT (précision | Oui | Nombre à virgule flottante | |||||
REAL | Oui | Nombre à virgule flottante à faible précision | |||||
DOUBLE PRECISION | Oui | Nombre à virgule flottante à grande précision | |||||
Binaire | BIT (longueur) | Non | Oui | Séquence de bits de longueur fixe | |||
BIT VARYING (longueur) | Non | Oui | Séquence de bits de longueur variable | ||||
BLOB | Binary Large OBject. | ||||||
Temps | DATE | Non | Oui | Date. Spécifié sous forme de chaîne variant selon les fournisseurs et les pays ('1972-8-12' au
format ISO par exemple)
|
|||
TIME (précision) | Non | Oui | Heure. Spécifié sous forme de chaîne variant selon les fournisseurs et les pays ('02.00.03' au format ISO par exemple) |
||||
TIMESTAMP (précision) | Non | Oui | Date et heure (instant spécifique à la nanoseconde près). Spécifié sous forme de chaîne variant selon les
fournisseurs et les pays ('1972-08-12-02.00.03.048632' par exemple)
|
||||
INTERVAL | Non | Oui | Intervalle de temps | ||||
Graphiques | IMAGE | Non | |||||
GRAPHIC | |||||||
VARGRAPHIC | |||||||
Objets multimédia | Non | ||||||
I(nteractive) SQL | Non | Oui | Prepared statements | ||||
API | Non | Oui | |||||
SQL Dyamique | Non | Oui | |||||
Manipulation de données | SELECT élément(s) FROM table(s) | Récupère des données | |||||
GROUP BY | |||||||
HAVING | |||||||
ORDER BY | Non | Oui | |||||
INSERT | Ajoute des lignes | ||||||
DELETE FROM table | Supprime des lignes. WHERE possible. | ||||||
UPDATE | Modifie des données | ||||||
Définition de données | Table | Création | CREATE TABLE |
||||
Suppression | DROP TABLE |
||||||
Modification | ALTER TABLE |
||||||
Vue | Création | CREATE VIEW |
|||||
Suppression | DROP VIEW |
||||||
Index | Création | CREATE INDEX |
sur une colonne | ||||
Suppression | DROP INDEX |
sur une colonne | |||||
Schéma | Création | CREATE SCHEMA |
|||||
Suppression | DROP SCHEMA |
||||||
Domaine | Création | CREATE DOMAIN |
|||||
Modification | ALTER DOMAIN |
||||||
Suppression | DROP DOMAIN |
||||||
Type structuré | Création | Non | CREATE TYPE |
Type "objet" | |||
Contrôle d'accès | GRANT | Accorde à un utilisateur des privilèges d'accès. | |||||
REVOKE | Supprime à un utilisateur des privilèges d'accès. | ||||||
Contrôle de transaction | COMMIT | Valide la transaction en cours. | |||||
ROLLBACK | Annule la transaction en cours. | ||||||
SET TRANSACTION | Définit les caractéristiques d'accès aux données de la transaction en cours. | ||||||
Programmation SQL | DECLARE | Définit un curseur pour une requête. | |||||
EXPLAIN | Décrit le plan d'accès aux données d'une requête. | ||||||
OPEN | Ouvre un curseur pour récupérer les résultats de la requête. Equivalent de Statement.getResultSet() | ||||||
FETCH | Récupère une ligne de résultats de la requête. Equivalent de ResultSet.next() | ||||||
CLOSE | Ferme un curseur. Equivalent de ResultSet.close() | ||||||
PREPARE | Prépare une commande SQL pour une exécution dynamique. Equivalent des PreparedStatement JDBC. | ||||||
EXECUTE | Exécute une commande SQL dynamiquement. Equivalent de Statement.execute | ||||||
DESCRIBE | Décrit une requête préparée | ||||||
Fonctions | Binaires | BIT_LENGTH (chaîne) | Non | Oui | Nombre de bits d'une séquence BIT ou BIT VARYING | ||
Caractères | CHAR_LENGTH (chaîne) | Non | Oui | Longueur d'une chaîne de caractères | |||
POSITION (cible IN source) | Non | Oui | Position où la chaîne cible apparaît dans la chaîne source | ||||
SUBSTRING (source FROM n FOR longueur) | Non | Oui | Position de la chaîne source, commençant au caractère n, d'une longueur donnée | ||||
TRANSLATE (chaîne USING trans) | Non | Oui | Chaîne traduite selon une fonction de traduction spécifiée | ||||
TRIM (BOTH car FROM chaîne) | Non | Oui | Chaîne avec les occurences de car au début et à la fin de la chaîne supprimées. | ||||
TRIM (LEADING car FROM chaîne) | Non | Oui | Chaîne avec les occurences de car au début de la chaîne supprimées. | ||||
TRIM (TRAILING car FROM chaîne) | Non | Oui | Chaîne avec les occurences de car à la fin de la chaîne supprimées. | ||||
UPPER (chaîne) | Non | Oui | Chaîne convertie en majuscules. | ||||
LOWER (chaîne) | Non | Oui | Chaîne convertie en minuscules | ||||
OCTET_LENGTH | Non | Oui | Nombres d'octets dans une chaîne de caractères. | ||||
Conversions | CONVERT (chaîne USING conv) | Non | Oui | Chaîne convertie selon une fonction de conversion spécifiée | |||
CAST (valeur AS type) | Non | Oui | Conversion de type (date en chaîne de caractères par exemple) | ||||
Date/Heure | CURRENT_DATE | Non | Oui | Date en cours | |||
CURRENT_TIME (précision) | Non | Oui | Heure en cours avec la précision souhaitée | ||||
CURRENT_TIMESTAMP (précision) | Non | Oui | Date et heure en cours avec la précision souhaitée | ||||
EXTRACT (partie FROM source) | Non | Oui | Partie spécifiée (DAY, HOUR, etc.) d'une valeur DATETIME |
Création d'une table :
CREATE TABLE
MA_TABLE (REFERENCE VARCHAR(127) NOT NULL, NOM VARCHAR(127), AUTRE_REF VARCHAR(127), CONSTRAINT PK_ACTOR PRIMARY KEY (REFERENCE))
Ajout d'un enregistrement dans une table :
INSERT INTO
AGENCES
(VILLE, REGION, OBJECTIF, VENTES, AGENCE) VALUES ('Brest', 'Ouest', 275000.00, 0.00, 23)
Sélection d'enregistrements :
SELECT FROM
EMPLOYEES emps, AGENCES ags
WHERE
emps.AGENCE = ags.ID AND emps.NOM LIKE 'B%' ORDER BY emps.NOM ASC
Supression d'enregistrements d'une table :
DELETE FROM
CLIENTS
WHERE SOCIETE = 'Microsoft' AND VENTES < QUOTA
Mise à jour d'enregistrements d'une table :
UPDATE
VENDEURS
SET QUOTA = QUOTA + 15000.0, STATUS = 'Udpated' WHERE ID > 20
Modification d'une table pour spécifier une clé étrangère :
ALTER TABLE
MA_TABLE ADD CONSTRAINT MA_RELATION FOREIGN KEY (AUTRE_REF) REFERENCES AUTRE_TABLE (REF)
Protéger l'accès aux données :
GRANT UPDATE,SELECT ON
MA_TABLE
TO javarome
REVOKE UPDATE ON MA_TABLE FROM javarome
Procédures stockées (non standard) :
procedure GETAMANAGERINOUT (pname IN VARCHAR2, p_cur OUT refTypes.cursorType, page IN number) is v_cur refTypes.cursorType;
BEGIN
OPEN v_cur FOR
SELECT name,id FROM c_manager WHERE pname=name AND page=age;
p_cur:=v_cur;
END GETAMANAGERINOUT;
Fonctions (non standard, Oracle) :
function GETALLFIRMSAPPK_F return refTypes.cursorType is v_cur refTypes.cursorType;
BEGIN
OPEN v_cur FOR SELECT name FROM c_firm;
return v_cur;
end;