Professional Documents
Culture Documents
Apprentissages : Une seule table. Critre unique = ordres simples : SELECT, FROM, WHERE, ORDER BY. Comparateurs = <> < <= > >= Noms des champs entre crochets quand ils comportent un espace. Point-virgule (;) la fin de chaque requte SQL. toile (*) pour prendre tous les champs dune table. Tri simple de la liste sur tel ou tel critre Masquer un champ, ncessaire comme critre dextraction ou clef de tri, mais indsirable laffichage. A1 - Liste des employs (nom, prnom, fonction) sans mise en ordre : (Difficult = respecter les accents)
A3 -
A4 -
Coordonnes des clients rsidant Stuttgart (nom, adresse, tlphone et fax) : (Difficult = reprer que la rubrique Nom nexiste pas dans Clients, et que Adresse ne suffit pas)
Page 1
A5
Nom et tlphone de nos clients canadiens (ordre alpha) : (Difficults = premire utilisation de ORDER BY, et dcocher laffichage des colonnes utiles la requte mais inutiles laffichage, ici le pays)
A6 -
Liste des produits dont le stock est infrieur au niveau de rapprovisionnement : (Difficult = premire utilisation de 2 rubriques dans une clause WHERE)
A7 -
A8 -
Page 2
A9 -
Liste des commandes (numro de lemploy ayant pris la commande, date et montant) range par employ et par date :
A11 - Liste des noms de nos clients (ordre alpha) chez lesquels nous sommes en contact avec le propritaire :
A12 - Liste des produits dont le stock est infrieur 10 (par ordre croissant du niveau de stock) :
A13 - Liste des fournisseurs allemands (toutes rubriques et ordre alpha sur nom) :
Page 3
A16 - Quels sont les numros de tlphone et de fax du fournisseur Ma Maison ? (afficher aussi sa ville) :
Page 4
P P P
B2 -
Liste des noms, tlphones et adresses des clients qui nont pas de fax (dans lordre des noms des clients) :
(Difficult : premier cas dutilisation de IS NULL ou IS NOT NULL dans une clause WHERE)
B3 -
Page 5
B4 -
Nom, prix et stock des produits dont le nom commence par "QU" : (Ordre alpha)
B5 -
Nom et tlphone des fournisseurs installs ailleurs qu'en France ou en Allemagne (par pays) : (Difficult : association de contraintes avec OR ou AND)
B6 -
Produits dont on a un stock entre 10 et 30 (par ordre dcroissant de stock) : Difficult :plage de valeurs entre crochets associe au joker toile *
B7 -
Page 6
B8 -
B9 -
B10 - Commandes reues le 4 du mois (quel que soit le mois et quelle que soit lanne) : (Difficults : respecter la syntaxe contraignante des dates avec LIKE et les jokers)
B11 - Socits clientes dont le nom commence par The (ordre alpha) :
Page 7
B13 - Noms et tlphones des clients habitant Paris et ayant un fax (ordre dcroissant du nom) :
B14 - Montants des commandes passes en novembre et dcembre 1990 (les plus grosses en tte) :
Page 8
C2 -
C3 -
Page 9
C4 -
Liste des messagers connus de chaque client (au moins une commande reue via ce messager), ordonne par client et par messager :
C5 -
Nom et pays des fournisseurs de poissons et fruits de mer (choisir un ordre intelligent et ne pas afficher de doublons !) :
C6 -
Nom et pays des fournisseurs de poissons et fruits de mer localiss en Sude ET au Japon (toujours sans doublons !) :
C7 -
Liste des clients livrs en 1992 par Speedy Express : ordre ville et date denvoi :
Page 10
C8 -
Nom des clients ayant command quelque chose en mars 1992 (liste trie par ordre chrono et alpha) :
C9 -
Nom des clients et produits commands dans les commandes davril 1992 (quel que soit le jour) :
Page 11
D2 -
D3 -
D3 -
Page 12
D4 -
D4 -
D5 -
Quels sont les salaires moyens, mini et maxis des vendeurs par chef ?
D6 -
D7 -
Page 13
D8 -
Nombre de commandes expdies dans les 15 derniers jours, et CA correspondant. Dans la mme requte, calculez la VMC (valeur moyenne de ces commandes) : changez la date du jour de votre ordinateur pour que nous soyons le 1 er avril 92 La fonction date() rend la date du jour et on peut ajouter ou soustraire des entiers (des jours). La fonction Somme(Champ) (ou Sum en anglais) additionne les valeurs de ce champ, la fonction Compte(Champ) dnombre les occurrences de ce champ plein
D9 -
D10 - Liste des catgories de produits (ordre alpha) commands par chaque client (ordre alpha) en 1991 et CA correspondant
Page 14
D11 - Combien avons-nous reu de commandes en 1992, et pour quel montant (global et moyen) ?
Page 15
A1 -
A2 -
Page 1
A4 -
SELECT Socit, Adresse, [Code postal], Ville, Tlphone, Fax FROM Clients WHERE Ville="Stuttgart";
A5
A6 -
SELECT [Nom du produit],. [Units en stock],. [Niveau de rapprovisionnement] FROM Produits WHERE [Units en stock] < [Niveau de rapprovisionnement];
facultatif
A7 -
Page 2
A8 -
A9 -
Liste des commandes (numro de lemploy ayant pris la commande, date et montant) range par employ et par date :
SELECT [#N employ], [Date commande], Montant FROM Commandes ORDER BY [#N employ], [Date commande];
Page 3
A11 - Liste des noms de nos clients (ordre alpha) chez lesquels nous sommes en contact avec le propritaire :
A12 - Liste des produits dont le stock est infrieur 10 (par ordre croissant du niveau de stock) :
SELECT [Nom du produit], [Units en stock] FROM Produits WHERE [Units en stock]<10 ORDER BY [Units en stock];
A13 - Liste des fournisseurs allemands (toutes rubriques et ordre alpha sur nom, puis sur numro) :
Page 4
A16 - Quels sont les numros de tlphone et de fax du fournisseur Ma Maison ? (afficher aussi sa ville) :
SELECT Socit, Ville, Tlphone, Fax FROM Fournisseurs WHERE Socit="Ma maison";
Remarque : il faut taper soi-mme les guillemets quand la valeur requise comprend un espace.
Page 5
B1 -
B2 -
Liste des noms, tlphones et adresses des clients qui nont pas de fax (dans lordre des noms des clients) :
SELECT
Socit, Adresse, [Code postal], Ville, Tlphone FROM Clients WHERE Fax IS NULL ORDER BY Socit;
B3 -
SELECT Socit, Ville, Fax FROM Fournisseurs WHERE Fax IS NOT NULL;
B4 -
Nom, prix et stock des produits dont le nom commence par "QU" (Ordre alpha) :
SELECT
[Nom du produit], [Prix unitaire], [Units en stock] FROM Produits WHERE [Nom du produit] LIKE "qu*" ORDER BY [Nom du produit];
Page 6
B5 -
Nom et tlphone des fournisseurs installs ailleurs qu'en France ou en Allemagne (par pays) :
B6 -
SELECT [Nom du produit], [Units en stock] FROM Produits WHERE [Units en stock] BETWEEN 10 AND 30 ORDER BY [Units en stock] DESC;
B7 -
B8 -
SELECT [Nom du produit] FROM Produits WHERE [#Code catgorie] LIKE "??88"; Remarque : en mode Cration, pas besoin de taper Comme, ni mme les guillemets...
Page 7
B9 -
SELECT [Nom du produit], [#Code catgorie] FROM Produits WHERE [#Code catgorie] LIKE "?1?8";
B10 - Commandes reues le 4 du mois (quel que soit le mois et quelle que soit lanne) :
SELECT [N commande], [Date commande] FROM Commandes WHERE [Date commande] LIKE "04/*/*";
Notez bien quen SQL, la syntaxe relative aux dates nest pas la mme avec WHERE ou BETWEEN (M/A/AA entre # #) et LIKE (JJ/MM/AAAA entre " ").
B11 - Socits clientes dont le nom commence par The (ordre alpha) :
SELECT Socit FROM Clients WHERE Socit LIKE "the*" ORDER BY Socit;
Page 8
SELECT [Nom du messager] FROM Messagers WHERE NOT [N messager]=2; ou WHERE [N messager]<>2;
B13 - Noms et tlphones des clients habitant Paris et ayant un fax (ordre dcroissant du nom) : SELECT Socit, Tlphone FROM Clients WHERE (Ville="Paris") AND (Fax IS NOT NULL) ORDER BY Socit DESC;
B14 - Montants des commandes passes en novembre et dcembre 1990 (les plus grosses en tte) :
SELECT Montant, [Date commande] FROM Commandes WHERE [Date commande] BETWEEN #11/1/90# AND #12/31/90# ORDER BY Montant DESC;
SELECT [Nom du produit], Indisponible FROM Produits WHERE Indisponible=Yes ORDER BY [Nom du produit];
Page 9
SELECT [Nom du produit], Socit FROM Fournisseurs, Produits, Fournisseurs INNER JOIN Produits ON [N fournisseur] =[#N fournisseur] ORDER BY Socit, [Nom du produit];
C2 -
SELECT [Nom de catgorie], [Nom du produit] FROM Catgories, Produits, Catgories INNER JOIN Produits ON [Code catgorie] = [#Code catgorie]
C3 -
SELECT [Nom du produit], Socit FROM Fournisseurs, Produits, Fournisseurs INNER JOIN Produits ON [N fournisseur] = [#N fournisseur] WHERE Socit="Ma maison";
C4 -
Liste des messagers connus de chaque client (au moins une commande reue via ce messager), ordonne par client et par messager :
SELECT DISTINCT Socit, [Nom du messager] FROM Clients, Commandes, Messagers, Clients INNER JOIN Commandes ON Clients.[Code client] = Commandes.[#Code client], Messagers INNER JOIN Commandes ON Messagers.[N messager] = Commandes.[#N messager] ORDER BY Socit, [Nom du messager];
Page 10
C5
SELECT DISTINCT Socit, Pays FROM Fournisseurs, Produits, Catgories, Fournisseurs INNER JOIN Produits ON [N fournisseur] = [#N fournisseur], Catgories INNER JOIN Produits ON [Code catgorie] =[#Code catgorie]
WHERE [Nom de catgorie]="Poissons et fruits de mer" ORDER BY Pays, Socit;
Je veux LIER Fournisseurs Catgories : Pb : il ny a pas de relation (directe) entre ces deux tables : Pour spcifier que lon ne veut pas de pas de clef externe [#N Catgorie] dans Fournisseurs doublons en mode Cration, on accde aux et pas non plus de [#N Fournisseur] dans Catgories proprits de la requte avec un double clic DONC : la table Produits nest pas directement utile (on ny puise rien pour laffichage ou des calculs, on ny teste La proprit utile est Valeurs distinctes :Non rien pour lextraction ou la mise en ordre), mais elle est indispensable pourtant pour tablir un pont Remarque pour les fainants qui ont de la mmoire (et de bons de liaison entre Fournisseurs et Catgories. yeux) : cest aussi un double clic sur le Oui qui permet de
passer facilement Non.
C6 -
Nom et pays des fournisseurs de poissons et fruits de mer localiss en Sude et au Japon (toujours sans doublons !) :
SELECT DISTINCT Socit, Pays FROM Fournisseurs, Produits, Catgories, Fournisseurs INNER JOIN Produits ON [N fournisseur] = [#N fournisseur], Catgories INNER JOIN Produits ON [Code catgorie] =[#Code catgorie]
WHERE (Pays="Sude" OR Pays="japon") AND ([Nom de catgorie]="Poissons et fruits de mer") Notez bien limpact du ET et du OU sur les ORDER BY Pays, Socit; rsultats, et rflchissez longuement pour tre
bien sr davoir compris ce qui se passe. Conseil : ajoutez le champ [Code catgorie] la clause SELECT pour contrler, puis essayez toutes les combinaisons de parenthses dans la clause WHERE. Par exemple, il est clair quil ny a aucun fournisseur qui soit la fois sudois ET japonais
Page 11
C7 -
Liste des clients livrs en 1992 par Speedy Express : ordre ville et date denvoi :
SELECT Ville, [Date envoi], Socit FROM Clients, Commandes, Messagers, Clients INNER JOIN Commandes ON Clients.[Code client] = Commandes.[#Code client], Messagers INNER JOIN Commandes ON Messagers.[N messager] = Commandes.[#N messager] WHERE ([Date envoi] BETWEEN #1/1/92# AND #12/31/92#) AND ([Nom du messager]="Speedy express") ORDER BY Ville, [Date envoi];
Autre possibilit (plus commode) : WHERE ([Date envoi] LIKE "*/*/1992") AND ([Nom du messager]="Speedy express")
NB : En mode SQL, dans une clause WHERE ou BETWEEN, utilisez les dises et #M/J/AA#
(1 chiffre pour les jours et les mois, 2 chiffres pour lanne).
Attention : en mode Cration, le format des dates est toujours J/M/AA (lassistance dAccess est omniprsente dans ce mode). Par contre, la subtilit des dises ou des guillemets (Where, Betwwen ou Like) sapplique ici aussi
On peut difficilement imaginer plus compliqu sans jeter ce logiciel la poubelle !
C8 -
Nom des clients ayant command quelque chose en mars 1992 (liste trie par ordre chrono et alpha) :
SELECT [Date commande], Socit FROM Clients, Commandes, Clients INNER JOIN Commandes ON Clients.[Code client] = Commandes.[#Code client] WHERE ([Date commande] LIKE "*/03/1992") ORDER BY [Date commande], Socit;
Page 12
C9 -
Nom des clients et produits commands dans les commandes davril 1992 (quel que soit le jour) :
SELECT [Date commande], Socit, [Nom du produit] FROM Clients, Commandes, Produits, [Dtails commandes], Clients INNER JOIN Commandes ON Clients.[Code client] = Commandes.[#Code client], Produits INNER JOIN [Dtails commandes] ON Produits.[Rf produit] = [Dtails commandes].[#Rf produit], Commandes INNER JOIN [Dtails commandes] ON Commandes.[N commande] = [Dtails commandes].[#N commande] WHERE ([Date commande] LIKE "*/04/1992") ORDER BY [Date commande], Socit; C10 - Catgories de produits vendues le 7 janvier 1992 (sans doublons) :
SELECT DISTINCT [Nom de catgorie], [Date commande] FROM Commandes, Catgories, Produits, [Dtails commandes], Catgories INNER JOIN Produits ON Catgories.[Code catgorie] = Produits.[#Code catgorie], Produits INNER JOIN [Dtails commandes] ON Produits.[Rf produit] = [Dtails commandes].[#Rf produit], Commandes INNER JOIN [Dtails commandes] ON Commandes.[N commande] = [Dtails commandes].[#N commande] WHERE ([Date commande] = #1/7/92#);
D1 -
Pays avec qui nous avons eu le plus grand chiffre d'affaires en 1991 (les plus gros en tte) :
SELECT
[Pays livraison], Sum(Montant) AS [Total Montants] FROM Commandes GROUP BY [Pays livraison] ORDER BY Sum(Montant) DESC;
Page 13
D2 -
D3 -
SELECT Avg([salaire annuel actuel]) AS [Salaire moyen des vendeurs] FROM Employs GROUP BY Fonction HAVING Fonction="reprsentant(e)";
D3 -
SELECT Max([salaire annuel actuel]) AS [Salaire maximum des vendeurs] FROM Employs GROUP BY Fonction HAVING Fonction="reprsentant(e)";
D4 -
SELECT Avg([salaire annuel actuel]) AS [Vendeurs - Salaire moyen], Min([salaire annuel actuel]) AS Mini, Max([salaire annuel actuel]) AS Maxi FROM Employs GROUP BY Fonction HAVING Fonction="reprsentant(e)";
Page 14
D4 -
SELECT Chefs.Nom, Count(Employs.[N employ]) AS [dirige (nb de personnes)] FROM Employs, Employs AS Chefs, Employs INNER JOIN Chefs ON Employs.[#Rend compte ] = Chefs.[N employ] GROUP BY Employs.[#Rend compte ], Chefs.Nom HAVING Employs.[#Rend compte ] Is Not Null;
D5 -
Quels sont les salaires moyens, mini et maxis des vendeurs par chef ?
SELECT Chefs.Nom AS Chef, Avg(Employs.[salaire annuel actuel]) AS [Vendeurs - Salaire moyen], Min(Employs.[salaire annuel actuel]) AS Mini, Max(Employs.[salaire annuel actuel]) AS Maxi FROM Employs, Employs AS Chefs, Employs INNER JOIN Chefs ON Employs.[#Rend compte ] = Chefs.[N employ] GROUP BY Chefs.Nom, Employs.Fonction HAVING Employs.Fonction="reprsentant(e)";
D6 -
SELECT Avg(Employs.[salaire annuel actuel]) AS [Salaire moyen des chefs vendeurs] FROM Employs GROUP BY Employs.Fonction HAVING Employs.Fonction="Chef des ventes";
Page 15
D7 -
SELECT [Pays livraison], Sum(Montant) AS [CA 1991] FROM Commandes WHERE [Date commande] Like "*/*/1991" GROUP BY [Pays livraison];
D8 -
Nombre de commandes expdies dans les 15 derniers jours, et CA correspondant. Dans la mme requte, calculez la VMC (valeur moyenne de ces commandes) :
SELECT
SUM(Montant) AS [CA des 15 derniers jours], COUNT(Montant) AS [Nombre de commandes], SUM([Montant])/COUNT([Montant]) AS VMC FROM Commandes WHERE [Date commande] BETWEEN Date()-15 AND Date();
D9 -
SELECT Nom AS Vendeur, Sum(Montant) AS [CA en sept 90] FROM Commandes INNER JOIN Employs ON Commandes.[#N employ] = Employs.[N employ] WHERE [Date commande] Like "*/09/1990" GROUP BY Nom ORDER BY Nom;
Page 16
D10 - Liste des catgories de produits (ordre alpha) commands par chaque client (ordre alpha) en 1991 et CA correspondant
SELECT Socit, [Nom de catgorie], Sum(Commandes.Montant) AS [CA en 91] FROM Clients, Commandes, [Dtails commandes], Produits, Catgories, Clients INNER JOIN Commandes ON Clients.[Code client] = Commandes.[#Code client], Commandes INNER JOIN [Dtails commandes] ON Commandes.[N commande] = [Dtails commandes].[#N commande], [Dtails commandes] INNER JOIN Produits ON [Dtails commandes].[#Rf produit] = Produits.[Rf produit], Produits INNER JOIN Catgories ON Produits.[#Code catgorie] = Catgories.[Code catgorie] WHERE [Date commande] Like "*/*/1991" GROUP BY Clients.Socit, Catgories.[Nom de catgorie] ORDER BY Clients.Socit, Catgories.[Nom de catgorie];
D11 - Combien avons-nous reu de commandes en 1992, et pour quel montant (global et moyen) ?
SELECT Count(Montant) AS [Nb de commandes en 92], Sum(Montant) AS [CA 92], Avg(Montant) AS [VMC 92] FROM Commandes WHERE Commandes.[Date commande] Like "*/*/1992";
Page 17
SELECT [Nom de catgorie] AS Catgorie, Count([Rf produit]) AS [Nb de produits] FROM Produits INNER JOIN Catgories ON Produits.[#Code catgorie] = Catgories.[Code catgorie] GROUP BY [Nom de catgorie] ORDER BY [Nom de catgorie];
<<
Page 18