[Guida]: ho dubbi sulle Join

VAik

Utente Attivo
16 Apr 2016
117
3
18
Sulla guida vedo che un negozio online ha creato due tabelle: clienti e acquisti strutturate così:

clienti con questi campi:

id, nome, cognome


e la tabella acquisti con questi campi

id, id_cliente, articolo, prezzo

Si ipotizza di voler recuperare nome e cognome dei soli clienti che hanno effettuato un acquisto con questo codice

Codice:
SELECT clienti.*, acquisti.*
FROM clienti, acquisti
WHERE acquisti.id_cliente = clienti.id;

"Così facendo abbiamo messo in relazione i record della tabella "clienti" con quelli della tabella "acquisti" mediante la clausola WHERE stabilendo un uguaglianza tra i campo "id_cliente" della tabella "acquisti" ed il campo "id" della tabella "clienti". "

ma non erano già in relazione tra di loro le due tabelle? visto che id è presente in entrambe le tabelle?

cosa succede con la clausola WHERE? stabilisco l'uguaglianza tra i clienti del negozio online (id) e quelli che hanno effettuato l'acquisto (id_cliente).

A cosa serve questa uguaglianza????non capisco
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Per avere un quadro delle join possibili tra due tabelle e del loro risultato, ti consiglio una figura che spiega più delle parole,
cerca con google "sql join graphical representation", clicca su una delle figure che si presentano tra le "foto" (quelle mostrate dovrebbero essere tutte uguali)
e, dopo averla capita, conservala
( il primo link nella mia ricerca https://www.google.it/search?q=sql+...cKDOHM%2C_&usg=__VUE4Ox3W_ElaiO3-E6gXqROeCCA= )

per quanto riguarda la tua domanda, lo stesso oggetto (colonna) presente in due tabelle, consente un LEGAME tra loro
questo legame stabilisce un "dettaglio" della posizione principale, esempio
il cliente con i suoi ordini
l'ordine con le sue posizioni
ne deriva
cliente -> ordini -> posizioni
se voglio sapere quando il cliente ha comprato mi fermo al primo legame
se voglio sapere cosa ha comprato devo scendere fino alle posizioni passando per l'ordine,

poi tutto dipende da come viene strutturato il database,
se nelle posizioni d'ordine metto l'id dell'ordine ma anche l'id del cliente, ottengo il legame diretto cliente -> posizioni

quindi il legame tra le tabelle serve a mettere in relazione le informazioni presenti in ciascuna di esse,
mantenendo in ciascuna tabella le informazioni specifiche degli oggetti contenuti
evitando il più possibile la duplicazione dei dati tra tabelle
ma al contempo permettendo di estrarre informazioni coerenti tra loro da tabelle diverse

sufficiente ?
ciao
Marino
 

VAik

Utente Attivo
16 Apr 2016
117
3
18
Grazie Marino per avermi risposto.
Con le immagini forse ho capito cosa è Inner Join, ma ti chiederei di rallentare un pochino.

Mettiamoci dal punto di vista di chi deve creare le tabelle...quindi di chi sta a zero con tutto.

Se ho queste tabelle:

1)clienti con questi campi:

id, nome, cognome


2) tabella acquisti con questi campi:

id, id_cliente, articolo, prezzo

Già per il fatto di avere "id" come campo comune, non mette in relazione le due tabelle? cioè i due id legano le tabelle in questo modo
nella prima tabella :

1 Mario Rossi
2 Luigi Verde
3 Marco Marrone

Nella seconda tabella

3 MM lavastoviglie 300 euro
1 MR phon 12 euro
2 LV armadio 500 euro
1 MR lampadina 3 euro
3 MM frigorifero 700 euro
2 LV ferro da stiro 40 euro
1 MR monitor 100 euro

quindi con id della prima tabella ho identificato l'utente che nella seconda tabella ha fatto determinati acquisti, giusto?


Mi rispondi che" è

un LEGAME tra loro e questo legame stabilisce un "dettaglio" della posizione principale, esempio
il cliente con i suoi ordini
l'ordine con le sue posizioni
se voglio sapere quando il cliente ha comprato mi fermo al primo legame
se voglio sapere cosa ha comprato devo scendere fino alle posizioni passando per l'ordine,
".

Ma quale sono le posizioni ?
il quando non lo si conosce, non ho il campo data.


ritorno con la domanda di prima

cosa succede con la clausola WHERE? stabilisco l'uguaglianza tra i clienti del negozio online (id) e quelli che hanno effettuato l'acquisto (id_cliente).

A cosa serve questa uguaglianza????non capisco

io rispondo che si sta creando un ulteriore legame tra le due tabelle. giusto?

Prima dell'uguaglianza, il legame era solo con il campo id (dove con id della prima tabella che mi fa conoscere chi è il cliente, avevo il legame con la seconda tabella con la quale capisco il cliente cosa ha acquistato).

Ora invece con l'uguaglianza tra id e id-cliente, ho un ulteriore legame con tra le due tabelle (quello tra gli id e quello tra id e id-cliente), giusto?

quindi nel mio caso
con l'id 1 avrò id_cliente MR
con l'id 2 avrò id_cliente LV
con l'id 3 avrò id_cliente MM

ora ti chiedo a che pro questo ulteriore legame? se già prima con l'id avevo modo di capire chi era il cliente e ciò che aveva comprato
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
nella tabella clienti manca l'id_cliente
c'è un'omissione che rende impossibile l'uguaglianza "WHERE acquisti.id_cliente = clienti.id;"
clienti.id è un valore numerico
id_cliente è una sigla

in realtà sembra che l'id sia di "clienti" che di "acquisti" leghi le due tabelle rendendo inutile "id_cliente"
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
tabella clienti con questi campi:
id, nome, cognome
1 Mario Rossi
2 Luigi Verde
3 Marco Marrone

tabella acquisti con questi campi:
id, id_cliente, articolo, prezzo
3 MM lavastoviglie 300 euro
1 MR phon 12 euro
2 LV armadio 500 euro
1 MR lampadina 3 euro
3 MM frigorifero 700 euro
2 LV ferro da stiro 40 euro
1 MR monitor 100 euro
1 MR phon 15 euro

"id_cliente" dovrebbe esistere nella tabella clienti, come sono disegnate le tabelle "id_cliente" non ha senso

inoltre, considera che, se fosse necessario modificare un record della tabella acquisti, non sarebbe possibile, mi spiego,
nella necessità di modificare il prezzo del phon da 15 ad un valore diverso, non esiste nessun elemento (ragionevole) che possa identificare univocamente il record "phon"

l'esempio dovrebbe essere,

id_cliente, nome, cognome
MR Mario Rossi
LV Luigi Verde
MM Marco Marrone
GG Giovanni Bianchi

id, id_cliente, articolo, prezzo
1 MM lavastoviglie 300 euro
2 MR phon 12 euro
3 LV armadio 500 euro
4 MR lampadina 3 euro
5 MM frigorifero 700 euro
6 LV ferro da stiro 40 euro
7 MR monitor 100 euro
8 MR phon 15 euro

in questo modo ciascun record è identificato univocamente,
il cliente con "id_cliente" ( rendendo inutile "id" )
l'acquisto con "id"

gli acquisti di un cliente si identificano con la relazione "id_cliente" quindi vale la seguente ( modificata )
Si ipotizza di voler recuperare nome e cognome dei soli clienti che hanno effettuato un acquisto con questo codice
Codice:
SELECT clienti.*, acquisti.* FROM clienti, acquisti WHERE acquisti.id_cliente = clienti.id_cliente
Così facendo abbiamo messo in relazione i record della tabella "clienti" con quelli della tabella "acquisti" mediante la clausola WHERE stabilendo un' uguaglianza tra "id_cliente" della tabella "clienti" e della tabella "acquisti"
( la relazione esistente deve essere specificata sempre, nella clausola where, quando costituisce elemento di selezione )

come esercizio potresti poi trovare i clienti che NON hanno fatto acquisti ( vedi figura delle Join )

