Προς το περιεχόμενο

αποριες σε ασκηση sql


mariakal

Προτεινόμενες αναρτήσεις

Δημοσ.

Συνεχίζω το διαβασμα αλλα συνεχιζονται κ οι αποριες μου. Στην πιο κάτω ασκηση, νομιζω οτι η λύση που προτεινεται για το Γ ειναι Λάθος, ενω τις λύσεις Δ & Ε δεν τις καταλαβαίνω. Μπορεί κάποιος να με βοηθήσει?

 

Για τις πιο κατω σχεσεις:

Employee (employee-name, street, city)

Works (employee-name, company-name, salary)

Company (company-name, city)

Manages (employee-name, manager-name)

 

 

 

Γ. Βρείτε όλους τους υπαλλήλους που ζουν στις ίδια πόλεις και στους ίδιους δρόμους με τους διευθυντές τους.

Λυση:

SELECT P.employee-name

FROM employee P, employee R, manages M

WHERE P.employee-name=M.employee-name

and M.manager-name=R.employee-name

and P.street=R.street and P.city=R.city

 

 

Δ. Βρείτε όλους τους υπαλλήλους με μισθό μεγαλύτερο του μέσου μισθού όλων των υπαλλήλων της εταιρίας.

Λυση

SELECT employee-name

FROM works Τ

WHERE salary > (SELECT avg(salary)

FROM works S

WHERE T.company-name=S.company-name)

 

 

 

Ε. Βρείτε την εταιρία με τη μικρότερη συνολική μισθοδοσία (payroll).

Λύση

SELECT company-name

FROM works

GROUP BY company-name

HAVING SUM (salary) <= ALL (SELECT sum(salary)

FROM works

GROUP BY company-name)

Δημοσ.

ΤΟ Γ είναι σωστό

 

Δ.

SELECT employee-name

FROM works Τ

WHERE salary > (SELECT avg(salary)

FROM works S

WHERE T.company-name=S.company-name)

 

Όταν έχεις correlated query θα σου πω πως γίνεται το evaluation.

To εξώ query δηλαδή αυτό

SELECT employee-name

FROM works Τ

WHERE salary ...

φέρνει ένα ένα τα υποψήφια rows. Με το υποψήφιο row που θα φέρει θα υλοποίήσει το inner query δηλαδή αυτό

(SELECT avg(salary)

FROM works S

WHERE T.company-name=S.company-ame)

Όπως φαίνεται το T.company-name έχει έρθει απο το έξω candidate row.

 

Τέλος τσεκάρεται η ισότητα και απορρίπτεται η γίνεται αποδεκτό το row. Και η διαδικασία επαναλαμβάνεται για όλα τα υποψήφια rows.

 

Άρα το έξω query φέρνει έναν έναν όλους του υπαλλήλους . To inner query φέρνει τον μέσο μισθό της εταιρείας που ανήκει ο υπάλληλος.Εξού και η σύνδεση του inner query με το candidate row. Και με την ισότητα αν ο υποψήφιος έχει μεγαλύτερο μισθό απο τον μέσο μισθό της εταιρείας που ανήκει θα γίνει αποδεκτός αλλιώς θα απορριφθεί.

 

Μου φαίνεται τα λέω στρυφνά οπότε σταματάω.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...