Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe
La flessibilità di configurazione è il punto di forza di questo 2-in-1, che ripropone in un form factor alternativo tutta la tipica qualità dei prodotti Lenovo della famiglia ThinkPad. Qualità costruttiva ai vertici, ottima dotazione hardware ma costo che si presenta molto elevato.
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-09-2011, 12:18   #1
Michelangela
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 6
Esame sql access

Salve a tutti, sono nuova del forum e anche del settore.
Devo affrontare un esame universitario che prevede una parte incentrata sulle query in access da risolvere col linguaggio sql. E' un esame totalmente discordante col mio corso e quindi sono totalmente allo scuro di questi argomenti. Ho cominciato a capire le query semplici. Ma arrivo ad esercizi che nn capisco. Quando si inseriscono codici che nn so da dove provengono e che significano, come D1, P1, |1

esercizio:
DATE LE TABELLE PALESTRA E ISCRITTO
SELEZIONA NOME ED INDIRIZZO DELLE PALESTRE CHE HANNO PIù ISCRITTI DI QUELLA A CUI è ISCRITTO MARIO ROSSI.

soluzione:

SELECT P1.NOMEPALESTRA, P1.INDIRIZZO
FROM PALESTRA AS P1
WHERE P1.NUMEROISCRITTI> (SELECT P1.NUMEROISCRITTI FROM PALESTRA AS P1, ISCRITTO AS |1 WHERE |1.NOME LIKE MARIO ROSSI AND |1.PALESTRA=P1.CODPALESTRA);

Qualcuno potrebbe farmi capire come si fa? Scusate il livello della domanda
Michelangela è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2011, 12:48   #2
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12816
"P1", "D1" e "|1" sono i nomi che dai alla tabella per comodità (anche se a dire la verità mi sembra alquanto strano chiamare una tabella |1, sicuro che non sia I1 ? ).

Il nome è a tua completa discrezione.

La definizione del nome la fai nella parte in grassetto, mediante la keyword AS:

Codice:
SELECT P1.NOMEPALESTRA
FROM PALESTRA AS P1
WHERE P1.NUMEROISCRITTI  ...
Se non ricordo male dovrebbe funzionare anche senza AS:

Codice:
SELECT P.NOMEPALESTRA
FROM PALESTRA P
WHERE P.NUMEROISCRITTI > ...
Se hai una sola tabella nella clausola FROM inoltre credo che sia implicito:

Codice:
SELECT NOMEPALESTRA
FROM PALESTRA
WHERE NUMEROISCRITTI > ...

Ultima modifica di WarDuck : 05-09-2011 alle 12:53.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2011, 13:31   #3
Michelangela
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 6
Ti ringrazio, soprattutto per avermi risposto subito, perchè l'ansia sale e il tempo diminuisce.
in realtà è l1. e ancora nn ho capito:che motivo ho di chiamare la tabella P1 o D1? cioè, quando la chiamo P1? nn posso semplicemente scrivere

select nome palestra, indirizzo
from palestra
where numeroiscritti>....bho, qui nn ci capisco più niente!
Michelangela è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2011, 13:52   #4
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12816
Quote:
Originariamente inviato da Michelangela Guarda i messaggi
Ti ringrazio, soprattutto per avermi risposto subito, perchè l'ansia sale e il tempo diminuisce.
in realtà è l1. e ancora nn ho capito:che motivo ho di chiamare la tabella P1 o D1? cioè, quando la chiamo P1? nn posso semplicemente scrivere

select nome palestra, indirizzo
from palestra
where numeroiscritti>....bho, qui nn ci capisco più niente!
Il nome lo scegli te, non esistono regole in tal senso.

Puoi chiamarla Pippo o Pluto (tendenzialmente si sceglie di usare qualcosa di corto per comodità, tipicamente l'iniziale della tabella).

Dare dei nomi alle tabelle ti viene utile quando esse hanno dei campi che si chiamano allo stesso modo ed hai bisogno di distinguerli.

Ad esempio metti di avere appunto la tabella Palestra e la tabella Iscritto.
Se entrambe hanno un campo chiamato Nome, devi poter specificare a quale dei due ti riferisci, per questo motivo farai qualcosa del genere:

Codice:
select I.Nome, P.Nome
from Palestra P, Iscritto I
where I.PalestraId = P.Id
L'esempio sopra ti seleziona le coppie Nome persona, Nome palestra in cui è iscritto.

Oppure, trova il nome della Palestra (o delle palestre) in cui è iscritto Mario Rossi:

Codice:
select P.Nome
from Palestra P, Iscritto I
where I.Nome = "Mario Rossi"
In questo caso non puoi omettere il nome delle tabelle, perché l'interprete SQL non saprebbe quale dei due "Nome" considerare.

Ultima modifica di WarDuck : 05-09-2011 alle 13:57.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2011, 16:51   #5
Michelangela
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 6
Allora nel primo esempio che mi hai scritto io sto selezionando il campo Nome sia dalla tabella Palestra che dalla tabella Iscritto, giusto? I Nome appartiene alla tabella Iscritto I, e P Nome alla tabella Palestra P?

Le lettere mi fanno capire che quel campo P lo prelevo dalla tabella P e il campo.I dalla tabella I?

secondo esempio: sto selezionando dalla tabella Palestra il campo nome, dove il campo nome che troviamo nella tabella Iscritto = Mario Rossi

??? è così che va letta il tuo comando?

è difficile interpretare sti codici se nn li hai mai visti
Michelangela è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2011, 17:09   #6
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12816
Quote:
Originariamente inviato da Michelangela Guarda i messaggi
Allora nel primo esempio che mi hai scritto io sto selezionando il campo Nome sia dalla tabella Palestra che dalla tabella Iscritto, giusto? I Nome appartiene alla tabella Iscritto I, e P Nome alla tabella Palestra P?

Le lettere mi fanno capire che quel campo P lo prelevo dalla tabella P e il campo.I dalla tabella I?
Esattamente. Se non erro puoi usare direttamente i nomi delle tabelle:

Codice:
select Iscritto.Nome, Palestra.Nome
from Palestra, Iscritto
where Iscritto.PalestraId = Palestra.Id
Ma di questo non sono sicuro e non vorrei confonderti le idee.

Il modo migliore per capire come funziona è comunque fare molte prove ed esercizi.

Quote:
Originariamente inviato da Michelangela Guarda i messaggi
secondo esempio: sto selezionando dalla tabella Palestra il campo nome, dove il campo nome che troviamo nella tabella Iscritto = Mario Rossi

??? è così che va letta il tuo comando?
Si, ma si può dire meglio:

Stai selezionando il nome (o i nomi) delle palestre in cui è iscritta una persona di nome Mario Rossi.

Mi raccomando a non fare confusione tra il nome del campo ed il significato che questo ha per te.

In particolare il Nome della Palestra non è ovviamente confrontabile direttamente con il Nome di un Iscritto.

P.Nome e I.Nome sono appunto due cose diverse, e usare P ed I ti aiuta a capire a quale "Nome" ti stai riferendo.

Piccola precisazione
Non ricordo bene, ma se non erro la query di prima si scrive più correttamente come:

Codice:
select P.Nome
from Palestra P, Iscritto I
where I.Nome = "Mario Rossi" and I.PalestraId = P.Id
Questo perché l'operazione di JOIN (ovvero la virgola che metti tra i nomi tabelle nella clausola FROM) se non erro ti crea tutte le combinazioni possibili tra le colonne e se non ricordo male questo ti crea delle entry per cui Mario Rossi può risultare abbinato con Palestre alle quali non è iscritto.

Questa cosa ti consiglio di provarla al PC!

Quando torno a casa semmai faccio anche io una prova perché ho questo piccolo dubbio (è da un po' che non tocco SQL sono un po' arruginito ).

Quote:
Originariamente inviato da Michelangela Guarda i messaggi
è difficile interpretare sti codici se nn li hai mai visti
Il modo migliore per imparare è comunque mettersi davanti al PC e provare e riprovare fin quando non ottieni quello che volevi.

Ultima modifica di WarDuck : 05-09-2011 alle 17:13.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2011, 09:05   #7
Michelangela
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 6
Ma allora è molto più chiaro usando il nome della tabella.
Grazie, la tua spiegazione mi ha tolto molta confusione.
Resta però l'ingarbugliamento della parte finale, potresti spiegarmela ?

SELECT P1.NOMEPALESTRA, P1.INDIRIZZO
FROM PALESTRA AS P1
WHERE P1.NUMEROISCRITTI> (SELECT P1.NUMEROISCRITTI FROM PALESTRA AS P1, ISCRITTO AS |1 WHERE |1.NOME LIKE MARIO ROSSI AND |1.PALESTRA=P1.CODPALESTRA);

dopo from mette as perchè vuole che la nuova colonna sia chiamata P1? quindi se uso il nome della tabella per esteso è un passaggio che posso evitare?

e dopo il where che istruzioni sta dando in parentesi?

Ultima modifica di Michelangela : 06-09-2011 alle 09:07. Motivo: |1 è sempre I1 :P
Michelangela è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2011, 09:17   #8
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12816
Quote:
Originariamente inviato da Michelangela Guarda i messaggi
Ma allora è molto più chiaro usando il nome della tabella.
Grazie, la tua spiegazione mi ha tolto molta confusione.
Di nulla.

Quote:
Originariamente inviato da Michelangela Guarda i messaggi
Resta però l'ingarbugliamento della parte finale, potresti spiegarmela ?
Se ti riferisci alla questione dei JOIN, quella cosa richiede un po' di tempo e dovrei ripassarmela un attimo, cercherò di darci un'occhiata appena ho un po' di tempo.

Quote:
Originariamente inviato da Michelangela Guarda i messaggi
SELECT P1.NOMEPALESTRA, P1.INDIRIZZO
FROM PALESTRA AS P1
WHERE P1.NUMEROISCRITTI> (SELECT P1.NUMEROISCRITTI FROM PALESTRA AS P1, ISCRITTO AS |1 WHERE |1.NOME LIKE MARIO ROSSI AND |1.PALESTRA=P1.CODPALESTRA);
dopo from mette as perchè vuole che la nuova colonna sia chiamata P1?

Si.

quindi se uso il nome della tabella per esteso è un passaggio che posso evitare?

In teoria si, ripeto la cosa migliore è provare da te, dato che non sono sicuro di questo.

e dopo il where che istruzioni sta dando in parentesi?

E' una query annidata, in particolare il confronto nella clausola where viene fatto sulla base della successiva query.

Esegui per prima la query tra le parentesi e prova a capire cosa stai ottenendo.

Piccolo suggerimento: ricordati cosa cerchi di ottenere ->

SELEZIONA NOME ED INDIRIZZO DELLE PALESTRE CHE HANNO PIù ISCRITTI DI QUELLA A CUI è ISCRITTO MARIO ROSSI.

Prova a ragionare per passi, ovvero: qual è la prima informazione che ti serve per poter ottenere quello che vuoi?

Innanzitutto vorresti capire qual è la palestra in cui è iscritto Mario Rossi, dopodiché vorresti sapere quanti iscritti ci sono in quella palestra così da confrontarli con le altre palestre e ricavare la soluzione al problema.

La maggior parte delle volte le query corrette si ricavano ragionando a piccoli passi e cercando ad ogni passo di capire quello che ti serve, per poi combinare tutto insieme ottenendo la soluzione.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2011, 07:42   #9
Michelangela
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 6
Ok..grazie mille. Sono giorni che mi esercito ma il passaggio finale è talmente complesso per me che nn riesco mai a farlo.
Cmq continuo a fare prove...
Ho cercato in rete degli esercizi da fare magari sul data base Northwind, ma niente.


Sto riprovando a mettere il nome della tabella per esteso, mi viene più facile nel ragionamento

SELECT Palestra.NomePalestra, Palestra.Indirizzo
FROM Palestra, Iscritto
WHERE Palestra.NumeroIscritti>(select [Iscritto.Palestra] from Iscritto where [Iscritto.Nome] like "Mario Rossi" and Iscritto.Palestra=Palestra.CodPalestra);

Mi dice Tipi di dati non corrispondenti nell'espressione criterio. Che c'è che nn gli garba?

Ultima modifica di Michelangela : 07-09-2011 alle 16:44.
Michelangela è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2011, 17:05   #10
Michelangela
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 6
Ho cambiato il campo NumeroIscritti da numerico a testo ed ora nn mi da più quel messaggio di errore bensì un risultato di query con le colonne NomePalestra ed Indirizzo, ma nn contiene manco un record, è totalmente vuota. Bhoooo
Michelangela è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Cooler Master MasterFrame 600: modularit...
Questi case sembrano GPU RTX 50 e costan...
Elgato Facecam 4K: ecco la nuova webcam ...
Stampa 3D senza sprechi e senza rifiuti?...
OPPO Find X9 Pro potrebbe battere ogni r...
Le nuove Sony WH-1000XM6 ora disponibili...
ChatGPT Agent come un essere umano: l'AI...
Samsung rivaluta la fabbrica per il pack...
'La potenza di 16 core, nel palmo della ...
Windows 10 compie 10 anni, ma il cambiam...
Un altro Pixel 6a ha preso fuoco: la pro...
NVIDIA, ritorno in Cina in grande stile?...
Tutti contro Windows Recall: un altro se...
PlayStation FlexStrike: il sogno di un f...
WhatsApp sorprende tutti: ecco la nuova ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v