se hai ancora dubbi fatti vivo
ciao
Marino
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
attento, secondo me stai confondendo, non c'entra nulla che nelle due tabelle tu abbia due campi chiamati "id", chiamarli id è un'abitudine, ma potevano essere chiamati in qualsiasi modo
es.
tabella utenti
Codice:
pinco int(12) autoincrement primarikey
nome varchar(250)

tabella ordini
Codice:
pallo  int(12) autoincrement primarikey
id_utente int(12)
articolo varchar(250)
quantita int(9)

il legame tra le due tabelle è dato da "pinco" e "id_utente"
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
@Borgo
ciao Borgo,

se guardi la query nel primo post, vedi che nella clausola where sono usati "id", campo numerico ed "id_cliente" campo alfanumerico con le iniziali del cliente, non estrarrà mai nulla, a mio parere l'esempio è errato,

inoltre "id_cliente", non esiste nella tabella clienti, da dove viene ? a cosa serve ?
spero che il mio post precedente chiarisca la questione
(sempre che non abbia scambiato l'acqua con il vino a pranzo ...)
ciao
Marino
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao marino51
non dicevo a te, cercavo di far capire quale era il collegamento alle tabelle e, da quanto ho intuito, vaik confondeva il concetto di id
 

VAik

Utente Attivo
16 Apr 2016
117
3
18
ciao a tutti ragazzi mi sto riprendendo dall'influenza....piano piano e ritorniamo al 100%

ciao
attento, secondo me stai confondendo, non c'entra nulla che nelle due tabelle tu abbia due campi chiamati "id", chiamarli id è un'abitudine, ma potevano essere chiamati in qualsiasi modo
es.
tabella utenti
Codice:
pinco int(12) autoincrement primarikey
nome varchar(250)

tabella ordini
Codice:
pallo  int(12) autoincrement primarikey
id_utente int(12)
articolo varchar(250)
quantita int(9)

il legame tra le due tabelle è dato da "pinco" e "id_utente"

Grazie della risposta, ma quindi il legame quando si instaura ?
avendo le tue tabelle, quando l'hai instaurato il legame?
con questo comando?

Codice:
SELECT clienti.*, acquisti.* FROM clienti, acquisti WHERE utenti.pinco = ordini.pallo

quindi
 

VAik

Utente Attivo
16 Apr 2016
117
3
18
@Borgo
ciao Borgo,

se guardi la query nel primo post, vedi che nella clausola where sono usati "id", campo numerico ed "id_cliente" campo alfanumerico con le iniziali del cliente, non estrarrà mai nulla, a mio parere l'esempio è errato,

inoltre "id_cliente", non esiste nella tabella clienti, da dove viene ? a cosa serve ?
spero che il mio post precedente chiarisca la questione
(sempre che non abbia scambiato l'acqua con il vino a pranzo ...)
ciao
Marino

a questa osservazione io ti chiedo:
per capire le join facilmente, e quindi con esempi pratici come abbiamo tentato di fare con questa discussione, dove devo andare a leggere, se l'esempio proposto nella guida è errato?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
per capire le join facilmente, e quindi con esempi pratici come abbiamo tentato di fare con questa discussione, dove devo andare a leggere, se l'esempio proposto nella guida è errato?

Non so quali conoscenze hai già nel tuo "bagaglio",
le guide, le reputo un aiuto per sviluppare del codice avendo sufficienti conoscenze
conoscenze che non dimostri di avere dalle domande che fai,
ti consiglio (già dato ad altri) di recarti presso la biblioteca del paese o città dove vivi e recuperare un libro che parli di database e sql,
dopo averlo letto, avrai abbastanza chiaro
come creare un database,
come strutturare gli indici di ricerca,
come legare le tabelle tra loro attraverso gli indici
e magari altre informazioni interessanti
credo sia inutile fare un elenco di titoli, prendi i libri disponibili, valuta il loro indice e leggi quello che ritieni più interessante
 

VAik

Utente Attivo
16 Apr 2016
117
3
18
forse è meglio chiudere anche questa discussione allora.

Fare così come hai detto, è certamente la cosa migliore, ma per chi ha tempo e non conosce già la programmazione da nessuna fonte e quindi non ha già un suo giudizio o pregiudizio. Avendo svolto un percorso di studi che purtroppo ha affrontato la programmazione c++ ed una serie di suoi libri, ti dico che leggere la programmazione dai libri è "fuori dal mondo": non si arriva mai dove si vuole arrivare: per capire cosa devi fare è un'impresa. Forse è il mio punto di vista, però alla fine leggi capitoli e capitoli però poi se devi fare qualcosa al max dici :"bo, proviamo...."

spero sempre in qualche guida che con brevi messaggi ed esempi porti ad una cosa che abbia senso compiuto ed utilità
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
max1974 [HTML] Guida / Helper HTML e CSS 1
D Guida o esempio PHPWord PHP 2
I Guida/Tutorial configurare PHPMailer per inviare mails tramite contact form? PHP 2
Max 1 Guida per costruire un blog con wordPress Altri Annunci 1
G [Guida MyBB 1.8] Mettere in colonna SubForum CMS (Content Management System) 0
G [Guida MyBB 1.8] Inserire icone accanto alle sezioni CMS (Content Management System) 0
S [Visual Basic] AIUTO - CERCO GUIDA Visual Basic 0
P Migrazione sito da http a https per rispettare linee guida google SEO e Posizionamento 12
V [Javascript] [Angular]: guida della versione 2? Javascript 4
Fuego2806 Guida per Phonegap Sviluppo app per Android 0
V File upload.php della guida, ma ha un errore PHP 8
V guida Mysql: arriverà a qualcosa connesso al web? MySQL 0
M Aruba Cloud VPS: Guida alla scelta delle taglie Server Dedicati e VPS 6
G Guida html gratis HTML e CSS 3
E [Spring Social] Guida completa Java 0
E [Java 8] guida completa alla certificaizone OCA Java 7 Java 0
B Cercasi revisore per guida CodeIgniter Offerte e Richieste di Lavoro e/o Collaborazione 4
glm2006ITALY Wordpress: guida completa al backup integrale WordPress 1
L Guida programmazione web Programmazione 0
M Guida su come inserire la mappa di Goggle con Jumi Joomla 1
A una guida semplice in php PHP 2
L guida semplice per imparare jquery jQuery 5
maxbossi [GUIDA] bannare indirizzi email spammer CMS (Content Management System) 0
L problema creazione template con guida mrwebmaster.it WordPress 0
S AAA Cercasi: Guida completa su Guestbook PHP PHP 1
maxbossi Guida Guida Hosting Hosting 4
N phpFlickr: ultime foto inserite [era: phpFlickr, ho letto la guida, ho bisogno di ...] PHP 3
Web Designer Guida Photoshop: Effetto Scritta Infuocata Photoshop 1
PenguinLover Installare Skype su Ubuntu [Guida] Linux e Software 2
Web Designer Guida: Modem - Router alternativi da quelli forniti da Telecom Italia Adsl e Connettività 0
maxbossi Guida ad HTML5 in italiano HTML e CSS 0
braccobaldo [GUIDA] VBulletin 4: lista di condizioni e variabili da utilizzare nei template CMS (Content Management System) 2
T Guida mr Webmaster PHP 0
G Guida cartacea per la realizzazione di siti web HTML e CSS 2
F ilMioPrimoSito.net - guida html 10-14 anni Presenta il tuo Sito 5
B Guida TV per Android Smartphone e tablet 0
L Guida sessioni php PHP 3
catellostefano Guida api XML 1
S Guida all'amministrazione in remoto di IPCop 1.4.x ed installazione addons Presenta il tuo Sito 0
riroro14 Gino Guida Presenta il tuo Sito 1
V Guida su come usare flash di macromedia Flash 1
F Anteprima guida Visual Studio 2010 su mrwebmaster Supporto Mr.Webmaster 0
K Problema con una guida PHP 3
A Lasciare una traccia sulla Guida di movimento Flash 0
G guida forum php non funziona PHP 3
L guida o corso per imparare visual basic Visual Basic 0
C creazione testo attraverso una guida Flash 7
S guida html avazata HTML e CSS 2
C problema con guida su flash Flash 0
L guida per flash Flash 1

Discussioni simili