PROJET AUTOBLOG


Opennews

source: Opennews

⇐ retour index

Requetes sql server

lundi 3 avril 2017 à 14:56
Salut, je me retrouve avec des requêtes sur le bras, à se demander si tout est ok

/*INTERROGATION MULTI-TABLES*/

/*Modifier la table clients afin de rajouter le parrain 'vipcli'
- Null, C1, NULL, C6, C6, NULL*/
ALTER TABLE CLIENTS
   ADD(vipcli char(4));
   
UPDATE CLIENTS
   SET vipcli = 'c1'
   WHERE numcli = 'c2';

UPDATE CLIENTS
   SET vipcli = 'c6'
   WHERE numcli = 'c4'
   OR numcli = 'c5';

/*La jointure naturelle
- Afficher le code client, le nom du client et le numéro de facture pour l'ensemble des clients ayant fait l'objet d'une facture*/

SELECT c.numcli, c.nomcli, f.numfact
FROM CLIENTS c NATURAL JOIN FACTURE f;

/*L'équi-jointure
- La requète précédente en exploitant l'égalité*/

SELECT c.numcli, c.nomcli, f.numfact
FROM CLIENTS c, FACTURE f
WHERE c.numcli = f.numcli;

/*La jointure gauche
- afficher le nom et les coordonnées complètes des clients n'ayant pas passés de commande à ce jour*/

SELECT c.nomcli, (c.ruecli + ' ' + c.cpcli + ' ' + c.villecli) AS 'ADRESSE'
FROM CLIENTS c LEFT JOIN FACTURE f
ON c.numcli = f.numcli;

/*la jointure réflexive
- Afficher uniquement le nom des clients ainsi que le nom de la personne qui l'a parrainé. Faites usages des alias de colonnes et de tables*/

SELECT c1.nomcli, c2.nomcli
FROM CLIENTS c1, CLIENTS c2
WHERE c1.numcli = c2.vipcli;

/*Non équi-jointure
- Afficher le nom du client et le numéro de facture pour lesquels il n'y a pas d'égalité.*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c, FACTURE F
WHERE c.numcli != f.numcli;

/*Jointure interne
- Afficher le nom du client et le numéro de facture pour l'ensemble des clients ayant passé une commande*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c INNER JOIN FACTURE f
ON c.numcli = f.numcli;

/*Jointure croisée
- Afficher le nom du client, le numéro de facture après avoir défini une jointure croisée avec CROSS*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c CROSS JOIN FACTURE f;

/*
- Idem que pour la requête précédente en exploitant JOIN*/

SELECT c.nomcli, f.numfact
FROM CLIENTS c INNER JOIN FACTURE f
ON c.numcli = f.numcli;

/*
- Idem que pour la requête précédente en exploitant SSTRAIGHT_JOIN*/

SELECT STRAIGHT_JOIN c.nomcli, f.numfact
FROM CLIENTS c, FACTURE f;

/*Jointure interne
- Afficher le nom du client et le numéro de facture pour l'ensemble des clients ayant passé une commande. -STRAIGHT_JOIN-*/

SELECT STRAIGHT_JOIN c.nomcli, f.numfact
FROM CLIENTS JOIN FACTURE f
ON c.numcli = f.numcli;

/*Opérateur IN et NOT IN
- Désignation des produits n'ayant jamais été commandés*/

SELECT p.design AS 'produit'
FROM PRODUIT p
WHERE p.numprod NOT IN (SELECT NUMPRO
                       FROM PRODUIT p, LIGNEF L
                       WHERE p.numprod = l.numprod);

/*Code des factures et désignation des produits livrés à la fois par les fournisseurs RapidLiv et LivExpress en janvier 2002*/

SELECT p.design, l.numfact
FROM PRODUIT p, LIVRER l
WHERE p.numprod = l.numprod
AND l.dateliv LIKE "2002-01-%"
AND l.numliv IN (SELECT l1.numliv
               FROM LIVRER l1 NATURAL JOIN LIVREUR l2
               WHERE l2.raisonsoc = "Express")
AND l.numliv IN (SELECT l1.numliv
               FROM LIVRER l1 NATURAL JOIN LIVREUR l2
               WHERE l2.raisonsoc = "Rapid-liv");
               
/*Opérateurs EXISTS et NOT EXISTS
- Référence des produits n'ayant jamais été commandés*/

SELECT numprod
FROM PRODUIT
WHERE numprod NOT EXISTS (SELECT numprod
                         FROM LIGNEF);                

/*
- Nom et adresse des cliens n'ayant pas passé de commande en 2002*/

SELECT c.nomcli, c.ruecli, c.cpcli, c.villecli
FROM CLIENTS c INNER JOIN LIGNEF f
ON c.numcli NOT EXISTS f.numcli;

/*Opérateurs ensemblites
- Donner le nombre de produits de l'entreprise ayant un prix TTC supérieur à 25€*/

SELECT COUNT(numprod)
FROM PRODUIT
HAVING (pu*1.2) > 25;

/*
- Afficher le code de facture et le prix TTC du produit le plus cher commandé par 'JEAN' pour chacune de ces factures sachant que le taux de TVA est de 19.60%.
Le résultat présentera un alias pour les entêtes de colonnes et tri décroissant sur le code de facture*/

SELECT f.numfact AS 'Code de facture', MAX(p.pu*1.196) AS 'Prix TTC'
FROM CLIENTS c NATURAL JOIN FACTURE f NATURAL JOIN LIGNEF l NATURAL JOIN PRODUIT p
WHERE c.nomcli = "jean"
GROUP BY (l.numfact)
ORDER BY l.numFact DESC;

/*
- Afficher le nom du client, son numéro de facture et le nombre de produits commandés, pour l'ensemble des clients ayant passé une commande
d'au moins 2 produits en triant le résultat sur le nom du client et le numéro de sa facture*/

SELECT c.nomcli, c.numcli, f.numfact, l.numfact*SUM(l.qte)
FROM CLIENTS c NATURAL JOIN FACTURE f NATURAL JOIN LIGNEF l
HAVING l.numfact*SUM(l.qte) > 2
GROUP BY (l.numfact)
ORDER BY c.nomcli
ORDER BY l.numfact;

/*
- Afficher le nom du client, ses cooderdonnées, l'entreprise de livraison et le produit livré pour l'ensemble des clients
ayant reçu leur livraison le jour de la commande. Exploiter une jointure interne, des alias de colonnes, des tables et un
tri décroissant sur le nom du client puis la date de facture */

SELECT c.nomcli, (c.ruecli + " " + c.cpcli + " " + c.villecli) AS 'Adresse', l2.raisonsoc AS 'Entreprise de livraison', p.desig AS 'Produit'
FROM CLIENTS c NATURAL JOIN FACTURE f NATURAL JOIN PRODUIT p NATURAL JOIN LIVRER l1 NATURAL JOIN LIVREUR l2
WHERE f.dateliv = l1.dateliv
ORDER BY c.nomcli DESC
ORDER BY f.datef DESC;

merci pourriez vous me dire si c ok ?
(Permalink)