S. Q. L. (1986 )

Home

Structured Query Language.

Historiquement issu du langage SEQUEL (Structured English QUEry Language).

Besoin

Définir un langage standard pour la manipulation de données dans un SGBDR.

Analyse

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.

Conception

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

Exemples

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;

Notes

Home