Ερώτηση για σύνταξη DML

Γενικές συζητήσεις για SQL και SQL Servers (RDBMS)

Συντονιστές: Super-Moderators, WebDev Moderators

Απάντηση
Άβαταρ μέλους
Firefast
Δημοσιεύσεις: 91
Εγγραφή: 26 Νοέμ 2006 12:53
Τοποθεσία: Χαμένος στο άπειρο

Ερώτηση για σύνταξη DML

Δημοσίευση από Firefast » 30 Αύγ 2015 19:45

Χαιρετώ, θέλω μια μικρή βοήθεια.

Ας πούμε ότι έχουμε τρεις πίνακες. Συγγραφείς, Βιβλία και εκδότες. Ο καθένας με δικό του πρωτεύον κλειδί.
Δημιουργούμε έναν τέταρτο πίνακα με όλα τα πρωτεύοντα κλειδιά των παραπάνω πινάκων για να τα συσχετίσουμε μεταξύ τους.
Η Δομή τους είναι σαν την εικόνα παρακάτω.

Εικόνα

Η ερώτηση μου είναι η εξής:
θέλω η βάση να μου επιστρέψει : όλους τους συγγραφείς που έχουν συγγράψει παραπάνω από 2 βιβλία καθώς και όλα τα βιβλία που έχουν συγγραφεί από παραπάνω από ένα συγγραφέα.

Πως θα πρέπει να είναι σύνταξη του ερωτήματος για να πάρω πίσω αυτά τα αποτελέσματα(αν είναι εφικτό με αυτήν την δομή πάντα);

Κώδικας για την δημιουργία πινάκων

Κώδικας: Επιλογή όλων

"Dhmiourgia pinaka Sugrafewn"

create table writer
(
    w_pk int not null,
    name varChar(15),
    surname varChar(20),
    Primary key (w_pk));

"Dhmiourgia pinaka bibliwn"

create table book
(
    b_pk int not null,
    Isbn varChar(16),
    title varChar(20),
    price float,
    pages int,
    Primary key (b_pk));

"Dhmiourgia pinaka ekdotwn"

Create table publisher
(
    p_pk int not null,
    name varChar(20),
    Primary key (p_pk))


"Dhmiourgia pinaka publisher book writer"
Create table publisher_book_writer
    (
    pbw_pk is not null
    p_pk varChar(2),
    b_pk varChar(2),
    w_pk varChar(2),
    Primary key(pbw_pk),
    Foreign Key p_pk references publisher(p_pk),
    Foreign Key b_pk referencer book(b_pk),
    Foreign key w_pk references writer(w_pk));
It's not technology....It's what you do with it.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ερώτηση για σύνταξη DML

Δημοσίευση από geomagas » 30 Αύγ 2015 23:52

Η δομή σου έχει θέματα.

Αλλά έστω κι έτσι, τι έχεις κάνει μέχρι τώρα; Που κόλλησες;

Άβαταρ μέλους
Firefast
Δημοσιεύσεις: 91
Εγγραφή: 26 Νοέμ 2006 12:53
Τοποθεσία: Χαμένος στο άπειρο

Ερώτηση για σύνταξη DML

Δημοσίευση από Firefast » 31 Αύγ 2015 03:03

Το συγκεκριμένο είναι για την σχολή, μας δίνονται κάποιο ερωτήματα τα οποία θα πρέπει να τα συντάξουμε εμείς σε sql αφού πρώτα δημιουργήσουμε τους πίνακες και τις σχέσεις τους όπως εμείς νομίζουμε ότι είναι καλύτερα.

Τα έχω καταφέρει στα υπόλοιπα ερωτήματα αλλά έχω κολλήσει στο τελευταίο,
δηλαδή,
το πρόβλημα μου είναι πως θα γράψω σε sql να ψάξει στον τέταρτο πίνακα τις διπλές εγγραφές σε μια στήλη(για να δω αν ο συγγραφέας έχει γράψει πάνω από δύο βιβλία) και μετά να του πω να εμφανίσει τα ονόματα αυτών -που ισχύει η συνθήκη- από τον πίνακα των συγγραφέων.

Ίσως σε μπέρδεψα,αναμένω για κάποια τυχών καθοδήγηση και σε ευχαριστώ για τον χρόνο σου.
It's not technology....It's what you do with it.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ερώτηση για σύνταξη DML

Δημοσίευση από geomagas » 31 Αύγ 2015 03:24

Γιατί δεν κάνεις ένα join τον writer με τον publisher_book_writer, και να εμφανίσεις τα name, surname μόνο αν έχεις count(b_pk)>2;

Άβαταρ μέλους
Firefast
Δημοσιεύσεις: 91
Εγγραφή: 26 Νοέμ 2006 12:53
Τοποθεσία: Χαμένος στο άπειρο

Ερώτηση για σύνταξη DML

Δημοσίευση από Firefast » 31 Αύγ 2015 13:07

Επειδή δεν έχω κάποια βάση στημένη για να δοκιμάσω το ερώτημα(θεωρητικό είναι το μάθημα) Κάτι σαν και αυτό θα δούλευε;

Κώδικας: Επιλογή όλων

SELECT writer.name, writer.surname
FROM writer
INNER JOIN publisher_book_writer
Where count(b_pk)>2;
It's not technology....It's what you do with it.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ερώτηση για σύνταξη DML

Δημοσίευση από geomagas » 31 Αύγ 2015 14:18

Firefast έγραψε:Επειδή δεν έχω κάποια βάση στημένη για να δοκιμάσω το ερώτημα(θεωρητικό είναι το μάθημα) Κάτι σαν και αυτό θα δούλευε;

Κώδικας: Επιλογή όλων

SELECT writer.name, writer.surname
FROM writer
INNER JOIN publisher_book_writer
Where count(b_pk)>2;
Almost there.

1) έχεις ξεχάσει τη συνθήκη του join (ΟΝ...)
2) Όταν χρησιμοποιείς aggregate functions (όπως την count) και απλά πεδία, χρειάζεσαι πάντα GROUP BY
3) Αν υπάρχει συνθήκη στην οποία συμμετέχει κάποια aggregate function, τότε αυτή πρέπει να πάει στο HAVING

Το καλύτερο που έχεις να κάνεις είναι να πειραματιστείς πάνω σε υπαρκτό σχήμα. Αν δεν έχεις δυνατοτητα να στήσεις κάτι στο pc σου ή κάπου αλλού, παίξε εδώ. No excuses! :)

Άβαταρ μέλους
Firefast
Δημοσιεύσεις: 91
Εγγραφή: 26 Νοέμ 2006 12:53
Τοποθεσία: Χαμένος στο άπειρο

Ερώτηση για σύνταξη DML

Δημοσίευση από Firefast » 31 Αύγ 2015 21:23

Θα πειραματιστώ (No excuses! ) σε ευχαριστώ για την βοήθεια σου, να σε καλά.
It's not technology....It's what you do with it.

Απάντηση

Επιστροφή στο “Βάσεις Δεδομένων και SQL - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες