Formation en SQL
Formation en SQL
Formation en SQL
SELECT SUM(S.Nombre_article)
from (SELECT fa_codeFamille, count(*) as Nombre_Article from f_article
group by FA_CodeFamille) S
select count(*) from f_article
/* REQUETES MULTI-TABLES*/
/* Clé primaire de la table parent en association avec celle étrangère
de la table fille
PRODUIT CARTESIEN : résultat d'une jointure sans condition. Il
multiplie le nombre de lignes de la table1 par celle de la table 2
NB : Il est très dangereux de l'utiliser
--Syntaxe normalisée
select champ1, champ2, ... from table1 as T1 [JOIN] table2 as T2 [ON]
T1.champ1 = T2.champ2
/* JOINTURES EXTERNES */
/* Afficher les lignes d'une table qui ne correspondent pas à la
condition de jointure, cad les enregistrements d'une table
qui ne se trouvent pas dans l'autre table */
--Syntaxe normalisée :
select champ1, champ2, ... from table1 as T1 {LEFT | RIGHT | FULL}
[OUTER JOIN] table2 as T2 [ON] T1.champ1 = T2.champ2
/* LEFT : les données de la table de gauche se trouvent priviligiées.
Donc même si les records de la table de gauche ne sont pas référencés
dans l'autre table, alors elles seront affichées
RIGHT : l'inverse
FULL : affiche tous les records de la table1 qui ne se trouvent pas
dans l'autre et inversement */
select count(*) from f_comptet
select L.Ct_Num as "Numéro Compte",
CASE
WHEN Do_domaine = 0 THEN 'VENTES'
WHEN DO_Domaine = 1 THEN 'ACHATS'
WHEN DO_Domaine = 2 THEN 'STOCK'
END as "Domaine du Document",
CASE L.Do_type
WHEN 6 THEN 'Facture Non Comptabilisée'
WHEN 7 THEN 'Facture Comptabilisée'
WHEN NULL THEN 'Aucun document'
ELSE 'RAS'
END as Type_Document
, COALESCE(L.Do_piece, 'Pas de facture'), C.Ct_intitule
from F_COMPTET C LEFT OUTER JOIN F_DOCLIGNE L
ON L.CT_Num = C.CT_Num
--where L.[DO_Domaine] = 3
select distinct ct_num from F_DOCLIGNE
/* AUTO-JOINTURE*/
--Réaliser la jointure d'une table sur elle-même en utilisant des alias
/*COMMANDE INSERT*/
INSERT INTO users (id, nom, prenom, email, date_naissance, pays, ville,
code_postal, nombre_achat)
SELECT * from utilisateur where pays = 'Gabon'
/*COMMANDE UPDATE*/
select * from utilisateur
/*COMMANDE DELETE*/
select * from users
/*TYPES DE DONNEES*/
--CARACTERES
CHAR(n) : chaine de caractères de longueur fixe (n<16383)
VARCHAR(n) : chaine de caractères de n caractères maximum (n<16383)
NCHAR(n) : valeur alpha de longueur fixe (max 4000) unicode
NVARCHAR(n) : valeur alphanumérique de longueur maximale fixée sur le
jeu de caractère du pays
NB : NCHAR et NVARCHAR sont codés sur 04 octets tandis que CHAR et
VARCHAR sont codés sur 02 octets
--NUMERIQUES
NUMERIC(n,d) : nbre de n chiffres et d nbre de chiffres après la
virgule
INTEGER ou INT : entier signé (avec chiffres négatifs inclus) de 32
bits (-2E31 à 2E31-1)
SMALLINT : entier court signé de 16 bits (-32768 à 32757)
FLOAT : réel à virgule flottante à échelle et précision obligatoire (à
n chiffres de 1 à 53)
REAL : réel à virgule flottante de faible précision
DOUBLE PRECISION : réel à virgule flottante de grande précision
(calculs scientifiques)
BIT : chaine de bit de longueur fixe
BIT VARYING : chaine de bit de longueur maximale
--DATE
DATE : date du calendrier grégorien (AAA-MM-JJ)
TIME : heure sous la forme 12:54:22:56
TIMESTAMP : date et heure
/*
Une clause qui va contraindre la modification dans une table. Assure la
cohérence des données. Spécifiée dès la création de la table ou après
(ALTER TABLE)
CREATE TABLE nom_table (noù_champ CONTRAINTE [...])
ALTER TABLE ADD CONSTRAINT nom_contrainte TYPE CONTRAINTE
- NOT NULL : la colonne ne porte pas de valeur vide (NULL)
- PRIMARY KEY : définir un identifiant clé primaire (on ne peut avoir
deux objets de même champ clé primaire). NB : un index unique sera
automatiquement
créé. Une seule clé primaire par table et ne doit jamais être NULL, pas
de doublon possible.
- UNIQUE : même caractéristique que la clé primaire à l'exception qu'on
peut avoir plusieurs contraintes UNIQUE sur une table et les champs
peuvent avoir
des valeurs NULL
- REFERENCES : clé étrangère qui fait référence d'un champ sur une
autre table. Donc les données qui y seront insérées doivent provenir
d'un champ d'une
autre table
- DEFAULT : préciser la valeur positionnée si aucune information n'a
été définie par défaut
- CHECK : définit les règles de validation. Spécifier les valeurs qui
doivent être insérées dans un champ
*/
/* LES VUES
- Un objet logique auquel est rattaché une requête SQl (SELECT)
- A chaque utilisation de la vue, la requête associée est exécutée
(cacher la complexité d'une requête/permettre l'utilisation
mutuelle de la vue)
- Aucun stockage physique des données de la vue
AVANTAGES
- cacher la complexité de la requête
- la description de la vue est sauvegardée dans la BD (nom, requête
associée)
- une restriction d'accès à la table pour l'user (droits sur les users
sur la vue (pas en modification par exemple) )
- centralisation des requêtes (si elle est modifiée, elle l'est pour
tous les users)
- un groupement d'infos au sein d'une entité (pour le même résultat)
SEQUENCES
Objets qui permettent de générer des séries de numéros séquences
uniques. Compteur qui s'incrémente avec un pas d'incrémention
Elles sont des objets à part entière, et peuvent être utilisées sur
plusieurs tables
SYNTAXE
CREATE SEQUENCE nom_sequence --Nom unique
[START WITH <constant>] --Spécifier la valeu de départ du N° de
séquence. Par défaut = valeur dans l'option MINVALUE (séqu ascendante)
[INCREMENT BY <constant>] --Spécifier le pas d'incrémentation du N° de
séquence (positif comme négatif)
[{MINVALUE [<constant>]} | {NO MINVALUE}] --Spécifier la valeur limite
basse (valeur minimale)
[{MAXVALUE [<constant>]} | {NO MAXVALUE}] --Spécifier la valeur limite
haute (valeur maximale)
[CYCLE | {NO CYCLE}] --Spéficier que doit faire la séquence lorsque le
N° séq atteint la valeur MAX (MAXVALUE). Il reveint à MINVALUE et
repart avec le compteur
[{CACHE [<constant>]} | {NO CACHE}] --Forcer l'anticipation de la
génération des valeurs de la séquence en mémoire
MODIFICATION
ALTER SEQUENCE nom_sequence [..]
SUPPRIMER
DROP SEQUENCE nom_sequence (si des champs référencent cette séquence,
impossible de la supprimer)
*/
create table t1
(
num integer DEFAULT (NEXT VALUE FOR seq_1),
nom char(20)
)
create table t2
(
num integer DEFAULT (NEXT VALUE FOR seq_1),
nom char(20)
)
--Test des valeurs du compteur
insert into t1 values (default, 'test seq_1 sur t1') --Plus on insère,
plus le compteur augmente
select * from t1
/*
SYNONYMES : alias donné à un objet dans la base de données. Aucun
stockage physique dans le SGBDR
CREATE SYNONYM nom_synonym FOR nom_objet
DROP SYNONYM nom_synonym
*/
--Créer un synonyme pour la table
CREATE SYNONYM documents FOR F_DOCENTETE
CREATE SYNONYM lignes_doc FOR F_DOCLIGNE
CREATE SYNONYM comptes FOR F_COMPTET
/*
LES INDEX
SYNTAXE
CREATE [UNIQUE] INDEX nom_index
ON nom_table (nom_champ [ASC/DESC], ...) --Un ou plusieurs champs.
*/
CREATE TABLE TEST_PERF
(
num numeric(10),
nom varchar(50)
)
--Creation d'un boucle (T-SQL) qui va charger 100K lignes dans la table
DECLARE @i INT
SELECT @i = 1
WHILE (@i < 1000001)
BEGIN
INSERT INTO TEST_PERF VALUES (@i, 'Test index LANGAGE SQL');
SELECT @i = @i+1
END
DECLARE @i INT
SELECT @i = 1000001
WHILE (@i < 10000000001)
BEGIN
INSERT INTO TEST_PERF VALUES (@i, 'Test index LANGAGE SQL');
SELECT @i = @i+1
END