Avatar billede texx0003 Nybegynder
22. marts 2016 - 00:11 Der er 10 kommentarer

Lille problem med SQL, angående SELECT

Hej Eksperten jeg er i gang med at lære SQL, Der hvor jeg lærer det får jeg nogle opgaver. Jeg er overbevist om at fejlen er en eller anden, Nåårh ja det er da osse rigtigt fejl :)

Her kommer opgaven og koden, håber der er en der har tid til at hjælpe mig :)

Add another SELECT that uses OR to show the titles of the songs that have an 'epic' mood or a release date after 1990.

CREATE TABLE songs (
    id INTEGER PRIMARY KEY,
    title TEXT,
    artist TEXT,
    mood TEXT,
    duration INTEGER,
    released INTEGER);
   
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("Bohemian Rhapsody", "Queen", "epic", 60, 1975);
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("Let it go", "Idina Menzel", "epic", 227, 2013);
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("I will survive", "Gloria Gaynor", "epic", 198, 1978);
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("Twist and Shout", "The Beatles", "happy", 152, 1963);
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("La Bamba", "Ritchie Valens", "happy", 166, 1958);
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("I will always love you", "Whitney Houston", "epic", 273, 1992);
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("Sweet Caroline", "Neil Diamond", "happy", 201, 1969);
INSERT INTO songs (title, artist, mood, duration, released)
    VALUES ("Call me maybe", "Carly Rae Jepsen", "happy", 193, 2011);

Det sidste her nede, er min egen kode der ikke virker :(


SELECT*FROM songs WHERE title = "epic" OR released >1990;
Avatar billede martens Guru
22. marts 2016 - 00:35 #1
SELECT songs.title, songs.artist, songs.mood, songs.duration, songs.released
FROM songs
WHERE (((songs.mood)="epic") AND ((songs.released)>1990)) OR (((songs.mood)="epic"));
Avatar billede martens Guru
22. marts 2016 - 00:38 #2
og en lille rettelse ..

epic OR a releasedate after 1990 må da se således ud ...

SELECT songs.title, songs.artist, songs.mood, songs.duration, songs.released
FROM songs
GROUP BY songs.title, songs.artist, songs.mood, songs.duration, songs.released
HAVING (((songs.released)>1990)) OR (((songs.mood)="epic"));
Avatar billede AnyFellow Mester
22. marts 2016 - 07:47 #3
martens...> Dine selects virker voldsomme i forhold til formålet.

Det er tilstrækkelig at gøre således:
SELECT * FROM `songs` WHERE `title` = 'epic' OR `released` > 1990;
Avatar billede sonalias Seniormester
22. marts 2016 - 09:44 #4
Fordelen ved martens select er at man kun får specificerede kolonner med, hvis nu tabellen er blevet udvidet med 100000 kolonner, så er din query tung sammenlignet kfisker :)
Avatar billede sonalias Seniormester
22. marts 2016 - 09:44 #5
Men ja, hvis man arbejder alene på en lille DB ville man nok typisk bare select *
Avatar billede AnyFellow Mester
22. marts 2016 - 11:23 #6
sonalias...> Der kan altid opstilles hvis'er, men det virker nu ikke særlig fornuftigt/effektivt at skulle i gang med at gruppere data, når det ikke burde være nødvendigt i forhold til det opgaven lød på.
Avatar billede Slettet bruger
22. marts 2016 - 12:21 #7
Hvis du afgrænser på feltet Mood i stedet for Title så virker din kode fint.
Avatar billede texx0003 Nybegynder
22. marts 2016 - 13:07 #8
Til rahp: Det var nøjagtigt det har der var problemet, og du løste det ved den her lille ændring. Mange tak :)

Til martens: jeg er ikke helt siker på hvordan din kode virker, og den virker rimelig indviklet i forhold til den her simple opgave jeg har fået. Men tak for svaret :)

Til kfisker: din kode virker desværre ikke, men tak for din tid :)
Avatar billede Slettet bruger
23. marts 2016 - 03:41 #9
Svar
Avatar billede martens Guru
24. marts 2016 - 23:46 #10
Det var skam heller ikke planen at der skulle grupperes... men i mit lille forsøg, havde jeg ved en fejl kørt et SQL´en med at smide data ind, mere end én gang.... og med en masse data i tabellen, ville det  også være guld værd, for at undgå dubletter ;o) 

og én SELECT * ( ALL ) er tung med mange kolonner, som det også er nævnt tidligere i tråden.....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester