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 :
<strong>CREATE TABLE</strong>
MA_TABLE <b>(</b>REFERENCE <b>VARCHAR(</b>127<b>) NOT NULL</b>, NOM <b>VARCHAR(127),</b> AUTRE_REF<b> VARCHAR(</b>127<b>), CONSTRAINT</b> PK_ACTOR <b>PRIMARY KEY (</b>REFERENCE<b>))</b>
Ajout d'un enregistrement dans une table :
<strong>INSERT INTO </strong>
AGENCES
<b>(</b>VILLE, REGION, OBJECTIF, VENTES, AGENCE<b>) VALUES (</b><span class="codeString">'Brest'</span>, <span class="codeString">'Ouest'</span>, 275000.00, 0.00, 23<b>)</b>
Sélection d'enregistrements :
<strong>SELECT FROM</strong>
EMPLOYEES emps, AGENCES ags
<strong>WHERE</strong>
emps.AGENCE<b> = </b>ags.ID<b> AND </b>emps.NOM<b> LIKE </b>'B%'<b> ORDER BY </b>emps.NOM<b> ASC</b>
Supression d'enregistrements d'une table :
<strong>DELETE FROM </strong>
CLIENTS
<b>WHERE </b>SOCIETE<b> =</b> <span class="codeString">'Microsoft'</span> <strong>AND</strong> VENTES<strong> < </strong>QUOTA
Mise à jour d'enregistrements d'une table :
<strong>UPDATE </strong>
VENDEURS
<b>SET</b> QUOTA = QUOTA + 15000.0, STATUS = <span class="codeString">'Udpated'</span> <b>WHERE</b> ID<b> ></b> 20
Modification d'une table pour spécifier une clé étrangère :
<strong>ALTER TABLE</strong>
MA_TABLE<b> ADD CONSTRAINT </b>MA_RELATION<b> FOREIGN KEY (</b>AUTRE_REF<b>) REFERENCES </b>AUTRE_TABLE<b> (</b>REF<b>)</b>
Protéger l'accès aux données :
<strong>GRANT UPDATE,SELECT ON </strong>
MA_TABLE
<b>TO </b>javarome<br> <br> <b>REVOKE UPDATE ON </b>MA_TABLE <b>FROM </b>javarome
Procédures stockées (non standard) :
<strong>procedure</strong> GETAMANAGERINOUT (pname <strong>IN VARCHAR2</strong>, p_cur <strong>OUT refTypes.cursorType</strong>, page <strong>IN number</strong>) <strong>is </strong>v_cur <strong>refTypes.cursorType</strong>;<br> <strong>BEGIN</strong><br> <strong>OPEN </strong>v_cur <strong>FOR</strong><br> <strong>SELECT </strong>name,id <strong>FROM </strong>c_manager <strong>WHERE </strong>pname=name <strong>AND </strong>page=age;<br> p_cur:=v_cur;<br> <strong>END </strong>GETAMANAGERINOUT;
Fonctions (non standard, Oracle) :
<strong>function </strong>GETALLFIRMSAPPK_F <strong>return refTypes.cursorType</strong> <strong>is </strong>v_cur <strong>refTypes.cursorType</strong>;<br> <strong> BEGIN</strong><br> <strong>OPEN </strong>v_cur <strong>FOR SELECT </strong>name <strong>FROM </strong>c_firm;<br> <strong>return </strong>v_cur;<br> <strong> end</strong>;