Voici un mémo SQL que j'ai réalisé grâce à mon expérience. Vous pourvez l'imprimer grâce à l'icône prévu pour cette effet. SI parmi les nombreuses lignes de ce mémo vous décelez des erreurs merci de m'en informer pour que je corrige mes bévues.
Mémo SQL (version 1.0 28/03/2001)
Sélection : SELECT | |
SELECT nom_colonne FROM nomtable; | Affiche tous le enregistrements de la table nomtable |
SELECT * FROM nomtable; | Affiche tous le enregistrements de la table nomtable |
SELECT nom_colonne1, nom_colonne2 FROM nomtable; | Affiche tous le enregistrements de la table nomtable mais seulement pour les colonnes nom_colonne1, nom_colonne2 |
Opérateurs | |
+ - * / SELECT nom_col+50 FROM nomtable; | Les opérateurs on des priorités normale. on peut modifier ces priorités à l'aide de parenthèses |
Alias | |
SELECT nom_col1 AS "nom_affiche colonne", nom_col2 "nom_affiche colonne2" FROM nomtable; | AS est un alias qui permet de renommer une colonne a l'affichage on remarque sur la deuxième ligne que la présence de AS n'est pas obligatoire les " " sont optionnelle mais elles permettent de conserver la casse et les espaces |
Concaténation (SQL*PLUS ORACLE) | |
SELECT nom_col1||nom_col2 FROM nomtable; | Concaténe les deux colonnes. |
SELECT nom_col1||'est un '||nom_col2 FROM nomtable; | Concaténe les deux colonnes en rajoutant la chaîne de caractère au milieux. on notera que l'on peut utiliser un alias pour donner un titre plus cohérent a la colonne. |
Les Doublons : DISTINCT | |
SELECT DISTINCT nom_col FROM nomtable; | Empêche de se retrouver avec deux fois la même ligne dans le résultat. |
SELECT DISTINCT nom_col1, nom_col2 FROM nomtable; | Empêche de se retrouver avec deux fois la même ligne dans le résultat. On peut ce retrouver avec la même valeur plusieurs fois dans une colonne mais on ne peut jamais avoir la même ligne. |
Structure d'une table | |
avec Sql*plus (Oracle) | |
DESCRIBE nomtable; | Affiche la structure d'une table. La commande peut être abrégé en DESC |
avec isql (OpenIngres) | |
HELP TABLE nomtable; | Affiche la structure complète de la table passé en paramètres |
HELP nomtable; | Affiche une partie de la structure de la table passé en paramètres |
sélection de ligne : WHERE | |
SELECT * FROM personne WHERE nom = 'moi'; | N'affiche que les lignes(enregistrements) ou la condition est vrai. |
Opérateurs de comparaison | |||||||||||
= | Egale à | ||||||||||
> | Supérieur à | ||||||||||
>= | Supérieur ou égale à | ||||||||||
< | Inférieur à | ||||||||||
<= | Inférieur ou égale à | ||||||||||
<> | Différent de | ||||||||||
BETWEEN ... AND ... | Compris entre ... et ... | ||||||||||
IN (liste_de_champ) | Compris dans la liste | ||||||||||
LIKE | Ressemble en partie à la chaîne passé en paramètres | ||||||||||
IS NULL | Teste si la valeur est NULL | ||||||||||
Utilisation des Opérateurs de comparaison. | |||||||||||
SELECT nom, salaire FROM nomtable; WHERE salaire < 12500; | Affiche toutes les personnes dont le salaire est inférieur à 12500 | ||||||||||
SELECT nom, salaire FROM nomtable; WHERE salaire BETWEEN 8000 AND 12500; | Affiche toutes les personnes qui on un salaire entre 8000 et 12500 | ||||||||||
SELECT nom, departement FROM nomtable; WHERE departement IN(87,16,23); | Affiche le nom de toutes les personnes de la table dont le département de travaille se trouve dans le limousin | ||||||||||
SELECT nom, prenom FROM nomtable; WHERE prenom LIKE '_y%'; | Affiche le nom de toutes les personnes de la table dont la deuxième lettre du prénom est 'y' % représente 0 ou n caractères (comme * sous unix ou dos) _ représente 1 caractére (comme ? sous unix) | ||||||||||
SELECT nom FROM nomtable; WHERE salaire IS NULL; | Affiche le nom de toutes les personnes de la table dont le salaire n'est pas renseigné (si le salaire est égale à NULL | ||||||||||
Opérateurs Logiques | |||||||||||
AND | Retourne TRUE si les deux conditions sont VRAIES | ||||||||||
OR | Retourne TRUE si au moins une des conditions est VRAIE | ||||||||||
NOT | Retourne TRUE si la condition qui suit est FAUSSE et inversement | ||||||||||
SELECT nom FROM nomtable; WHERE salaire < 7000 AND prénom = 'sylvain'; | Affiche le nom de toutes les personnes de la table dont le salaire est inférieur à 7000 est dont le prénom est sylvain | ||||||||||
Règles de Priorité | |||||||||||
| |||||||||||
Les parenthèses permettent de changer les priorités | |||||||||||
Tri : ORDER BY | |||||||||||
ORDER BY | ASC : par ordre croissant DESC : Par ordre décroissant | ||||||||||
SELECT nom FROM nomtable; ORDER salaire DESC; | Affiche le nom de toutes les personnes de la table en les triant du plus fort salaire au plus faible | ||||||||||
SELECT nom FROM nomtable; ORDER Departement, salaire DESC; | Affiche le nom de toutes les personnes de la table en les triant par ordre croissant de Departement si dans un Departement il y a plusieurs enregistrement ces dernier sont trier par ordre décroissant de salaire PS : les tris peuvent s'effectuer sur des colonnes ou des alias de colonnes. | ||||||||||
Jointure | |||||||||||
SELECT nomtable_1.nomcol_1, nomtable_2.nomcol_2, nomtable_1.nom_perso FROM nomtable_1, nomtable_2 WHERE nomtable_1.nomcol_1 = nomtable_2.nomcol_2; | Cette commande fait une jointure entre la table nomtable_1 et la table nomtable_2 toutes les lignes qui réponde à la condition WHERE on relier ensemble. | ||||||||||
SELECT nomtable_1.nomcol_1, nomtable_2.nomcol_2, nomtable_1.nom_perso FROM nomtable_1, nomtable_2 WHERE nomtable_1.nomcol_1 = nomtable_2.nomcol_2 AND nomtable_1.salaire > 12000 ; | Grâce à AND on peut affiner la recherche | ||||||||||
Jointure avec des alias | |||||||||||
SELECT a.nomcol_1, b.nomcol_2 FROM nomtable_1 a , nomtable_2 b WHERE a.nomcol_1 = b.nomcol_2; | Grâce aux alias on peut grandement simplifier l'écriture d'un select | ||||||||||
Jointure de plus de 2 tables | |||||||||||
SELECT a.nomcol_1, b.nomcol_2, c.nomcol_3, a.nomcol_4 FROM nomtable_1 a, nomtable_2 b,nomtable_3 c WHERE a.nomcol_1 = b.nomcol_2 AND a.nomcol_4 = c.nomcol_3; | On fait une jointure des tables nomtable_1, nomtable_2, nomtable_3. | ||||||||||
Fonctions de groupe : COUNT, AVG, ... | |||||||||||
SELECT AVG(nomcol) FROM nomtable; | Fait la moyenne de toutes les valeurs de la colonne nomcol | ||||||||||
SELECT SUM(nomcol) FROM nomtable; | Fait le totale de toutes les valeurs de la colonne nomcol | ||||||||||
SELECT MIN(nomcol) FROM nomtable; | Recherche dans la colonne nomcol la plus petite valeur | ||||||||||
SELECT MAX(nomcol) FROM nomtable; | Recherche dans la colonne nomcol la plus grande valeur | ||||||||||
SELECT Count(expression) FROM nomtable; | Compte le nombre de ligne de l'expression expression en sautant les valeurs NULL expression peut être le nom d'une colonne. | ||||||||||
SELECT Count(*) FROM nomtable; | Compte le nombre d'enregistrement de la table nomtable. | ||||||||||
Regroupement de Données : GROUP BY | |||||||||||
SELECT ville, AVG(age) FROM nomtable GROUP BY ville; | Cette commande fait des regroupement par ville et fait la moyenne d'âge pour chaque ville. note: tous les noms de colonne présent dans la clause SELECT doivent obligatoirement se retrouver dans la clause GROUP BY (les fonctions ne réponde pas à cette règle ex:AVG(non_col). par contre les noms de colonne qui se trouve dans le GROUP BY ne doivent pas obligatoirement se trouver dans le SELECT. | ||||||||||
SELECT ville, AVG(age) FROM nomtable GROUP BY ville HAVING AVG(age > 25); | Cette commande fait des regroupement par ville et fait la moyenne d'âge pour chaque ville. la clause having rajoute permet de restreindre les groupes ici seul les villes ayant une moyenne d'âge supérieur à 25. PS : la clause WHERE est l'équivalent de la clause HAVING pour le GROUPE BY | ||||||||||
Operation sur les ensembles | |||||||||||
Union | |||||||||||
SELECT ville FROM nomtable UNION SELECT ville FROM nomtable_2; | Combine le résultat de deux SELECT | ||||||||||
Union All | |||||||||||
SELECT ville FROM nomtable UNION ALL SELECT ville FROM nomtable_2; | Combine le résultat de deux SELECT mais contrairement a UNION, UNION ALL ne supprime pas les doublons et ne tri pas le résultat. | ||||||||||
Intersect | |||||||||||
SELECT ville FROM nomtable INTERSECT SELECT ville FROM nomtable_2; | Retourne comme résultat tous les enregistrement commun au deux SELECT. | ||||||||||
Minus | |||||||||||
SELECT ville FROM nomtable MINUS SELECT ville FROM nomtable_2; | Retourne le résultat de la premiére requete moins le enregistrements qui se trouve dans la deuxième requête. |
Sous intérrogation | |
SELECT ville FROM nomtable WHERE age > ( SELECT AVG(age) FROM france); | Fait une sélection de toutes les ville de la table nomtable qui on une moyenne d'âge plus grande que la moyenne d'âge de la table france. P.S. La sous interrogation peut également être utilisé dans la clause HAVING d'un GROUPE BY |
Insertion d'enregistrement : INSERT | |
INSERT INTO table_personne VALUES ('mon_nom', 'Sylvain', 23); | Insert un nouvel enregistrement dans le table table_personne avec cette méthode tous les champs de la base doivent être remplit. |
INSERT INTO table_personne(nom_champ1, nom_champ2) VALUES ('mon_nom', 'Sylvain'); | Insert un nouvel enregistrement dans le table table_personne avec cette méthode on peut laisser le champs âge vide. |
INSERT INTO table_personne VALUES ('mon_nom', 'Sylvain', NULL); | Insert un nouvel enregistrement dans le table table_personneavec cette méthode on peut laisser le champs âge vide. cette méthode on peut également laisser le champs âge vide. |
Modification d'enregistrement : UPDATE | |
UPDATE table_personne SET nom_champ2 = 'Sylvain', nom_champ3 = 23 WHERE nom_champ1 = 'mon_nom'; | Remplace la valeur de nom_champ2 pas Sylvain et la valeur de nom_champ3 pas 23 pour tous les enregistrements selectionné dans le WHERE P.S. Si il n'y a pas de clause WHERE pour limiter la commande les modifications se feront pour tous les enregistrements de la table. |
Suppression d'un enregistrement : DELETE | |
DELETE table_personne WHERE nom_champ = 'nom_a_supprimer'; | Supprime tous les enregistrements de la table ou la condition du where est vérifié |
Transactions | |
Enregistrement de transactions | |
COMMIT; | Enregistre dans la base toutes les modifications qui on été effectuées depuis le dernier COMMIT |
Annulation de transactions | |
ROLLBACK; | Efface toutes les modifications qui on été effectuées depuis le dernier COMMIT |
Création de table : CREATE TABLE | |
CREATE TABLE nom_table ( nom_champ1 type_champ_entier(nb_octet), nom_champ2 type_champ_caractere(nb_octet) ); | Créer une table nommée nom_table qui a deux champs : nom_champ1 de type type_champ_entier nom_champ2 de type type_champ_caractere nb_octet est la taille en octet du champ P.S. les types de champ étant spécifique a la base de données, ne sont pas traité ici un type peut comporte également la longueur du champ |
Création de table avec une clef primaire sous Oracle | |
CREATE TABLE nom_table ( id type_champ_entier(nb_octet) NOT NULL, nom type_champ_caractere(nb_octet) CONSTRAINTE Clef_id PRIMARY KEY(id) ); | Créer une table nommée nom_table qui a deux champs : id de type type_champ_entier nom de typetype_champ_caractere nb_octet est la taille en octet du champ le dernière ligne indique que la clef primaire est le champs id |
Modification de la structure d'une table : ALTER TABLE | |
Ajout d'une colonne | |
ALTER TABLE nom_table ADD (nom_champ type_champ) | Cette commande permet d'ajouter une colonne nom_champ de type type_champ dans la table nom_table |
Modification d'une colonne | |
ALTER TABLE nom_table MODIFY (nom_champ type_champ) | Cette commande permet de modifier la colonne nom_champ de la table nom_table en lui donnant le type type_champ dans |
Suppression de table : DROP | |
DROP TABLE nom_table | Cette commande efface la table et son contenu ainsi que les index Note : il est impossible d'annuler cette commande |
Renommer une table, une vue ... (Oracle) : RENAME | |
RENAME nom_table TO nouveau_nom_table | Cette commande renomme la table nom_table en nouveau_nom_table Note : pour effectuer cette commande il faut être le propriétaire de la table |
Vider une table | |
Vider une table | |
DELETE FROM nom_table | Cette efface tous les enregistrement de la table |
Vider une table sous oracle : TRUNCATE ou DELETE | |
TRUNCATE TABLE nom_table | Cette commande vide la table nom_table de tous ces enregistrements et liber l'espace mémoire qu'il occupait. Note : il est impossible d'annuler cette commande |
DELETE nom_table | Cette efface tous les enregistrement de la table |
| |
Commande ORACLE | |
Information sur les tables | |
SELECT table_name FROM user_tables; | Affiche le nom de toutes les tables de l'utilisateur. |
SELECT * FROM user_tab_columns; | Affiche le nom de toutes les tables de l'utilisteur, en indiquant le mon et le type de toutes les colonnes. |
SELECT table_name FROM all_tables; | Affiche le nom de toutes les tables de la base de données |
Erreurs | |
oerr nom_de_l'erreur | Affiche de l'aide sur l'erreur |
SAVEPOINT GRANT REVOKE contraintes vue ... | |
Commande INGRES lancement de l'utilitaire isql (ingres): isql nombase F1 et g : pour exécuter une requête F3 : pour revenir en arrière ou quitter selon la position courante stddev numérique variance numérique |