Quisito SQL

1nostromo

Nuovo Utente
25 Ago 2014
29
0
0
Buona sera, visto la votra grande esperienza in metito, non avrete di certo difficoltà a risolvere degli esercizzi di SQL che ho trovato in rete. Finche si tratta di una tabella 'anche ai vostri insegnamenti' non ho grandi problemi i miei limiti si accentuano quando si tratta di estrapolare dei dati in più tabelle correlate, come immagino che siano queste sotto indicate. Con la Vostra bravura, sicuramente non troverete nessuna difficoltà a risorverli. Vi prego di scirvere i codici, modo ch'io possa studiarmeli. Grazie delle vostra collaborazione, i quisiti sono;

Il database costituito dalle tabelle Cacciatori, Pescatori e Scalatori appartiene ad un circolo sportivo e contiene i nominativi degli iscritti a tale circolo. Gli iscritti sono raggruppati sulle tabelle in base allo sport che essi fanno. Chiaramente la stessa persona può fare più di uno sport e quindi comparire in più di una tabella. Per gli esercizi seguenti faremo riferimento a questo piccolo database.

CACCIATORI PESCATORI SCALATORI
Codice Nome Codice Nome Codice Nome
35 ROSSI 4 ROSSI 27 NERI
27 NERI 77 MANCINI 11 MARCA
12 BINACHI 49 CRUCIANI 1 MICHELI
2 BISCARDI 11 MARCA 2 BISCARDI
11) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo.
12) Scrivere una query per visualizzare i cacciatori che non siano anche scalatori.
13) Scrivere una query per visualizzare gli scalatori che non siano anche cacciatori.
14) Scrivere una query per visualizzare i pescatori che siano anche cacciatori.
15) Se dovessimo scrivere una query per visualizzare i cacciatori che siano anche pescatori potremmo
utilizzare la soluzione dell’esercizio N° 14?
16) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo il cui nome finisce con ‘I’ e ci sia
almeno una ‘A’.
17) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo il cui nome finisce con ‘I’ o ci sia
almeno una ‘A’
 
riferimento a questo piccolo database
Codice:
use tempDB

Create table CACCIATORI
( 
  id	int,
  nome	varchar(20)
) 

Insert into CACCIATORI
Select 35, 'ROSSI'
Union All
Select 27, 'NERI'
Union All
select 12, 'BIANCHI'
Union All 
Select 2, 'BISCARDI'


Create table PESCATORI
( 
  id	int,
  nome	varchar(20)
) 

Insert into PESCATORI
Select 4, 'ROSSI'
Union All
Select 77, 'MANCINI'
Union All
select 49, 'CRUCIANI'
Union All 
Select 11, 'MARCA'
Union All
select 12, 'BIANCHI'


Create table SCALATORI
( 
  id	int,
  nome	varchar(20)
) 

Insert into SCALATORI
Select 27, 'NERI'
Union All 
Select 11, 'MARCA'
Union All
Select 1, 'MICHELI'
Union All
Select 2, 'BISCARDI'

11) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo
Codice:
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
order by s.nome, s.id

12 BIANCHI
2 BISCARDI
49 CRUCIANI
77 MANCINI
11 MARCA
1 MICHELI
27 NERI
4 ROSSI
35 ROSSI

12) Scrivere una query per visualizzare i cacciatori che non siano anche scalatori
Codice:
select * from CACCIATORI where not exists 
( select id from SCALATORI where SCALATORI.id=CACCIATORI.id )
order by nome, id

12 BIANCHI
35 ROSSI

13) Scrivere una query per visualizzare gli scalatori che non siano anche cacciatori
come 12 con CACCIATORI e SCALATORI scambiati


14) Scrivere una query per visualizzare i pescatori che siano anche cacciatori
Codice:
select * from PESCATORI where exists 
( select id from CACCIATORI where CACCIATORI.id=PESCATORI.id )
order by nome, id

