Zapytania dotyczące wielu tabel. Łączymy tabele przez warunek WHERE w którym porównujemy odpowiednie kolumny.
SELECT Imie,Nazwisko,nazwa,miasto FROM kluby,zawklub,zawodnicy where kluby.IdKlub=zawklub.IdKlub AND zawklub.IdZaw=zawodnicy.IdZaw;
SELECT Imie,Nazwisko,nazwa,miasto FROM kluby,zawklub,zawodnicy where kluby.IdKlub=zawklub.IdKlub AND zawklub.IdZaw=zawodnicy.IdZaw AND DataZak is NULL;
Łączenie tabel poprzez INNER JOIN
SELECT … FROM tabela1 INNER JOIN tabela2 ON tabela1.pole_łączące= tabela2.pole_łączące
mysql> SELECT Imie,Nazwisko,nazwa,miasto FROM kluby INNER JOIN zawklub ON kluby.IdKlub=zawklub.IdKlub INNER JOIN zawodnicy ON zawklub.IdZaw=zawodnicy.IdZaw where DataZak is NULL;
Łączenie tabel poprzez NATURAL JOIN
Instrukcją NATURAL JOIN łączymy dwie tabele przy czym nie ma potrzeby użycia ON z tym że nazwy łączących pól w obu tabelach muszą być takie same.
mysql> SELECT Imie,Nazwisko,nazwa,miasto FROM kluby NATURAL JOIN zawklub NATURAL JOIN zawodnicy where DataZak is NULL;
Łączenie tabel poprzez LEFT JOIN i RIGHT JOIN
mysql> SELECT Imie,Nazwisko,nazwa,miasto FROM kluby LEFT JOIN zawklub ON kluby.IdKlub=zawklub.IdKlub LEFT JOIN zawodnicy ON zawklub.IdZaw=zawodnicy.IdZaw where DataZak is NULL;
SELECT Imie,Nazwisko,nazwa,miasto FROM kluby RIGHT JOIN zawklub ON kluby.IdKlub=zawklub.IdKlub RIGHT JOIN zawodnicy ON zawklub.IdZaw=zawodnicy.IdZaw where DataZak is NULL ORDER BY Nazwisko;
Jeżeli tabela występuje w zapytaniu w dwóch rolach to należy dodać alias do tabeli.
FROM tabela ALIAS
SELECT k1.nazwa,k1.miasto,k2.nazwa,k2.miasto,GoleGosp,GoleGosc FROM kluby k1 INNER JOIN mecze ON k1.idklub=mecze.IdGosp INNER JOIN kluby k2 ON mecze.IdGosc=k2.idklub;
FUNKCJE AGREGUJĄCE
COUNT(*)
Zlicza wiersze w wyniku zapytania
mysql> SELECT COUNT(*) FROM zawodnicy;
+----------+
| COUNT(*) |
+----------+
| 311 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*) FROM kluby;
+----------+
| COUNT(*) |
+----------+
| 16 |
+----------+
1 row in set (0.00 sec)
Można użyć klauzuli DISTINCT aby uzyskać ilość różnych wierszy
mysql> SELECT COUNT(DISTINCT IdZaw) FROM zawklub WHERE DataZak IS Null;
+-----------------------+
| COUNT(DISTINCT IdZaw) |
+-----------------------+
| 305 |
+-----------------------+
1 row in set (0.00 sec)
AVG(wyrażenie liczbowe)
mysql> SELECT AVG(wzrost) FROM zawodnicy;
+-------------+
| AVG(wzrost) |
+-------------+
| 180.4469 |
+-------------+
1 row in set (0.00 sec)
mysql> SELECT AVG(wzrost) FROM zawodnicy where kraj='Polska';
+-------------+
| AVG(wzrost) |
+-------------+
| 182.2222 |
+-------------+
1 row in set (0.00 sec)
STDDEV(wyrażenie liczbowe) - odchylenie standardowe
mysql> SELECT AVG(wzrost),STDDEV(wzrost) FROM zawodnicy where kraj='Polska';
+-------------+----------------+
| AVG(wzrost) | STDDEV(wzrost) |
+-------------+----------------+
| 182.2222 | 10.7272 |
+-------------+----------------+
1 row in set (0.00 sec)
VARIANCE(wyrażenie liczbowe) wariancja
mysql> SELECT AVG(wzrost),STDDEV(wzrost),VARiance(wzrost) FROM zawodnicy where kraj='Polska';
+-------------+----------------+------------------+
| AVG(wzrost) | STDDEV(wzrost) | VARiance(wzrost) |
+-------------+----------------+------------------+
| 182.2222 | 10.7272 | 115.0718 |
+-------------+----------------+------------------+
1 row in set (0.00 sec)
MINIMUM i MAXIMUM
MIN(wyrażenie), MAX(wyrażenie)
mysql> SELECT AVG(wzrost),STDDEV(wzrost),VARiance(wzrost),MIN(wzrost),MAX(wzrost) FROM zawodnicy where kraj='Polska';
+-------------+----------------+------------------+-------------+-------------+
| AVG(wzrost) | STDDEV(wzrost) | VARiance(wzrost) | MIN(wzrost) | MAX(wzrost) |
+-------------+----------------+------------------+-------------+-------------+
| 182.2222 | 10.7272 | 115.0718 | 165 | 199 |
+-------------+----------------+------------------+-------------+-------------+
1 row in set (0.00 sec)
GROUP_CONCAT(wyrażenie)
mysql> SELECT GROUP_CONCAT((CONCAT(imie,' ',nazwisko))) FROM zawodnicy NATURAL JOIN zawklub NATURAL JOIN kluby WHERE nazwa='Rokita' AND miasto='Brzeg Dolny';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GROUP_CONCAT((CONCAT(imie,' ',nazwisko))) |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Bogdan RzeÄ˝nik,Andrij Szewczenko,Christian Vieri,PaweĹ DobrzaĹ
ski,Bogdan Tylawski,Krzysztof ZosgĂłrnik,Mateusz Kubera,Henryk MikuĹa,WĹadysĹaw Morawski,MichaĹ Krupa,Jan Karalus,JarosĹaw Rychert,Bogdan RzeÄ˝nik,Andrij Szewczenko,Christian Vieri,PaweĹ DobrzaĹ
ski,Bogdan Tylawski,Krzysztof ZosgĂłrnik,Mateusz Kubera,Tomasz SzlÄzak,Ryszard Koltun,Robert Walas,PaweĹ Sendor,Marian Dobrysiak,Marek CzermiĹ
ski,Marcin Gawin,Leszek Szafranowski,Krzysztof Pracownik,Jakub Baraniak,Jacek JóĽwiak,Artur Radzio,Daniel Passarella,Sepp Maier,Oliver Kahn,Teófilo Cubillas,Bobby Charlton |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
mysql> SELECT GROUP_CONCAT((CONCAT(nazwa,' ',miasto))) FROM zawodnicy NATURAL JOIN zawklub NATURAL JOIN kluby WHERE nazwisko='Lewandowski' ; +------------------------------------------+
| GROUP_CONCAT((CONCAT(nazwa,' ',miasto))) |
+------------------------------------------+
| Korona Kielce,Legia Warszawa |
+------------------------------------------+
1 row in set (0.01 sec)
SUM(wyrażenie liczbowe)
SELECT SUM(GoleGosp+GoleGosc) FROM mecze;
GRUPOWANIE WIERSZY
Instrukcja GROUP BY kolumna1,kolumna2,…
mysql> SELECT Datameczu FROM mecze;
+------------+
| Datameczu |
+------------+
| 2009-01-04 |
| 2009-01-11 |
| 2009-01-25 |
| 2009-01-04 |
| 2009-01-18 |
| 2009-01-25 |
| 2009-02-01 |
| 2009-01-11 |
| 2009-01-18 |
| 2009-01-04 |
| 2009-01-18 |
| 2009-01-25 |
| 2009-02-01 |
| 2009-02-08 |
| 2009-02-15 |
| 2009-02-22 |
| 2009-03-01 |
| 2009-03-08 |
| 2009-03-15 |
| 2009-03-22 |
| 2009-03-29 |
| 2009-04-05 |
| 2009-04-12 |
| 2009-04-19 |
| 2009-05-03 |
| 2009-01-04 |
| 2009-01-11 |
| 2009-01-18 |
| 2009-01-25 |
| 2009-02-01 |
| 2009-02-15 |
| 2009-01-04 |
| 2009-01-11 |
| 2014-12-05 |
| 2009-01-25 |
| 2009-02-01 |
| 2009-02-08 |
| 2009-02-15 |
| 2009-01-04 |
| 2009-01-11 |
| 2009-01-18 |
| 2009-01-25 |
| 2009-02-01 |
| 2009-02-08 |
| 2009-02-15 |
| 2009-02-22 |
| 2009-03-01 |
| 2009-03-08 |
| 2009-03-15 |
| 2009-01-04 |
| 2009-01-11 |
| 2009-01-18 |
| 2009-01-25 |
| 2009-02-01 |
| 2009-02-08 |
| 2009-02-15 |
| 2014-12-02 |
+------------+
57 rows in set (0.00 sec)
mysql> SELECT Datameczu FROM mecze GROUP BY Datameczu;
+------------+
| Datameczu |
+------------+
| 2009-01-04 |
| 2009-01-11 |
| 2009-01-18 |
| 2009-01-25 |
| 2009-02-01 |
| 2009-02-08 |
| 2009-02-15 |
| 2009-02-22 |
| 2009-03-01 |
| 2009-03-08 |
| 2009-03-15 |
| 2009-03-22 |
| 2009-03-29 |
| 2009-04-05 |
| 2009-04-12 |
| 2009-04-19 |
| 2009-05-03 |
| 2014-12-02 |
| 2014-12-05 |
+------------+
19 rows in set (0.00 sec)
W tym przypadku użycie GROUP BY działa podobnie jak SELECT DISTINCT
Użycie GROUP BY pozwala obliczyć funkcje agregujące dla grup
Przykład Obliczyć średni wzrost zawodników z każdego kraju.
mysql> SELECT kraj,AVG(wzrost) FROM zawodnicy GROUP BY kraj;
+------------+-------------+
| kraj | AVG(wzrost) |
+------------+-------------+
| Anglia | 175.4000 |
| Argentyna | 173.7143 |
| Belgia | 185.6667 |
| Brazylia | 176.0833 |
| Bułgaria | 195.0000 |
| Chorwacja | 190.0000 |
| Czechy | 170.0000 |
| Francja | 178.9091 |
| Hiszpania | 179.8333 |
| Holandia | 177.9375 |
| Japonia | 163.0000 |
| Korea | 191.0000 |
| Niemcy | 174.9000 |
| Nigeria | 169.0000 |
| Peru | 173.0000 |
| Polska | 182.2222 |
| Portugalia | 179.0000 |
| Rumunia | 186.0000 |
| Turcja | 172.0000 |
| Ukraina | 194.0000 |
| Węgry | 186.0000 |
| Włochy | 178.6429 |
| ZSRR | 168.0000 |
+------------+-------------+
23 rows in set (0.00 sec)
mysql> SELECT nazwa,miasto,GROUP_CONCAT(Concat(imie,' ',nazwisko)) FROM kluby NATURAL JOIN zawklub NATURAL JOIN zawodnicy GROUP BY nazwa,miasto;
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| nazwa | miasto | GROUP_CONCAT(Concat(imie,' ',nazwisko)) |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Cracovia | Kraków | Marek Krawczyk,Brian Laudrup,Robert Sochacki,Marek Borowski,Giuseppe Bergomi,RadosĹaw Chmielecki,Adam Powaga,Adam Banaszczyk,PaweĹ FudaĹa,Norbert Jasik,Dariusz SĹabik,RadosĹaw Pilarski,Robert Sochacki,Javier Zanetti,Piotr Deska,MichaĹ Krupa,ElHadji Diouf,RadosĹaw PrzytuĹa,Mariusz Jankowski,Marcin SokoĹowski,Ĺukasz Styka,Lothar Matthäus,Dariusz SĹabik,Krzysztof Figura,Sylwester Kozek,Daniel Szwamber,Bogdan Tylawski,Gabriel Batistuta,Carlos Valderrama,Piotr GoroÂś,Robert Sochacki,Ĺukasz Styka,Krzysztof Figura,PaweĹ FudaĹa,Marek Tomalski,Gabriel Batistuta,Henryk Paczynski |
| Górnik | Zabrze | Michael Owen,JĂłzef Ĺapczynski,Dariusz MysĹowski,Kevin Keegan,Marek Wierzbanowski,Johan Cruijff,Adam ĹÄĹźny,JeanMarie Pfaff,Antoni LeszyĹ
ski,Michael Laudrup,PaweĹ Makina,Piotr ZieliĹ
ski,Dariusz MysĹowski,Grzegorz MrowiĹ
ski,NULL Ronaldinho,Leszek Krajewski,Adam ĹÄĹźny,Jacek Sztucki,Bogdan Sikora,Radek Pawelec,PaweĹ Makina,David Trézéguet,JarosĹaw WysoczaĹ
ski,Maciej Ĺukszo,Daniel Chudek,Luis Enrique,Éric Cantona,Piotr GoroÂś,Ruud vanNistelrooy,Michel Platini,Radek Pawelec,JarosĹaw WysoczaĹ
ski,Johan Cruijff,Mariusz Torczyk,Éric Cantona,PaweĹ Ĺuczak,Marcin BrydziĹ
ski,Mariusz Jankowski,JeanMarie Pfaff |
| Groclin | Grodzisk | Piotr Maciejewski,Nikola Kobylski,Ĺukasz KuboĹ
,Roger Milla,Luis Enrique,Dariusz Chmielewski,Ruud vanNistelrooy,Tomasz PiÂątkowski,Artur Radzio,PaweĹ WiÄcĹaw,Bogdan RzeÄ˝nik,Clarence Seedorf,Hernán Crespo,Luis Enrique,PaweĹ DobrzaĹ
ski,ZdzisĹaw KamiĹ
ski,Iván Zamorano,Wojciech KamiĹ
ski,Jerzy Jakociuk,Jacek Sztucki,PaweĹ FudaĹa,Hernán Crespo,Dino Zoff,Andrij Szewczenko,Enzo Francescoli,Marek DÂąbrowski,Piotr Nowakowski,Gianluigi Buffon,RafaĹ Berus,Iván Zamorano,BartĹomiej MaĹecki,Piotr Podhajski,Artur Radzio,Gianluigi Buffon,Lilian Thuram,Johan Cruijff,PaweĹ WiÄcĹaw |
| Izolator | Boguchwała | Grzegorz Grzesik,Damian Kral,Adam Powaga,JĂłzef SzczepaĹ
czyk,Diego Maradona,Mia Hamm,Dawid Procel,Gianni Rivera,Marcin Zawalski,Johan Neeskens,JarosĹaw WysoczaĹ
ski,Gordon Banks,Marek Palacz,Damian ZarÄba,Dawid Sochacki,Javier Saviola,NULL Rivaldo,Zbigniew Boniek,Gianni Rivera,Adrian Bosek,Mariusz ĹupiĹ
ski,Damian Kral,Marek Tomalski,WiesĹaw Krauze,Marcin Zawalski,Jacek Wielgolaski,Javier Saviola,PaweĹ Komorowski,Ruud Gullit,Karol Daniec,Mariusz ĹupiĹ
ski,JĂłzef SzczepaĹ
czyk,PauloRoberto Falco,Marek Tomalski,Roy Keane,Dawid Procel,Krzysztof Pracownik,Marcin Zawalski |
| Jagiellonia | Białystok | Jakub BĹaszyk,PaweĹ Makina,Jacek Skonieczny,Dawid Procel,Zinedine Zidane,Robert Duran,Ireneusz Gajda,Ferenc Puskás,Rinat Dasajew,NULL Pele,Wojciech Mioduszewski,Nílton Santos,Roger Milla,Edgar Davids,Henryk MikuĹa,Artur Kowalczyk,Iván Zamorano,Dariusz SĹabik,Roman Panczuk |
| Korona | Kielce | Bartosz Ĺukasik,Wojciech BĹaĹźkiewicz,KarlHeinz Rummenigge,Zbigniew Ogrzewalski,Marcel Desailly,JĂłzef Musialik,Robert Pirs,Zbigniew Zwierzyk,Marek Orawczak,Aleksander Swoboda,Elías Figueroa,Mateusz Kubera,Marcin SokoĹowski,Kenny Dalglish,Zbigniew Ogrzewalski,Ĺukasz Styka,Krystian Grzonka,Marek DÂąbrowski,Hong Myungbo,Christian Vieri,WiesĹaw Galiszkiewicz,Janusz Malec,Artur Jurkowski,WiesĹaw Krauze,Marcin SokoĹowski,Mariusz ĹupiĹ
ski,Jerzy KuÂś,Marek DÂąbrowski,Ireneusz Kucharski,Bartosz Ĺukasik,Maciej RomaĹ
ski,WiesĹaw Galiszkiewicz,Zbigniew Ogrzewalski,Jerzy KuÂś,JĂłzef Musialik,Daniel Lewandowski |
| Lech | Poznań | Marcin Odorowicz,Krzysztof Zwarycz,Konstanty Strus,Ireneusz Borski,CarlosAlberto Torres,Dennis Bergkamp,NULL Romário,Wojciech GĂłralczyk,Piotr Nowakowski,Abédi Pelé,Uwe Seeler,Grzegorz Grzesik,Jan Rurarz,Davor Suker,Piotr Podhajski,Andrzej Jarguz,Wojciech KamiĹ
ski,Dennis Bergkamp,PaweĹ Sanecki,Roman Derlatka,NULL Ronaldo,Piotr Maciejewski,Grzegorz Grzesik,Edgar Davids,Andrzej Jarguz,Marcin Odorowicz,Janusz Sabat,Andrzej Sadowski,Krzysztof Koterla,Gianluigi Buffon,Piotr Maciejewski,Hidetoshi Nakata,JarosĹaw JasiĹ
ski,Edgar Davids,Daniel Szwamber,Abédi Pelé |
| Lechia | Gdańsk | Karol Ptak,Roberto Carlos,Luís Figo,Emilio Butragueno,Mariusz Wojda,Piotr Deska,Peter Schmeichel,Rob Rensenbrink,Johan Neeskens,KarlHeinz Rummenigge,Konstanty Strus,Franky VanDerElst,Paolo Rossi,Janusz Sabat,Patrick Vieira,Robert Duran,Krzysztof Nawrocki,Ireneusz Brdys,Wojciech Mioduszewski,Raúl GonzálBlanco,ZdzisĹaw KamiĹ
ski,Jan Ceulemans,Maciej RomaĹ
ski,WiesĹaw Galiszkiewicz,Paolo Rossi,Robert Duran,Adrian Bosek,Raúl GonzálBlanco,Andrzej MoĹas,NULL Rivelino,Gheorghe Hagi,Johan Neeskens,Adrian Bosek,Javier Saviola,Franky VanDerElst,Franco Baresi,Artur Nowakowski,Rui Costa,Janusz Sabat |
| Legia | Warszawa | Paul Breitner,Ĺukasz Najda,PaweĹ Zaborowski,Sylwester Kozek,Andrzej Wojnarowicz,RadosĹaw Chmielecki,Artur Nowakowski,Marcin Odorowicz,Artur SuchaĹ
ski,Hugo Sánchez,PaweĹ Sanecki,StanisĹaw KotĹowski,Sylwester Kozek,Roman Gogulski,Djalma Santos,Marek Wierzbanowski,Piotr ZieliĹ
ski,Artur Nowakowski,Robert Kopania,MirosĹaw Machera,Kamil Koc,Luís Figo,PaweĹ Sanecki,Roman Gogulski,Daniel Lewandowski,Adam Banaszczyk,Ĺukasz Najda,Marek Wierzbanowski,PaweĹ Zaborowski,PaweĹ Strzop,Marek Banasik,JÄdrzej Galas,Grzegorz Kaczmarczyk,Aleksander Swoboda,Andrzej Wojnarowicz,Krzysztof Figura,Tomasz Langer,Piotr Sommerfeld |
| Rokita | Brzeg Dolny | Krzysztof ZosgĂłrnik,Andrij Szewczenko,PaweĹ DobrzaĹ
ski,Jacek JóĽwiak,Mateusz Kubera,Marcin Gawin,WĹadysĹaw Morawski,Artur Radzio,Bogdan Tylawski,Teófilo Cubillas,JarosĹaw Rychert,Ryszard Koltun,Andrij Szewczenko,Marian Dobrysiak,Robert Walas,Mateusz Kubera,Daniel Passarella,Christian Vieri,Marek CzermiĹ
ski,Bogdan Tylawski,Krzysztof Pracownik,MichaĹ Krupa,Tomasz SzlÄzak,Bobby Charlton,Leszek Szafranowski,Bogdan RzeÄ˝nik,PaweĹ Sendor,Christian Vieri,Oliver Kahn,Krzysztof ZosgĂłrnik,Henryk MikuĹa,Sepp Maier,PaweĹ DobrzaĹ
ski,Jakub Baraniak,Jan Karalus,Bogdan RzeĽnik |
| Stomil | Olsztyn | MirosĹaw Machera,Grzegorz MrowiĹ
ski,Bartosz Ĺukasik,Andrzej Bogdanowski,Dariusz Kubica,Giuseppe Bergomi,Tomasz PiÂątkowski,Ĺukasz Najda,Damian Wiszniewski,JĂłzef Musialik,Andrzej Jakubowski,Artur Trojan,MirosĹaw Machera,Dariusz Kubica,Dariusz Kubica,Zbigniew Boniek,Tomasz PiÂątkowski,Jürgen Klinsmann,Robert Kopania,Dariusz MysĹowski,Raymond Kopaszewski,Damian ZarÄba,Marek Smok,Krystian Kowalewski,George Weah,Bogdan Sikora,Zbigniew Boniek,Robert Kopania,Abédi Pelé,Grzegorz MrowiĹ
ski,Ĺukasz Kijora,Damian ZarÄba,Damian Cebula,WĹadysĹaw Morawski,Henryk Paczynski,Waldemar Stramowski,Adam ĹÄĹźny,Robert Âświtek |
| Unia | Racibórz | Brian Laudrup,SĹawomir Fuk,Dariusz Swojak,Rosiak SĹawomir,NULL Zico,Alfredo DiStéfano,PaweĹ Zaborowski,PaweĹ PiĹa,Adam PoĹźoga,Piotr Wysocki,JĂłzef SzczepaĹ
czyk,Alessandro Nesta,Artur Trojan,Patrick Kluivert,Krzysztof Ziemba,Adrian Dera,Tomasz Wojtkowiak,Omar Sívori,Gheorghe Hagi |
| Wisła | Kraków | Mario Kempes,Waldemar Stramowski,Krzysztof Koterla,David Trézéguet,PaweĹ Strzop,Éric Cantona,Jacek Bekker,Marcel Desailly,Peter Schmeichel,Michel Platini,Tomasz SÄk,Alessandro DelPiero,Just Fontaine,David Trézéguet,Jacek Bekker,Jan Rurarz,Peter Schmeichel,Jacek Wielgolaski,Dino Zoff,RafaĹ Kasperski,Paul Breitner,Dariusz Paszek,PrzemysĹaw Dolat,Krzysztof Derejski,Waldemar Stramowski,Piotr Kwiatkowski,Jan Rurarz,Marek Kania,Grzegorz Goj,Gianni Rivera,Raymond Kopaszewski,RadosĹaw Pilarski,Bartosz Bultrowicz,PaweĹ Strzop,Radek Pawelec,RafaĹ Kasperski,Paolo Maldini,Zbigniew Zak |
| Wisła | Płock | SĹawomir Fuk,Andrzej Wojnarowicz,RafaĹ Pajkowski,Alfredo DiStéfano,NULL Pele,MirosĹaw RegliĹ
ski,Norbert Jasik,Jan Karalus,Grzegorz Kaczmarczyk,Ireneusz Brdys,JeanPierre Papin,Karol Ptak,Marek Ciereszko,Mario Kempes,George Best,Jacek JóĽwiak,Josef Masopust,NULL Pele,WiesĹaw CieÂśla,Uwe Seeler,Zinedine Zidane,Ryszard Mazurek,Karol Ptak,David Beckham,Daniel Chudek,Didier Deschamps,Ferdinand Gabrisch,SĹawomir Fuk,Zinedine Zidane,NULL Socrates,Alfredo DiStéfano,MirosĹaw RegliĹ
ski,Marian Dobrysiak,MirosĹaw RegliĹ
ski,Krzysztof ZosgĂłrnik,Jacek Bekker,Krystian Kowalewski |
| ŁKS | Łódź | Piotr Rutkowski,Javier Zanetti,Christo Stoiczkow,ElHadji Diouf,Damian Wiszniewski,JarosĹaw Rychert,Michael Ballack,Piotr Sroka,RafaĹ Sawkiewicz,Robert Walas,Didier Deschamps,WiesĹaw CieÂśla,ElHadji Diouf,Francesco Totti,StanisĹaw KotĹowski,Andrzej Jakubowski,Antoni Rzepka,Gary Lineker,Dariusz Swojak,NULL Ronaldinho,Hong Myungbo,Robert Walas,Henryk AnioĹ,Piotr Rutkowski,StanisĹaw KotĹowski,Maciej Ĺukszo,Ryszard Poskuta,Dariusz Swojak,Piotr Rutkowski,Marek SzelÂąg,PaweĹ Ĺuczak,Paolo Rossi,Damian Wiszniewski,Tomasz Draws,RafaĹ Kasperski,Franky VanDerElst,Kevin Keegan,Dennis Bergkamp,Maciej Ĺukszo |
| Śląsk | Wrocław | LesĹaw Rutkowski,Hugo Sánchez,PaweĹ WiÄcĹaw,Tomasz SÄk,JuanSebastián Verón,Pavel Nedvěd,Karol Daniec,Waldemar Timoszyk,Robert Tomczak,Grzegorz Goj,SĹawomir Michalak,Jakub BĹaszyk,LesĹaw Rutkowski,Frank Rijkaard,Hugo Sánchez,NULL Romário,Thierry Henry,Karol Daniec,Marek Ciereszko,Robert Pirs,Diego Maradona,NULL Romário,Alan Shearer,NULL Eusebio,Wojciech BĹaĹźkiewicz,Raúl GonzálBlanco,LesĹaw Rutkowski,Emre Belözoilu,Robert Pirs,Hernán Crespo,Piotr Skowron,Marek Palacz,Augustine Okocha,Ryszard Rybski,Diego Maradona,Rüştü Reçber,Alessandro DelPiero,Jakub BĹaszyk |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
16 rows in set (0.00 sec)
---------------------06-12-2014 ------------------------------
Klauzula HAVING
Klauzula HAVING służy do tworzenia warunków związanych z funkcjami agregującymi.
Umieszczamy ja na końcu kwerendy po GROUP BY.
mysql> SELECT kraj,AVG(wzrost) FROM zawodnicy WHERE AVG(wzrost)>185 GROUP BY kraj;
ERROR 1111 (HY000): Invalid use of group function
W tej kwerendzie jest błąd gdyż po instrukcji nie mogą występować funkcje agregujące.
mysql> SELECT kraj,AVG(wzrost) FROM zawodnicy GROUP BY kraj HAVING AVG(wzrost)>185;
+-----------+-------------+
| kraj | AVG(wzrost) |
+-----------+-------------+
| Belgia | 185.6667 |
| Bułgaria | 195.0000 |
| Chorwacja | 190.0000 |
| Korea | 191.0000 |
| Rumunia | 186.0000 |
| Ukraina | 194.0000 |
| Węgry | 186.0000 |
+-----------+-------------+
7 rows in set (0.00 sec)
mysql> SELECT kraj,COUNT(*) FROM zawodnicy GROUP BY kraj HAVING COUNT(*)>4; +------------+----------+
| kraj | COUNT(*) |
+------------+----------+
| Anglia | 10 |
| Argentyna | 7 |
| Brazylia | 12 |
| Francja | 11 |
| Hiszpania | 6 |
| Holandia | 16 |
| Niemcy | 10 |
| Polska | 198 |
| Portugalia | 6 |
| Włochy | 14 |
+------------+----------+
10 rows in set (0.00 sec)
+-------------+------------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| nazwa | miasto | COUNT(*) | GROUP_CONCAT(CONCAT(Imie,' ',Nazwisko)) |
+-------------+------------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Wisła | Kraków | 7 | Just Fontaine,Éric Cantona,Raymond Kopaszewski,Paolo Maldini,Michel Platini,Paul Breitner,Gianni Rivera |
| Śląsk | Wrocław | 12 | Thierry Henry,Rüştü Reçber,Emre Belözoilu,Augustine Okocha,Frank Rijkaard,Pavel Nedvěd,Alan Shearer,NULL Eusebio,JuanSebastián Verón,Hernán Crespo,Alessandro DelPiero,Raúl GonzálBlanco |
| Lech | Poznań | 6 | Davor Suker,NULL Romário,Hidetoshi Nakata,NULL Ronaldo,CarlosAlberto Torres,Gianluigi Buffon |
| Lechia | Gdańsk | 11 | Roberto Carlos,Emilio Butragueno,KarlHeinz Rummenigge,Rob Rensenbrink,Jan Ceulemans,NULL Rivelino,Javier Saviola,Luís Figo,Patrick Vieira,Rui Costa,Peter Schmeichel |
| Izolator | Boguchwała | 7 | Ruud Gullit,Roy Keane,NULL Rivaldo,Diego Maradona,Johan Neeskens,PauloRoberto Falco,Mia Hamm |
| ŁKS | Łódź | 9 | Francesco Totti,Didier Deschamps,Hong Myungbo,Dennis Bergkamp,Franky VanDerElst,Javier Zanetti,Paolo Rossi,Christo Stoiczkow,Gary Lineker |
| Górnik | Zabrze | 8 | Luis Enrique,JeanMarie Pfaff,David Trézéguet,Michael Owen,NULL Ronaldinho,Kevin Keegan,Michael Laudrup,Ruud vanNistelrooy |
| Groclin | Grodzisk | 6 | Dino Zoff,Clarence Seedorf,Andrij Szewczenko,Enzo Francescoli,Lilian Thuram,Johan Cruijff |
| Wisła | Płock | 7 | Uwe Seeler,JeanPierre Papin,NULL Socrates,George Best,Josef Masopust,David Beckham,Mario Kempes |
| Jagiellonia | Białystok | 8 | Roger Milla,Iván Zamorano,Rinat Dasajew,Nílton Santos,Edgar Davids,Ferenc Puskás,NULL Pele,Zinedine Zidane |
| Unia | Racibórz | 7 | Alfredo DiStéfano,Patrick Kluivert,Brian Laudrup,Omar Sívori,Gheorghe Hagi,NULL Zico,Alessandro Nesta |
+-------------+------------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
11 rows in set (0.02 sec)
Zawodnicy spoza Polski grający w klubach gdzie jest ich więce niż 5.
PODZAPYTANIA (PODKWERENDY ang. Subquerries)
Podkwerendy są to kwerendy występujące w innych kwerendach. Umieszczamy je w nawiasach ().
Przykład chcemy znaleźć dane najstarszego zawodnika.
Użyjemy najpierw widoku, w którym znajdziemy datę urodzenia najstarszego zawodnika.
mysql> SELECT MIN(DataUrodz) FROM zawodnicy;
+----------------+
| MIN(DataUrodz) |
+----------------+
| 1970-01-15 |
+----------------+
1 row in set (0.00 sec)
mysql> CREATE VIEW najstarszy AS SELECT MIN(DataUrodz) AS MinData FROM zawodnicy;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT zawodnicy.* FROM zawodnicy,najstarszy WHERE DataUrodz=MinData;
+-------+----------+------------+------------+--------+--------+-------------+
| IdZaw | Imie | Nazwisko | DataUrodz | wzrost | kraj | pesel |
+-------+----------+------------+------------+--------+--------+-------------+
| 305 | Waldemar | Stramowski | 1970-01-15 | 199 | Polska | 70011523522 |
+-------+----------+------------+------------+--------+--------+-------------+
1 row in set (0.00 sec)
mysql> SELECT zawodnicy.* FROM zawodnicy WHERE DataUrodz=(SELECT MIN(DataUrodz) FROM zawodnicy);
+-------+----------+------------+------------+--------+--------+-------------+
| IdZaw | Imie | Nazwisko | DataUrodz | wzrost | kraj | pesel |
+-------+----------+------------+------------+--------+--------+-------------+
| 305 | Waldemar | Stramowski | 1970-01-15 | 199 | Polska | 70011523522 |
+-------+----------+------------+------------+--------+--------+-------------+
1 row in set (0.00 sec)
Jeżeli podkwerenda w warunku WHERE zwraca więcej niż jedną to operator = powinien być zamieniony przez operator IN (podkwerenda)
Przykład
Chcemy znaleźć wszystkich piłkarzy którzy nie są związanie kontraktami.
mysql> SELECT DISTINCT zawodnicy.* FROM zawodnicy NATURAL JOIN zawklub WHERE IdZaw NOT IN (SELECT IdZaw FROM zawklub WHERE DataZak IS NULL);
+-------+---------+-----------+------------+--------+-----------+-------+
| IdZaw | Imie | Nazwisko | DataUrodz | wzrost | kraj | pesel |
+-------+---------+-----------+------------+--------+-----------+-------+
| 12 | Gabriel | Batistuta | 1973-01-13 | 183 | Argentyna | NULL |
| 10 | Franco | Baresi | 1976-11-30 | 170 | Włochy | NULL |
| 9 | Gordon | Banks | 1978-11-28 | 183 | Anglia | NULL |
| 8 | Michael | Ballack | 1978-12-11 | 167 | Niemcy | NULL |
+-------+---------+-----------+------------+--------+-----------+-------+
4 rows in set (0.25 sec)
Podkwerendy po SELECT
mysql> SELECT kraj,COUNT(*)/(SELECT COUNT(*) FROM zawodnicy)*100 as procent FROM zawodnicy GROUP BY kraj;
+------------+---------+
| kraj | procent |
+------------+---------+
| Anglia | 3.2154 |
| Argentyna | 2.2508 |
| Belgia | 0.9646 |
| Brazylia | 3.8585 |
| Bułgaria | 0.3215 |
| Chorwacja | 0.3215 |
| Czechy | 0.6431 |
| Francja | 3.5370 |
| Hiszpania | 1.9293 |
| Holandia | 5.1447 |
| Japonia | 0.3215 |
| Korea | 0.3215 |
| Niemcy | 3.2154 |
| Nigeria | 0.9646 |
| Peru | 0.3215 |
| Polska | 63.6656 |
| Portugalia | 1.9293 |
| Rumunia | 0.3215 |
| Turcja | 1.2862 |
| Ukraina | 0.3215 |
| Węgry | 0.3215 |
| Włochy | 4.5016 |
| ZSRR | 0.3215 |
+------------+---------+
23 rows in set (0.00 sec)
Podkwerendy skorelowane
Podzapytanie jest zależne od zapytania głównego,
Przykład
Znajdziemy w każdym klubie najstarszego zawodnika
mysql> SELECT k1.nazwa,k1.miasto,zawodnicy.imie,zawodnicy.nazwisko,zawodnicy.DataUrodz FROM kluby k1 Natural JOIN zawklub NATURAL JOIN zawodnicy WHERE DataUrodz=(SELECT MIN(DataUrodz) FROM zawodnicy NATURAL JOIN zawklub NATURAL JOIN kluby k2 WHERE k1.idklub=k2.idklub) AND DataZak IS NULL;
+-------------+------------+-----------+------------+------------+
| nazwa | miasto | imie | nazwisko | DataUrodz |
+-------------+------------+-----------+------------+------------+
| Stomil | Olsztyn | Waldemar | Stramowski | 1970-01-15 |
| Unia | Racibórz | SĹawomir | Fuk | 1970-06-08 |
| Lech | Poznań | PaweĹ | Sanecki | 1970-02-15 |
| Korona | Kielce | Ĺukasz | Styka | 1970-07-15 |
| Jagiellonia | Białystok | Jakub | BĹaszyk | 1970-09-30 |
| Groclin | Grodzisk | Bogdan | RzeĽnik | 1970-04-11 |
| Izolator | Boguchwała | Diego | Maradona | 1970-02-07 |
| ŁKS | Łódź | Dennis | Bergkamp | 1970-02-17 |
+-------------+------------+-----------+------------+------------+
8 rows in set (0.28 sec)
INSTRUKJA UNION
SELECT …
UNION
SELECT …
Wynikiem są wiersze z obu tabel nie powtarzające się. Aby ta instrukcja mogła być użyta obydwa zapytania wchodzące w jej skład powinny mieć tę samą liczbę kolumn. Nagłówki pochodzą z pierwszej kwerendy.
mysql> SELECT * FROM mecze WHERE IdGosp=1 OR IdGosc=1 UNION SELECT * FROM meczeArchiwum WHERE IdGosp=1 OR IdGosc=1 ORDER BY DataMeczu;
+--------+--------+------------+----------+----------+-----------+
| IdGosp | IdGosc | Datameczu | GoleGosp | GoleGosc | IleWidzow |
+--------+--------+------------+----------+----------+-----------+
| 1 | 1 | 2008-10-04 | 3 | 3 | 5559 |
| 15 | 1 | 2008-10-05 | 1 | 2 | 1222 |
| 2 | 1 | 2008-10-05 | 4 | 5 | 7565 |
| 3 | 1 | 2008-10-12 | 1 | 4 | 8910 |
| 4 | 1 | 2008-10-19 | 3 | 5 | 1208 |
| 5 | 1 | 2008-10-26 | 2 | 1 | 6577 |
| 6 | 1 | 2008-11-02 | 3 | 3 | 2373 |
| 7 | 1 | 2008-11-09 | 1 | 3 | 6290 |
| 1 | 11 | 2008-11-09 | 4 | 4 | 10624 |
| 8 | 1 | 2008-11-16 | 5 | 3 | 5893 |
| 1 | 14 | 2008-11-23 | 1 | 1 | 9304 |
| 9 | 1 | 2008-11-23 | 2 | 4 | 1906 |
| 1 | 9 | 2008-11-23 | 5 | 1 | 1187 |
| 1 | 6 | 2008-11-30 | 2 | 3 | 2263 |
| 1 | 7 | 2008-11-30 | 1 | 3 | 5791 |
| 10 | 1 | 2008-11-30 | 5 | 2 | 9053 |
| 11 | 1 | 2008-12-07 | 5 | 1 | 6991 |
| 1 | 10 | 2008-12-07 | 5 | 1 | 2138 |
| 1 | 5 | 2008-12-14 | 2 | 2 | 4786 |
| 12 | 1 | 2008-12-14 | 3 | 3 | 6536 |
| 13 | 1 | 2008-12-21 | 2 | 2 | 841 |
| 1 | 4 | 2008-12-22 | 2 | 4 | 3910 |
| 14 | 1 | 2008-12-28 | 5 | 4 | 2740 |
| 1 | 2 | 2008-12-29 | 1 | 2 | 3787 |
| 1 | 3 | 2009-01-04 | 4 | 3 | 6182 |
| 1 | 13 | 2009-01-18 | 4 | 5 | 5384 |
| 1 | 12 | 2009-02-15 | 4 | 3 | 5548 |
| 1 | 8 | 2009-03-08 | 1 | 1 | 2635 |
| 1 | 4 | 2014-12-02 | 3 | 6 | 4000 |
+--------+--------+------------+----------+----------+-----------+
29 rows in set (0.00 sec)
--------------------20-12-2014 --------------------------