2017-02-09 4 views
-3

Ich brauche etwas Hilfe mit meiner Prüfung, es gibt 2 Fragen, aber ich weiß nicht, wie man sie verbindet und welche SQL-Anweisungen ich brauche.Benötigen Sie Hilfe mit 2 SQL-Abfragen

  1. Schreiben Sie eine SQL-Anweisung, die die Mitarbeiter-ID, Nachname zeigt und das Gehalt eines Mitarbeiters, deren Gehalt über dem Preis des teuersten Produkt.

  2. Schreiben Sie eine SQL-Anweisung, die die Kunden-ID des Kunden zeigt, das das Produkt mit product_id 1 gekauft, aber bisher gekauft nie ein Produkt mit product_id 3.

Es wäre schön, wenn mir jemand das erklären Lösung.

enter image description here

+3

Hört auf, andere zu bitten, euch beim Schummeln zu helfen und einfach selbst zu betrügen und ein paar Tutorials zu Joins zu lesen. – dfundako

+2

Sie sollten wirklich versuchen, dies selbst zu beantworten, und wenn Sie stecken bleiben, geben Sie Ihre Arbeit an und fragen Sie nach einem bestimmten Problem. Diese Seite ist kein Ort, an dem Sie Ihre Hausaufgaben erledigen können. – gmiley

+0

Was haben Sie bisher gemacht? Dies ist kein Betrüger auf der Schulseite, es ist eine Hilfe Leute, die versuchen, sich selbst zu helfen. – Forklift

Antwort

0

Mit dem Verständnis, das ist eine Prüfung der Praxis, und dass Sie keinen Zugriff auf die Tabellen/Werte ....

Sie sollten sich wirklich zeigen, was Sie versucht haben .. Aber seit du bist neu ...

Frage 1: Return employeeID, Nachname und Gehalt aller Mitarbeiter, die ein Gehalt höher als der Preis des teuersten Produkts (wie sie vermieden haben mit dem Wort max da ...)

Also verwendet dies eine Unterabfrage, um den maximalen Preis von Produkten zu erhalten und vergleicht einfach das Gehalt damit.

SELECT Employee_ID, Last_Name, Salary 
FROM employees 
WHERE salary > (Select max(price) from Products); 

Frage 2:

generieren zwei Sätze eine für PRODUCT_ID von 1 eine für PRODUCT_ID von 3 und stellen Sie sicher, die mit 1 nicht in der Gruppe mit 3

und diese nutzt eine korrelierte Unterabfrage (beachten Sie, wie der PUR-Alias ​​in der Unterabfrage ist? Deshalb ist es korreliert)

So die erste Abfrage erhält alle Kunden Produkt 1 zu kaufen. Die zweite Abfrage findet alle Kunden Produkt 3. kaufen und da wir nur diese wollen Kunden, die 1 nicht 3 gekauft haben, Wir korrelieren die Abfragen mit nicht existiert und wir haben unsere Antwort.

Existiert - normalerweise am schnellsten, da die Unterabfrage vorzeitig beendet werden kann, sobald ein einzelner Datensatz für einen Kunden gefunden wurde.

SELECT Distinct PUR.Customer_ID 
FROM purchases PUR 
WHERE PRODUCT_ID = 1 
    and not exists (SELECT 1 
        FROM Purchases PUR2 
        WHERE Product_ID = 3 
        and PUR.Customer_ID = PUR2.Customer_I 

Es gibt 2-3 Möglichkeiten, dies zu tun. Ich finde das oben genannte in den meisten Fällen am effizientesten. Sie können es aber auch tun, indem Sie ... sich selbst verbinden; oder unter Verwendung eines nicht in der Aussage

Selbst LEFT (funktioniert kommen groß, wenn Sie Daten aus mehreren Tabellen benötigen

Wir selbst auf Einkäufe beitreten, aber jede Tabelle Beispiel Filter für ein bestimmtes Produkt zu sein.wir verwenden LEFT JOIN, wie wir alle Datensätze mit Produkt-ID 1 und wo eine Übereinstimmung in p2 gefunden wird wollen, müssen wir die Datensätze ausschließen möchten also, wenn die CUSTOMER_ID null ist, das heißt, sie

SELECT Distinct P1.customer_ID 
FROM Purchases P1 
LEFT JOIN Purchase P2 
on P1.customer_Id = P2.customer_ID 
and P2.Product_ID = 3 
WHERE P1.Product_ID = 1 
and P2.customer_ID is null 

kein Produkt 3 Käufe haben nicht in (in der Regel am langsamsten, aber funktioniert gut, wenn Unterabfrage für eine sehr kleine Datenmengen ist)

SELECT Distinct PUR.Customer_ID 
FROM purchases PUR 
WHERE PRODUCT_ID = 1 
    and customer_ID not in (SELECT Customer_Id 
          FROM Purchases 
          WHERE Product_ID = 3) 

Beachten Sie, dass keiner der ersten beiden Antworten verwendet eine Verknüpfung; obwohl eine korrelierte Unterabfrage nah ist.

+0

ok noch eine Frage, wo ist die Spalte "Pur" in Käufe oder ist es nur wie "as" Operation, um es umzubenennen. – M6Gpower

+0

der PUR ist ein Alias ​​wie ein Spaltenalias; aber in diesem Fall müssen Sie für eine Tabelle einfach nicht das Schlüsselwort 'as' verwenden. Der Grund, warum ich einen verwendet habe, ist, dass ich die innere und äußere Abfrage KORRELIEREN kann. Andernfalls weiß die db-Engine nicht, welche Käufe-Tabelle ich meine. Also brauchte ich Aliase. – xQbert

+0

danke für die Erklärung! – M6Gpower