12 BIANCHI (inserito da me, giusto per averne 1)

15) Se dovessimo scrivere una query per visualizzare i cacciatori che siano anche pescatori potremmo
utilizzare la soluzione dell’esercizio N° 14?
SI scambiando ...


16) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo il cui nome finisce con ‘I’
e ci sia almeno una ‘A’.
Codice:
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
where s.nome like '%I' and  s.nome like '%A%'
order by s.nome, s.id

12 BIANCHI
2 BISCARDI
49 CRUCIANI
77 MANCINI

17) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo il cui nome finisce con ‘I’
o ci sia almeno una ‘A’
Codice:
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
where s.nome like '%I' or  s.nome like '%A%'
order by s.nome, s.id

12 BIANCHI
2 BISCARDI
49 CRUCIANI
77 MANCINI
11 MARCA
1 MICHELI
27 NERI
4 ROSSI
35 ROSSI
buon ... studio
ciao
Marino
 
Quisito DataBase

Codice:
use tempDB

Create table CACCIATORI
( 
  id	int,
  nome	varchar(20)
) 

Insert into CACCIATORI
Select 35, 'ROSSI'
Union All
Select 27, 'NERI'
Union All
select 12, 'BIANCHI'
Union All 
Select 2, 'BISCARDI'


Create table PESCATORI
( 
  id	int,
  nome	varchar(20)
) 

Insert into PESCATORI
Select 4, 'ROSSI'
Union All
Select 77, 'MANCINI'
Union All
select 49, 'CRUCIANI'
Union All 
Select 11, 'MARCA'
Union All
select 12, 'BIANCHI'


Create table SCALATORI
( 
  id	int,
  nome	varchar(20)
) 

Insert into SCALATORI
Select 27, 'NERI'
Union All 
Select 11, 'MARCA'
Union All
Select 1, 'MICHELI'
Union All
Select 2, 'BISCARDI'


Codice:
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
order by s.nome, s.id




Codice:
select * from CACCIATORI where not exists 
( select id from SCALATORI where SCALATORI.id=CACCIATORI.id )
order by nome, id




come 12 con CACCIATORI e SCALATORI scambiati



Codice:
select * from PESCATORI where exists 
( select id from CACCIATORI where CACCIATORI.id=PESCATORI.id )
order by nome, id




SI scambiando ...



Codice:
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
where s.nome like '%I' and  s.nome like '%A%'
order by s.nome, s.id




Codice:
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
where s.nome like '%I' or  s.nome like '%A%'
order by s.nome, s.id


buon ... studio
ciao
Marino
Buona sera Sig.Mario.
:mavieni: Fortissimo! Non avevo dubbi della vostra bravura, non ci sarei arrivato a tutto questo da solo. Una piccola domanda, quella 's' a cosa serve? Non vorrei dire una stupidata, è una abbreviazione di select? Grazie dell'aiuto. Oscar:byebye:
 
Buona sera Oscar, MARINO non Mario ...
la select fatta in quel modo, può essere paragonata ad una tabella virtuale, a cui si assegna un nome, al fine di identificare le colonne in essa contenute, io ho scelto "s" ma poteva essere altro ...
saluti
Marino
 
Buona sera Oscar, MARINO non Mario ...
la select fatta in quel modo, può essere paragonata ad una tabella virtuale, a cui si assegna un nome, al fine di identificare le colonne in essa contenute, io ho scelto "s" ma poteva essere altro ...
saluti
Marino

Buona sera sig.Marino scusi per la gaf. Ho capito la spiegazione, ho chiesto aiuto perchè nella parte che stò leggendo del corso SQL, non vi sono riportati o tantomeno spiegati i vari order, exists, union, sicuramente sarà spiegato un pò più in là, per cui non sarei mai e poi mai riuscito a comporre quelle query. Grazie di nuovo. Oscar
 

Discussioni simili