{"id":36671,"date":"2019-10-31T22:13:01","date_gmt":"2019-10-31T19:13:01","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sql-zanimatelnye-zadachki\/"},"modified":"2019-10-31T22:13:01","modified_gmt":"2019-10-31T19:13:01","slug":"sql-zanimatelnye-zadachki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/sql-zanimatelnye-zadachki","title":{"rendered":"SQL. Ciekawe zadania","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Witaj, Habr!<\/p>\n<p>Od ponad 3 lat ucz\u0119 SQL w r\u00f3\u017cnych centrach szkoleniowych, a jednym z moich spostrze\u017ce\u0144 jest to, \u017ce studenci lepiej przyswajaj\u0105 i rozumiej\u0105 SQL, gdy stawiamy przed nimi zadanie, a nie tylko opowiadamy o mo\u017cliwo\u015bciach i podstawach teoretycznych.<\/p>\n<p>W tym artykule podziel\u0119 si\u0119 z Wami moim zestawem zada\u0144, kt\u00f3re daj\u0119 studentom jako prac\u0119 domow\u0105 oraz nad kt\u00f3rymi prowadzimy r\u00f3\u017cnego rodzaju burze m\u00f3zg\u00f3w, co prowadzi do g\u0142\u0119bszego i bardziej klarownego zrozumienia SQL.<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Ciekawe zadania\" src=\"\/wp-content\/uploads\/2019\/07\/283f472e0c382c0621ffc14e2ac06881.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSQL (\u02c8\u025bs\u02c8kju\u02c8\u025bl; ang. structured query language \u2014 \u201ej\u0119zyk zapyta\u0144 strukturalnych\u201d) \u2014 deklaratywny j\u0119zyk programowania, stosowany do tworzenia, modyfikowania i zarz\u0105dzania danymi w relacyjnej bazie danych, zarz\u0105dzanej przez odpowiedni system zarz\u0105dzania bazami danych. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\">Wi\u0119cej informacji... <\/a><\/noindex><\/p>\n<p>O SQL mo\u017cna poczyta\u0107 w r\u00f3\u017cnych <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/search?q=SQL\">\u017ar\u00f3de\u0142<\/a><\/noindex>.<br \/>\nTen artyku\u0142 nie ma na celu nauczy\u0107 ci\u0119 SQL od podstaw.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNo to zaczynajmy.<\/p>\n<p>B\u0119dziemy u\u017cywa\u0107 powszechnie znanej <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/oracle\/db-sample-schemas\/tree\/master\/human_resources\">schemy HR<\/a><\/noindex> w Oracle z jej tabelami (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/comsc\/HR-sample-schema-table-descriptions.html\">Dowiedz si\u0119 wi\u0119cej<\/a><\/noindex>):<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Ciekawe zadania\" src=\"\/wp-content\/uploads\/2019\/07\/b518c0bedd0d7bbeaedbcc4bd95079cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZaznaczam, \u017ce b\u0119dziemy rozwa\u017ca\u0107 tylko zadania na SELECT. Nie ma tutaj zada\u0144 na DML i DDL.<\/p>\n<h2>Zadania<\/h2>\n<p>\n<b>Ograniczanie i sortowanie danych<\/b><\/p>\n<p>Tabela Employees. Uzyskaj list\u0119 z informacjami o wszystkich pracownikach. <br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w o imieniu 'David'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name = 'David';\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych job_id to 'IT_PROG'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE job_id = 'IT_PROG'\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 wszystkich pracownik\u00f3w z 50 dzia\u0142u (department_id) z wynagrodzeniem (salary) wi\u0119kszym ni\u017c 4000.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE department_id = 50 AND salary &gt; 4000;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 wszystkich pracownik\u00f3w z 20 i 30 dzia\u0142u (department_id).<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE department_id = 20 OR department_id = 30;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych ostatnia litera w imieniu to 'a'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%a';\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 wszystkich pracownik\u00f3w z 50 i 80 dzia\u0142u (department_id), kt\u00f3rzy maj\u0105 premi\u0119 (warto\u015b\u0107 w kolumnie commission_pct nie jest pusta).<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE     (department_id = 50 OR department_id = 80)\n       AND commission_pct IS NOT NULL;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych imi\u0119 zawiera co najmniej 2 litery 'n'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%n%n%';\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych imi\u0119 ma wi\u0119cej ni\u017c 4 litery.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%_____%';\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych wynagrodzenie mie\u015bci si\u0119 w przedziale od 8000 do 9000 (w\u0142\u0105cznie)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE salary BETWEEN 8000 AND 9000;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych imi\u0119 zawiera znak '%'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%%%' ESCAPE '';\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz list\u0119 wszystkich ID mened\u017cer\u00f3w<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT DISTINCT manager_id\n  FROM employees\n WHERE manager_id IS NOT NULL;\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz list\u0119 pracownik\u00f3w z ich stanowiskami w formacie: Donald(sh_clerk)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;\n<\/code><\/pre>\n<p>\n<b>U\u017cycie funkcji jednoliniowych do dostosowania wyj\u015bcia<\/b><\/p>\n<p>Tabela Pracownicy. Pobierz list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych d\u0142ugo\u015b\u0107 imienia jest wi\u0119ksza ni\u017c 10 liter<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE LENGTH (first_name) &gt; 10;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych imi\u0119 zawiera liter\u0119 'b' (niezale\u017cnie od wielko\u015bci liter)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE INSTR (LOWER (first_name), 'b') &gt; 0;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych imi\u0119 zawiera co najmniej 2 litery 'a'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE INSTR (LOWER (first_name),'a',1,2) &gt; 0;\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych wynagrodzenie jest wielokrotno\u015bci\u0105 1000<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE MOD (salary, 1000) = 0;\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz pierwsze 3-cyfrowe numery telefonu pracownika, je\u015bli jego numer jest w formacie XXX.XXX.XXXX<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number\n  FROM employees\n WHERE phone_number LIKE '___.___.____';\n<\/code><\/pre>\n<p>Tabela Dzia\u0142\u00f3w. Pobierz pierwsze s\u0142owo z nazwy dzia\u0142u dla tych, kt\u00f3rzy maj\u0105 nazw\u0119 z wi\u0119cej ni\u017c jednym s\u0142owem<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT department_name,\n       SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)\n           first_word\n  FROM departments\n WHERE INSTR (department_name, ' ') &gt; 0;\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz imiona pracownik\u00f3w bez pierwszej i ostatniej litery w imieniu<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name\n  FROM employees;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych ostatnia litera w imieniu to 'm' i d\u0142ugo\u015b\u0107 imienia jest wi\u0119ksza ni\u017c 5<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)&gt;5;\n<\/code><\/pre>\n<p>Tabela Dual. Pobierz dat\u0119 nast\u0119pnego pi\u0105tku<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rzy pracuj\u0105 w firmie d\u0142u\u017cej ni\u017c 17 lat<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE MONTHS_BETWEEN (SYSDATE, hire_date) \/ 12 &gt; 17;\n<\/code><\/pre>\n<p>Tabela Pracownicy. Pobierz list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych ostatnia cyfra numeru telefonu jest nieparzysta i sk\u0142ada si\u0119 z 3 cyfr oddzielonych kropk\u0105<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE     MOD (SUBSTR (phone_number, -1), 2) != 0\n       AND INSTR (phone_number,'.',1,3) = 0;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rych warto\u015b\u0107 job_id po znaku '_' ma co najmniej 3 znaki, ale ta warto\u015b\u0107 po '_' nie jest r\u00f3wna 'CLERK'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE     LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) &gt; 3\n       AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, zast\u0119puj\u0105c w warto\u015bci PHONE_NUMBER wszystkie '.' na '-'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number\n  FROM employees;\n<\/code><\/pre>\n<p>\n<b>U\u017cycie funkcji konwersji i warunkowych wyra\u017ce\u0144<\/b><\/p>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rzy zacz\u0119li prac\u0119 w pierwszy dzie\u0144 miesi\u0105ca (dowolnego)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'DD') = '01';\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rzy zacz\u0119li prac\u0119 w 2008 roku<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'YYYY') = '2008';\n<\/code><\/pre>\n<p>Tabela DUAL. Wy\u015bwietl jutrzejsz\u0105 dat\u0119 w formacie: Tomorrow is Second day of January<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (SYSDATE, 'fm\"\"Tomorrow is \"\"Ddspth \"\"day of\"\" Month')     info\n  FROM DUAL;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w oraz daty ich rozpocz\u0119cia pracy w formacie: 21st of June, 2007<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, TO_CHAR (hire_date, 'fmddth \"\"of\"\" Month, YYYY') hire_date\n  FROM employees;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w z podwy\u017ckami wynagrodzenia o 20%. Wy\u015bwietl wynagrodzenie z symbolem dolara<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary\n  FROM employees;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w, kt\u00f3rzy zacz\u0119li prac\u0119 w lutym 2007 roku.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE hire_date BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY')\n                     AND LAST_DAY (TO_DATE ('01.02.2007', 'DD.MM.YYYY'));\n\nSELECT *\n  FROM employees\n WHERE to_char(hire_date,'MM.YYYY') = '02.2007'; \n<\/code><\/pre>\n<p>Tabela DUAL. Wy\u015bwietl aktualn\u0105 dat\u0119, + sekunda, + minuta, + godzina, + dzie\u0144, + miesi\u0105c, + rok<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT SYSDATE                          now,\n       SYSDATE + 1 \/ (24 * 60 * 60)     plus_second,\n       SYSDATE + 1 \/ (24 * 60)          plus_minute,\n       SYSDATE + 1 \/ 24                 plus_hour,\n       SYSDATE + 1                      plus_day,\n       ADD_MONTHS (SYSDATE, 1)          plus_month,\n       ADD_MONTHS (SYSDATE, 12)         plus_year\n  FROM DUAL;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w z ca\u0142kowitym wynagrodzeniem (salary + commission_pct(%)) w formacie: $24,000.00<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary\n  FROM employees;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 wszystkich pracownik\u00f3w oraz informacje o bonusach do wynagrodzenia (Yes\/No)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus\n  FROM employees;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj poziom wynagrodzenia ka\u017cdego pracownika: Mniej ni\u017c 5000 uznaje si\u0119 za niski poziom, Wi\u0119cej lub r\u00f3wne 5000 i mniej ni\u017c 10000 uznaje si\u0119 za normalny poziom, Wi\u0119cej lub r\u00f3wne 10000 uznaje si\u0119 za wysoki poziom<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ first_name,\n       salary,\n       CASE\n           WHEN salary = 5000 AND salary &lt; 10000 THEN &#039;Normalny&#039;\n           ELSE &#039;Wysoki&#039;\n       END salary_level\n  Z employees;\n<\/code><\/pre>\n<p>Tabela Countries. Dla ka\u017cdej kraju poka\u017c region, w kt\u00f3rym si\u0119 znajduje: 1-Europa, 2-Ameryka, 3-Azja, 4-Afryka (bez u\u017cycia Join)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ country_name country,\n       DECODE (region_id,\n               1, 'Europa',\n               2, 'Ameryka',\n               3, 'Azja',\n               4, 'Afryka',\n               'Nieznany')\n           region\n  Z countries;\n\nWYBIERZ country_name\n           country,\n       CASE region_id\n           WHEN 1 THEN 'Europa'\n           WHEN 2 THEN 'Ameryka'\n           WHEN 3 THEN 'Azja'\n           WHEN 4 THEN 'Afryka'\n           ELSE 'Nieznany'\n       END\n           region\n  Z countries;\n<\/code><\/pre>\n<p>\n<b>Raportowanie Skonsolidowanych Danych Przy U\u017cyciu Funkcji Grupuj\u0105cych<\/b><\/p>\n<p>Tabela Employees. Uzyskaj raport wed\u0142ug department_id z minimaln\u0105 i maksymaln\u0105 pensj\u0105, z najwcze\u015bniejsz\u0105 i najp\u00f3\u017aniejsz\u0105 dat\u0105 zatrudnienia oraz z liczb\u0105 pracownik\u00f3w. Sortuj wed\u0142ug liczby pracownik\u00f3w (malej\u0105co)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  WYBIERZ department_id,\n         MIN (salary) min_salary,\n         MAX (salary) max_salary,\n         MIN (hire_date) min_hire_date,\n         MAX (hire_date) max_hire_Date,\n         COUNT (*) count\n    Z employees\nGRUPUJ wed\u0142ug department_id\nORDERUJ wed\u0142ug count(*) DESC;\n<\/code><\/pre>\n<p>Tabela Employees. Ilu pracownik\u00f3w ma imiona zaczynaj\u0105ce si\u0119 na t\u0119 sam\u0105 liter\u0119? Sortuj wed\u0142ug liczby. Poka\u017c tylko te, gdzie liczba wi\u0119ksza ni\u017c 1<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ SUBSTR (first_name, 1, 1) first_char, COUNT (*)\n    Z employees\nGRUPUJ wed\u0142ug SUBSTR (first_name, 1, 1)\n  HAVING COUNT (*) &gt; 1\nORDERUJ wed\u0142ug 2 DESC;\n<\/code><\/pre>\n<p>Tabela Employees. Ilu pracownik\u00f3w pracuje w tym samym dziale i zarabia tak\u0105 sam\u0105 pensj\u0119?<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ department_id, salary, COUNT (*)\n    Z employees\nGRUPUJ wed\u0142ug department_id, salary\n  HAVING COUNT (*) &gt; 1;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj raport ile pracownik\u00f3w zosta\u0142o zatrudnionych w ka\u017cdy dzie\u0144 tygodnia. Sortuj wed\u0142ug liczby<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ TO_CHAR (hire_Date, 'Dzie\u0144') day, COUNT (*)\n    Z employees\nGRUPUJ wed\u0142ug TO_CHAR (hire_Date, 'Dzie\u0144')\nORDERUJ wed\u0142ug 2 DESC;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj raport na temat liczby pracownik\u00f3w zatrudnionych w poszczeg\u00f3lnych latach. Sortuj wed\u0142ug liczby<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ TO_CHAR (hire_date, 'RRRR') year, COUNT (*)\n    Z employees\nGRUPUJ wed\u0142ug TO_CHAR (hire_date, 'RRRR');\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj liczb\u0119 dzia\u0142\u00f3w, w kt\u00f3rych s\u0105 pracownicy<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ COUNT (COUNT (*)) department_count\n    Z employees\n   GDZIE department_id IS NOT NULL\nGRUPUJ wed\u0142ug department_id;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 department_id, w kt\u00f3rym pracuje wi\u0119cej ni\u017c 30 pracownik\u00f3w<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  WYBIERZ department_id\n    Z employees\nGRUPUJ wed\u0142ug department_id\n  HAVING COUNT (*) &gt; 30;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 department_id oraz zaokr\u0105glon\u0105 \u015bredni\u0105 pensj\u0119 pracownik\u00f3w w ka\u017cdym dziale. <br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  WYBIERZ department_id, ROUND (AVG (salary)) avg_salary\n    Z employees\nGRUPUJ wed\u0142ug department_id;\n<\/code><\/pre>\n<p>Tabela Countries. Uzyskaj list\u0119 region_id oraz sum\u0119 wszystkich liter country_name, w kt\u00f3rych jest ich wi\u0119cej ni\u017c 60<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT region_id\n    FROM countries\nGROUP BY region_id\n  HAVING SUM (LENGTH (country_name)) &gt; 60;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 department_id, w kt\u00f3rych pracuj\u0105 pracownicy na wielu (&gt;1) job_id<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT department_id\n    FROM employees\nGROUP BY department_id\n  HAVING COUNT (DISTINCT job_id) &gt; 1;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 manager_id, kt\u00f3rzy maj\u0105 wi\u0119cej ni\u017c 5 podw\u0142adnych, a suma wszystkich pensji ich podw\u0142adnych przekracza 50000<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT manager_id\n    FROM employees\nGROUP BY manager_id\n  HAVING COUNT (*) &gt; 5 AND SUM (salary) &gt; 50000;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj list\u0119 manager_id, kt\u00f3rych \u015brednia pensja wszystkich podw\u0142adnych mie\u015bci si\u0119 w przedziale od 6000 do 9000 i kt\u00f3rzy nie otrzymuj\u0105 bonus\u00f3w (commission_pct puste)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT manager_id, AVG (salary) avg_salary\n    FROM employees\n   WHERE commission_pct IS NULL\nGROUP BY manager_id\n  HAVING AVG (salary) BETWEEN 6000 AND 9000;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj maksymalne wynagrodzenie ze wszystkich pracownik\u00f3w, kt\u00f3rych job_id ko\u0144czy si\u0119 na s\u0142owo 'CLERK'<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT MAX (salary) max_salary\n  FROM employees\n WHERE job_id LIKE '%CLERK';\n\nSELECT MAX (salary) max_salary\n  FROM employees\n WHERE SUBSTR (job_id, -5) = 'CLERK';\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj maksymaln\u0105 pensj\u0119 spo\u015br\u00f3d wszystkich \u015brednich pensji wed\u0142ug departamentu<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT MAX (AVG (salary))\n    FROM employees\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabela Employees. Uzyskaj liczb\u0119 pracownik\u00f3w o tej samej liczbie liter w imieniu. Poka\u017c tylko tych, kt\u00f3rych d\u0142ugo\u015b\u0107 imienia jest wi\u0119ksza ni\u017c 5 oraz liczba pracownik\u00f3w o takim imieniu jest wi\u0119ksza ni\u017c 20. Sortuj wed\u0142ug d\u0142ugo\u015bci imienia<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT LENGTH (first_name), COUNT (*)\n    FROM employees\nGROUP BY LENGTH (first_name)\n  HAVING LENGTH (first_name) &gt; 5 AND COUNT (*) &gt; 20\nORDER BY LENGTH (first_name);\n\n  SELECT LENGTH (first_name), COUNT (*)\n    FROM employees\n   WHERE LENGTH (first_name) &gt; 5\nGROUP BY LENGTH (first_name)\n  HAVING COUNT (*) &gt; 20\nORDER BY LENGTH (first_name);\n<\/code><\/pre>\n<p>\n<b>Wy\u015bwietlanie danych z wielu tabel za pomoc\u0105 z\u0142\u0105czy<\/b><\/p>\n<p>Tabela Employees, Departaments, Locations, Countries, Regions. Uzyskaj list\u0119 region\u00f3w i liczb\u0119 pracownik\u00f3w w ka\u017cdym regionie<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT region_name, COUNT (*)\n    FROM employees e\n         JOIN departments d ON (e.department_id = d.department_id)\n         JOIN locations l ON (d.location_id = l.location_id)\n         JOIN countries c ON (l.country_id = c.country_id)\n         JOIN regions r ON (c.region_id = r.region_id)\nGROUP BY region_name;\n<\/code><\/pre>\n<p>Tabela Employees, Departaments, Locations, Countries, Regions. Uzyskaj szczeg\u00f3\u0142owe informacje o ka\u017cdym pracowniku:<br \/>\nFirst_name, Last_name, Departament, Job, Street, Country, Region<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT First_name,\n       Last_name,\n       Department_name,\n       Job_id,\n       street_address,\n       Country_name,\n       Region_name\n  FROM employees  e\n       JOIN departments d ON (e.department_id = d.department_id)\n       JOIN locations l ON (d.location_id = l.location_id)\n       JOIN countries c ON (l.country_id = c.country_id)\n       JOIN regions r ON (c.region_id = r.region_id);\n<\/code><\/pre>\n<p>Tabela Employees. Poka\u017c wszystkich mened\u017cer\u00f3w, kt\u00f3rzy maj\u0105 wi\u0119cej ni\u017c 6 pracownik\u00f3w pod sob\u0105<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">  WYBIERZ man.first_name, COUNT (*)\n    Z pracownik\u00f3w emp DO\u0141\u0104CZ do pracownik\u00f3w man ON (emp.manager_id = man.employee_id)\nGRUPUJ PO man.first_name\n  MAM COUNT (*) &gt; 6;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Poka\u017c wszystkich pracownik\u00f3w, kt\u00f3rzy nikomu nie podlegaj\u0105<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ emp.first_name\n  Z pracownik\u00f3w emp\n       LEWY DO\u0141\u0104CZ do pracownik\u00f3w man ON (emp.manager_id = man.employee_id)\n GDZIE man.FIRST_NAME JEST NULL;\n\nWYBIERZ first_name\n  Z pracownik\u00f3w\n GDZIE manager_id JEST NULL;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Historia_pracy. W tabeli Pracownicy znajduj\u0105 si\u0119 wszyscy pracownicy. W tabeli Historia_pracy znajduj\u0105 si\u0119 pracownicy, kt\u00f3rzy opu\u015bcili firm\u0119. Uzyskaj raport o wszystkich pracownikach i ich statusie w firmie (Pracuje lub opu\u015bci\u0142 firm\u0119 z dat\u0105 odej\u015bcia)<br \/>\nPrzyk\u0142ad:<br \/>\nfirst_name | status<br \/>\nJennifer | Opu\u015bci\u0142 firm\u0119 31 grudnia 2006<br \/>\nClara | Obecnie pracuje<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ first_name,\n       NVL2 (\n           end_date,\n           TO_CHAR (end_date, 'fm\"\"Opu\u015bci\u0142 firm\u0119\"\" DD \"\"w\"\" Miesi\u0105c, RRRR'),\n           'Obecnie Pracuje')\n           status\n  Z pracownik\u00f3w e LEWY DO\u0141\u0104CZ do historii_pracy j ON (e.employee_id = j.employee_id);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Departamenty, Lokacje, Kraje, Regiony. Uzyskaj list\u0119 pracownik\u00f3w, kt\u00f3rzy mieszkaj\u0105 w Europie (region_name)<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\"> WYBIERZ first_name\n  Z pracownik\u00f3w\n       DO\u0141\u0104CZ do departament\u00f3w U\u017bYWAJ\u0104C (department_id)\n       DO\u0141\u0104CZ do lokacji U\u017bYWAJ\u0104C (location_id)\n       DO\u0141\u0104CZ do kraj\u00f3w U\u017bYWAJ\u0104C (country_id)\n       DO\u0141\u0104CZ do region\u00f3w U\u017bYWAJ\u0104C (region_id)\n GDZIE region_name = 'Europa';\n \n WYBIERZ first_name\n  Z pracownik\u00f3w e\n       DO\u0141\u0104CZ do departament\u00f3w d ON (e.department_id = d.department_id)\n       DO\u0141\u0104CZ do lokacji l ON (d.location_id = l.location_id)\n       DO\u0141\u0104CZ do kraj\u00f3w c ON (l.country_id = c.country_id)\n       DO\u0141\u0104CZ do region\u00f3w r ON (c.region_id = r.region_id)\n GDZIE region_name = 'Europa';\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Departamenty. Poka\u017c wszystkie departamenty, w kt\u00f3rych pracuje wi\u0119cej ni\u017c 30 pracownik\u00f3w<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ department_name, COUNT (*)\n    Z pracownik\u00f3w e DO\u0141\u0104CZ do departament\u00f3w d ON (e.department_id = d.department_id)\nGRUPUJ PO department_name\n  MAM COUNT (*) &gt; 30;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Departamenty. Poka\u017c wszystkich pracownik\u00f3w, kt\u00f3rzy nie nale\u017c\u0105 do \u017cadnego departamentu<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ first_name\n  Z pracownik\u00f3w e\n       LEWY DO\u0141\u0104CZ do departament\u00f3w d ON (e.department_id = d.department_id)\n GDZIE d.department_name JEST NULL;\n\nWYBIERZ first_name\n  Z pracownik\u00f3w\n GDZIE department_id JEST NULL;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Departamenty. Poka\u017c wszystkie departamenty, w kt\u00f3rych nie ma \u017cadnego pracownika<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ department_name\n  Z pracownik\u00f3w e\n       PRAWO DO\u0141\u0104CZ do departament\u00f3w d ON (e.department_id = d.department_id)\n GDZIE first_name JEST NULL;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Poka\u017c wszystkich pracownik\u00f3w, kt\u00f3rzy nie maj\u0105 nikogo pod sob\u0105<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ man.first_name\n  Z pracownik\u00f3w emp\n       PRAWO DO\u0141\u0104CZ do pracownik\u00f3w man ON (emp.manager_id = man.employee_id)\n GDZIE emp.FIRST_NAME JEST NULL;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Prace, Departamenty. Poka\u017c pracownik\u00f3w w formacie: First_name, Job_title, Department_name.<br \/>\nPrzyk\u0142ad:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Transport | Pracownik Transportu<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">WYBIERZ first_name, job_title, department_name\n  Z pracownik\u00f3w e\n       DO\u0141\u0104CZ do prac zawodowych j ON (e.job_id = j.job_id)\n       DO\u0141\u0104CZ do departament\u00f3w d ON (d.department_id = e.department_id);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w, kt\u00f3rych mened\u017cerowie zostali zatrudnieni w 2005 roku, ale ci pracownicy zostali zatrudnieni przed 2005 rokiem<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT emp.*\n  FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)\n WHERE     TO_CHAR (man.hire_date, 'YYYY') = '2005'\n       AND emp.hire_date &lt; TO_DATE (&#039;01012005&#039;, &#039;DDMMYYYY&#039;);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w, kt\u00f3rych mened\u017cerowie zostali zatrudnieni w styczniu w dowolnym roku, a d\u0142ugo\u015b\u0107 job_title tych pracownik\u00f3w wynosi wi\u0119cej ni\u017c 15 znak\u00f3w.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT emp.*\n  FROM employees emp\n       JOIN employees man ON (emp.manager_id = man.employee_id)\n       JOIN jobs j ON (emp.job_id = j.job_id)\n WHERE TO_CHAR (man.hire_date, 'MM') = '01' AND LENGTH (j.job_title) &gt; 15;\n<\/code><\/pre>\n<p>\n<b>U\u017cywanie podzapytania do rozwi\u0105zywania zapyta\u0144<\/b><\/p>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w z najd\u0142u\u017cszym imieniem.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE LENGTH (first_name) =\n       (SELECT MAX (LENGTH (first_name)) FROM employees);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w o wynagrodzeniu wi\u0119kszym ni\u017c \u015brednie wynagrodzenie wszystkich pracownik\u00f3w.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE salary &gt; (SELECT AVG (salary) FROM employees);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Dzia\u0142\u00f3w, Lokalizacji. Uzyskaj miasto, w kt\u00f3rym pracownicy \u0142\u0105cznie zarabiaj\u0105 najmniej.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT city\n    FROM employees e\n         JOIN departments d ON (e.department_id = d.department_id)\n         JOIN locations l ON (d.location_id = l.location_id)\nGROUP BY city\n  HAVING SUM (salary) =\n         (  SELECT MIN (SUM (salary))\n              FROM employees e\n                   JOIN departments d ON (e.department_id = d.department_id)\n                   JOIN locations l ON (d.location_id = l.location_id)\n          GROUP BY city);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w, kt\u00f3rych mened\u017cer zarabia wi\u0119cej ni\u017c 15000.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE manager_id IN (SELECT employee_id\n                        FROM employees\n                       WHERE salary &gt; 15000)\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Departamenty. Poka\u017c wszystkie departamenty, w kt\u00f3rych nie ma \u017cadnego pracownika<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM departments\n WHERE department_id NOT IN (SELECT department_id\n                               FROM employees\n                              WHERE department_id IS NOT NULL);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Poka\u017c wszystkich pracownik\u00f3w, kt\u00f3rzy nie s\u0105 mened\u017cerami.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE employee_id NOT IN (SELECT manager_id\n                             FROM employees\n                            WHERE manager_id IS NOT NULL);\n<\/code><\/pre>\n<p>Tabela Employees. Poka\u017c wszystkich mened\u017cer\u00f3w, kt\u00f3rzy maj\u0105 wi\u0119cej ni\u017c 6 pracownik\u00f3w pod sob\u0105<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees e\n WHERE (SELECT COUNT (*)\n          FROM employees\n         WHERE manager_id = e.employee_id) &gt; 6;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Dzia\u0142\u00f3w. Poka\u017c pracownik\u00f3w, kt\u00f3rzy pracuj\u0105 w dziale IT.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE department_id = (SELECT department_id\n                          FROM departments\n                         WHERE department_name = 'IT');\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w, Prace, Departamenty. Poka\u017c pracownik\u00f3w w formacie: First_name, Job_title, Department_name.<br \/>\nPrzyk\u0142ad:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Transport | Pracownik Transportu<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name,\n       (SELECT job_title\n          FROM jobs\n         WHERE job_id = e.job_id)\n           job_title,\n       (SELECT department_name\n          FROM departments\n         WHERE department_id = e.department_id)\n           department_name\n  FROM employees e;\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w, kt\u00f3rych mened\u017cerowie zostali zatrudnieni w 2005 roku, ale ci pracownicy zostali zatrudnieni przed 2005 rokiem<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE     manager_id IN (SELECT employee_id\n                            FROM employees\n                           WHERE TO_CHAR (hire_date, 'YYYY') = '2005')\n       AND hire_date &lt; TO_DATE (&#039;01012005&#039;, &#039;DDMMYYYY&#039;);\n<\/code><\/pre>\n<p>Tabela Pracownik\u00f3w. Uzyskaj list\u0119 pracownik\u00f3w, kt\u00f3rych mened\u017cerowie zostali zatrudnieni w styczniu w dowolnym roku, a d\u0142ugo\u015b\u0107 job_title tych pracownik\u00f3w wynosi wi\u0119cej ni\u017c 15 znak\u00f3w.<br \/>\n<b class=\"spoiler_title\">Rozwi\u0105zanie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees e\n WHERE     manager_id IN (SELECT employee_id\n                            FROM employees\n                           WHERE TO_CHAR (hire_date, 'MM') = '01')\n       AND (SELECT LENGTH (job_title)\n              FROM jobs\n             WHERE job_id = e.job_id) &gt; 15;\n<\/code><\/pre>\n<p>\n<b>Na tym ko\u0144czymy jak na razie.<\/b><\/p>\n<p>Mam nadziej\u0119, \u017ce zadania by\u0142y interesuj\u0105ce i anga\u017cuj\u0105ce. <br \/>\nB\u0119d\u0119 na bie\u017c\u0105co uzupe\u0142nia\u0107 t\u0119 list\u0119 zada\u0144.<br \/>\nCiesz\u0119 si\u0119 r\u00f3wnie\u017c na wszelkie uwagi i sugestie.<\/p>\n<p>P.S.: Je\u015bli komu\u015b przyjdzie do g\u0142owy interesuj\u0105ce zadanie na SELECT, piszcie w komentarzach, dodam do listy.<\/p>\n<p>Dzi\u0119kujemy.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/461567\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439, \u0425\u0430\u0431\u0440! \u0412\u043e\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 3-\u0445 \u043b\u0435\u0442 \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e SQL \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0438\u043d\u0433 \u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 SQL \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0438 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u0445. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0434\u0430\u044e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27465,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-36671","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439, \u0425\u0430\u0431\u0440! \u0412\u043e\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 3-\u0445 \u043b\u0435\u0442 \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e SQL \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0438\u043d\u0433 \u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 SQL \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/sql-zanimatelnye-zadachki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47SQL. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439, \u0425\u0430\u0431\u0440! \u0412\u043e\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 3-\u0445 \u043b\u0435\u0442 \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e SQL \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0438\u043d\u0433 \u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 SQL \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/sql-zanimatelnye-zadachki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:13:01+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:01+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47SQL. Ciekawe zadania | ProHoster","description":"Cze\u015b\u0107, Habr! Od ponad 3 lat ucz\u0119 SQL w r\u00f3\u017cnych centrach szkoleniowych, a jednym z moich spostrze\u017ce\u0144 jest to, \u017ce studenci lepiej opanowuj\u0105 i rozumiej\u0105 SQL, gdy stawia si\u0119 przed nimi zadanie, a nie tylko.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/sql-zanimatelnye-zadachki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47SQL. \u0417\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u043a\u0438 | ProHoster","og:description":"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439, \u0425\u0430\u0431\u0440! \u0412\u043e\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 3-\u0445 \u043b\u0435\u0442 \u044f \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u044e SQL \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0438\u043d\u0433 \u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 SQL \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/sql-zanimatelnye-zadachki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:13:01+00:00","article:modified_time":"2019-10-31T19:13:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36671","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 04:21:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:40:23","updated":"2026-01-22 04:21:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=36671"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/27465"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=36671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=36671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=36671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}