{"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\/nl\/blog\/news\/sql-zanimatelnye-zadachki","title":{"rendered":"SQL. Boeiende puzzels","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Habr!<\/p>\n<p>Al meer dan 3 jaar geef ik SQL-trainingen bij verschillende trainingscentra. Een van mijn observaties is dat studenten SQL beter beheersen en begrijpen als ze taken krijgen, in plaats van alleen informatie over de mogelijkheden en de theoretische basis te horen.<\/p>\n<p>In dit artikel deel ik mijn lijst met taken die ik aan studenten geef als huiswerk en waar we verschillende brainstormsessies over houden, wat leidt tot een diepgaand en duidelijk begrip van SQL.<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Boeiende puzzels\" src=\"\/wp-content\/uploads\/2019\/07\/283f472e0c382c0621ffc14e2ac06881.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSQL (\u02c8\u025bs\u02c8kju\u02c8\u025bl; Engels: structured query language \u2013 'gestructureerde querytaal') is een declaratieve programmeertaal die wordt gebruikt voor het cre\u00ebren, wijzigen en beheren van gegevens in een relationele database, beheerd door een overeenkomstig databasebeheersysteem. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\">Meer informatie\u2026 <\/a><\/noindex><\/p>\n<p>Je kunt meer over SQL lezen uit verschillende bronnen. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/search?q=SQL\">bronnen<\/a><\/noindex>.<br \/>\nDit artikel heeft niet als doel je SQL vanaf nul te leren.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLaten we beginnen.<\/p>\n<p>We zullen gebruikmaken van de bekende <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/oracle\/db-sample-schemas\/tree\/master\/human_resources\">HR-schema<\/a><\/noindex> in Oracle met zijn tabellen (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/comsc\/HR-sample-schema-table-descriptions.html\">Meer informatie<\/a><\/noindex>):<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Boeiende puzzels\" src=\"\/wp-content\/uploads\/2019\/07\/b518c0bedd0d7bbeaedbcc4bd95079cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIk wil opmerken dat we alleen SELECT-taken zullen bekijken. Er zijn geen taken voor DML en DDL.<\/p>\n<h2>Taken<\/h2>\n<p>\n<b>Data Beperken en Sorteren<\/b><\/p>\n<p>Tabel Employees. Verkrijg een lijst met informatie over alle medewerkers. <br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers met de naam 'David'<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name = 'David';\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers met job_id gelijk aan 'IT_PROG'<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE job_id = 'IT_PROG'\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg een lijst van alle medewerkers van afdeling 50 (department_id) met een salaris (salary) hoger dan 4000.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees. Verkrijg een lijst van alle medewerkers van afdeling 20 en afdeling 30 (department_id).<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers waarvan de laatste letter van de naam 'a' is<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%a';\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg een lijst van alle medewerkers van afdeling 50 en afdeling 80 (department_id) die een bonus hebben (waarde in de kolom commission_pct is niet leeg).<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers die minimaal 2 letters 'n' in hun naam hebben<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%n%n%';\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg een lijst van alle medewerkers waarvan de naam langer is dan 4 letters.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%_____%';\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers wiens salaris tussen 8000 en 9000 ligt (inclusief)<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE salary BETWEEN 8000 AND 9000;\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers die het teken '%' in hun naam hebben<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%%%' ESCAPE '';\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle ID's van managers<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van werknemers met hun functies in het formaat: Donald(sh_clerk)<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;\n<\/code><\/pre>\n<p>\n<b>Gebruik van Single-Row Functies om Output aan te passen<\/b><\/p>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers wiens naam langer is dan 10 letters<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE LENGTH (first_name) &gt; 10;\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers die de letter 'b' (ongeacht de hoofdlettergevoeligheid) in hun naam hebben<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers die minimaal 2 letters 'a' in hun naam hebben<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers wiens salaris een veelvoud van 1000 is<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE MOD (salary, 1000) = 0;\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg de eerste 3 cijfers van het telefoonnummer van de medewerker als het nummer in het formaat XXX.XXX.XXXX is<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Afdelingen. Verkrijg het eerste woord van de naam van de afdeling voor degenen wiens naam meer dan \u00e9\u00e9n woord bevat<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg de namen van medewerkers zonder de eerste en laatste letter van de naam<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers waarvan de laatste letter van de naam 'm' is en de naam langer is dan 5 letters<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Dual. Verkrijg de datum van de volgende vrijdag<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers die langer dan 17 jaar in het bedrijf werken<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers wiens laatste cijfer van het telefoonnummer oneven is en bestaat uit 3 cijfers gescheiden door een punt<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers waarvan de waarde van job_id na het teken '_' uit minimaal 3 tekens bestaat, maar dat deze waarde na '_' niet gelijk is aan 'CLERK'<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van alle medewerkers door in de waarde PHONE_NUMBER alle '.' te vervangen door '-'<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Gebruik Conversiefuncties en Voorwaardelijke Expressies<\/b><\/p>\n<p>Tabel Werknemers. Verkrijg een lijst van alle werknemers die op de eerste dag van de maand (om het even welke) zijn begonnen<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'DD') = '01';\n<\/code><\/pre>\n<p>Tabel Werknemers. Verkrijg een lijst van alle werknemers die in 2008 zijn begonnen<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'YYYY') = '2008';\n<\/code><\/pre>\n<p>Tabel DUAL. Toon de datum van morgen in het formaat: Morgen is de tweede dag van januari<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (SYSDATE, 'fm\"\"Morgen is \"\"Ddspth \"\"dag van\"\" Maand') info\n  FROM DUAL;\n<\/code><\/pre>\n<p>Tabel Werknemers. Verkrijg een lijst van alle werknemers en de datum waarop ze zijn begonnen in het formaat: 21e van juni 2007<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, TO_CHAR (hire_date, 'fmddth \"\"van\"\" Maand, YYYY') hire_date\n  FROM employees;\n<\/code><\/pre>\n<p>Tabel Werknemers. Verkrijg een lijst van werknemers met verhoogde salarissen met 20%. Toon het salaris met het dollar teken<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg een lijst van alle werknemers die in februari 2007 zijn begonnen.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel DUAL. Toon de actuele datum, + seconde, + minuut, + uur, + dag, + maand, + jaar<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg een lijst van alle werknemers met volledige salarissen (salary + commission_pct(%)) in het formaat: $24,000.00<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg een lijst van alle werknemers en informatie over de aanwezigheid van bonussen bij het salaris (Ja\/Nee)<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg het salarispunt van elke werknemer: Minder dan 5000 wordt als laag niveau beschouwd, 5000 of meer en minder dan 10000 wordt als normaal niveau beschouwd, 10000 of meer wordt als hoog niveau beschouwd<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name,\n       salary,\n       CASE\n           WHEN salary = 5000 AND salary &lt; 10000 THEN &#039;Normaal&#039;\n           ELSE &#039;Hoog&#039;\n       END salary_level\n  FROM employees;\n<\/code><\/pre>\n<p>Tabel Countries. Toon voor elk land de regio waarin het zich bevindt: 1-Europa, 2-Amerika, 3-Azi\u00eb, 4-Afrika (zonder Join)<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT country_name country,\n       DECODE (region_id,\n               1, 'Europa',\n               2, 'Amerika',\n               3, 'Azi\u00eb',\n               4, 'Afrika',\n               'Onbekend')\n           region\n  FROM countries;\n\nSELECT country_name\n           country,\n       CASE region_id\n           WHEN 1 THEN 'Europa'\n           WHEN 2 THEN 'Amerika'\n           WHEN 3 THEN 'Azi\u00eb'\n           WHEN 4 THEN 'Afrika'\n           ELSE 'Onbekend'\n       END\n           region\n  FROM countries;\n<\/code><\/pre>\n<p>\n<b>Rapporteren van Geaggregeerde Gegevens met behulp van Groeperingsfuncties<\/b><\/p>\n<p>Tabel Employees. Verkrijg een rapport per department_id met het minimum en maximum salaris, de vroegste en laatste datum van indiensttreding en het aantal medewerkers. Sorteer op het aantal medewerkers (aflopend)<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">  SELECT 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    FROM employees\nGROUP BY department_id\nORDER BY count(*) DESC;\n<\/code><\/pre>\n<p>Tabel Employees. Hoeveel medewerkers hebben een naam die met dezelfde letter begint? Sorteer op aantal. Toon alleen die met een aantal groter dan 1<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT SUBSTR (first_name, 1, 1) first_char, COUNT (*)\n    FROM employees\nGROUP BY SUBSTR (first_name, 1, 1)\n  HAVING COUNT (*) &gt; 1\nORDER BY 2 DESC;\n<\/code><\/pre>\n<p>Tabel Employees. Hoeveel medewerkers werken in dezelfde afdeling en hebben hetzelfde salaris?<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT department_id, salary, COUNT (*)\n    FROM employees\nGROUP BY department_id, salary\n  HAVING COUNT (*) &gt; 1;\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg een rapport over hoeveel medewerkers elke dag van de week zijn aangenomen. Sorteer op aantal<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (hire_Date, 'Day') dag, COUNT (*)\n    FROM employees\nGROUP BY TO_CHAR (hire_Date, 'Day')\nORDER BY 2 DESC;\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg een rapport over hoeveel medewerkers per jaar zijn aangenomen. Sorteer op aantal<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (hire_date, 'YYYY') jaar, COUNT (*)\n    FROM employees\nGROUP BY TO_CHAR (hire_date, 'YYYY');\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg het aantal afdelingen waarin medewerkers zijn.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT COUNT (COUNT (*)) department_count\n    FROM employees\n   WHERE department_id IS NOT NULL\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg een lijst van department_id waarin meer dan 30 medewerkers werken<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">  SELECT department_id\n    FROM employees\nGROUP BY department_id\n  HAVING COUNT (*) &gt; 30;\n<\/code><\/pre>\n<p>Tabel Employees. Verkrijg een lijst van department_id en het afgeronde gemiddelde salaris van medewerkers in elke afdeling. <br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">  SELECT department_id, ROUND (AVG (salary)) avg_salary\n    FROM employees\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabel Countries. Verkrijg een lijst van region_id en de som van alle letters van country_name waarbij meer dan 60 zijn.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg een lijst van department_id's waar werknemers met meerdere (&gt;1) job_id's werken.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg een lijst van manager_id's met meer dan 5 ondergeschikten en een totaal salaris van die ondergeschikten hoger dan 50000.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg een lijst van manager_id's waarvan het gemiddelde salaris van alle ondergeschikten tussen 6000 en 9000 ligt en die geen bonussen ontvangen (commission_pct is leeg).<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg het maximale salaris van alle medewerkers waarvan job_id eindigt op het woord 'CLERK'<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Verkrijg het maximale salaris van alle gemiddelde salarissen per afdeling.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">  SELECT MAX (AVG (salary))\n    FROM employees\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabel Werknemers. Verkrijg het aantal medewerkers met hetzelfde aantal letters in de naam. Toon alleen diegenen met een naam langer dan 5 en meer dan 20 medewerkers met dezelfde naam. Sorteer op naamlengte.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Gegevens weergeven van meerdere tabellen met behulp van joins.<\/b><\/p>\n<p>Tabel Werknemers, Afdelingen, Locaties, Landen, Regio's. Verkrijg een lijst van regio's en het aantal medewerkers in elke regio.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers, Afdelingen, Locaties, Landen, Regio's. Verkrijg gedetailleerde informatie over elke medewerker:<br \/>\nVoornaam, Achternaam, Afdeling, Baan, Straat, Land, Regio.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Toon alle managers die meer dan 6 ondergeschikten hebben.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">  SELECT man.first_name, COUNT ()\n    FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)\nGROUP BY man.first_name\n  HAVING COUNT () &gt; 6;\n<\/code><\/pre>\n<p>Tabel Medewerkers. Toon alle medewerkers die aan niemand rapporteren<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT emp.first_name\n  FROM employees emp\n       LEFT JOIN employees man ON (emp.manager_id = man.employee_id)\n WHERE man.FIRST_NAME IS NULL;\n\nSELECT first_name\n  FROM employees\n WHERE manager_id IS NULL;\n<\/code><\/pre>\n<p>Tabel Medewerkers, Job_history. In de tabel Employee worden alle medewerkers opgeslagen. In de tabel Job_history staan medewerkers die het bedrijf hebben verlaten. Verkrijg een rapport over alle medewerkers en hun status in het bedrijf (Werkt nog of heeft het bedrijf verlaten met vertrekdatum)<br \/>\nVoorbeeld:<br \/>\nfirst_name | status<br \/>\nJennifer | Heeft het bedrijf verlaten op 31 december 2006<br \/>\nClara | Huidig werkzaam<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name,\n       NVL2 (\n           end_date,\n           TO_CHAR (end_date, 'fm\"\"Heeft het bedrijf verlaten op\"\" DD \"\"van\"\" Maand, YYYY'),\n           'Huidig werkzaam')\n           status\n  FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);\n<\/code><\/pre>\n<p>Tabel Medewerkers, Afdelingen, Locaties, Landen, Regio's. Verkrijg een lijst van medewerkers die in Europa wonen (region_name)<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\"> SELECT first_name\n  FROM employees\n       JOIN departments USING (department_id)\n       JOIN locations USING (location_id)\n       JOIN countries USING (country_id)\n       JOIN regions USING (region_id)\n WHERE region_name = 'Europa';\n \n SELECT first_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 WHERE region_name = 'Europa';\n<\/code><\/pre>\n<p>Tabel Medewerkers, Afdelingen. Toon alle afdelingen waar meer dan 30 medewerkers werken<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT department_name, COUNT ()\n    FROM employees e JOIN departments d ON (e.department_id = d.department_id)\nGROUP BY department_name\n  HAVING COUNT () &gt; 30;\n<\/code><\/pre>\n<p>Tabel Medewerkers, Afdelingen. Toon alle medewerkers die in geen enkele afdeling zijn opgenomen<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name\n  FROM employees e\n       LEFT JOIN departments d ON (e.department_id = d.department_id)\n WHERE d.department_name IS NULL;\n\nSELECT first_name\n  FROM employees\n WHERE department_id IS NULL;\n<\/code><\/pre>\n<p>Tabel Medewerkers, Afdelingen. Toon alle afdelingen zonder enkele medewerker<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT department_name\n  FROM employees e\n       RIGHT JOIN departments d ON (e.department_id = d.department_id)\n WHERE first_name IS NULL;\n<\/code><\/pre>\n<p>Tabel Medewerkers. Toon alle medewerkers die niemand onder zich hebben<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT man.first_name\n  FROM employees emp\n       RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)\n WHERE emp.FIRST_NAME IS NULL;\n<\/code><\/pre>\n<p>Tabel Medewerkers, Banen, Afdelingen. Toon medewerkers in het formaat: First_name, Job_title, Department_name.<br \/>\nVoorbeeld:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Verzendafdeling | Verzendmedewerker<br \/>\n<b class=\"spoiler_title\">Oplossing<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, job_title, department_name\n  FROM employees e\n       JOIN jobs j ON (e.job_id = j.job_id)\n       JOIN departments d ON (d.department_id = e.department_id);\n<\/code><\/pre>\n<p>Tabel Medewerkers. Verkrijg een lijst van medewerkers wiens managers in 2005 zijn aangenomen, terwijl deze medewerkers zelf voor 2005 zijn aangenomen<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees. Verkrijg een lijst van werknemers wiens managers in januari van elk jaar zijn begonnen en wiens job_title langer is dan 15 tekens.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Subqueries gebruiken om queries op te lossen<\/b><\/p>\n<p>Tabel Employees. Verkrijg een lijst van werknemers met de langste naam.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees. Verkrijg een lijst van werknemers wiens salaris hoger is dan het gemiddelde salaris van alle werknemers.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees, Departments, Locations. Verkrijg de stad waar werknemers gezamenlijk het minste verdienen.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees. Verkrijg een lijst van werknemers wiens manager meer dan 15000 verdient.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers, Afdelingen. Toon alle afdelingen zonder enkele medewerker<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees. Toon alle werknemers die geen managers zijn.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Werknemers. Toon alle managers die meer dan 6 ondergeschikten hebben.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees, Departaments. Toon werknemers die in de IT-afdeling werken<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers, Banen, Afdelingen. Toon medewerkers in het formaat: First_name, Job_title, Department_name.<br \/>\nVoorbeeld:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Verzendafdeling | Verzendmedewerker<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Medewerkers. Verkrijg een lijst van medewerkers wiens managers in 2005 zijn aangenomen, terwijl deze medewerkers zelf voor 2005 zijn aangenomen<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Tabel Employees. Verkrijg een lijst van werknemers wiens managers in januari van elk jaar zijn begonnen en wiens job_title langer is dan 15 tekens.<br \/>\n<b class=\"spoiler_title\">Oplossing<\/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>Dat is voorlopig alles.<\/b><\/p>\n<p>Ik hoop dat de taken interessant en boeiend waren. <br \/>\nIk zal proberen deze lijst met taken aan te vullen waar mogelijk.<br \/>\nIk sta ook open voor opmerkingen en suggesties.<\/p>\n<p>P.S.: Als iemand een interessante SELECT-opdracht in gedachten heeft, laat het dan weten in de reacties, ik voeg het toe aan de lijst.<\/p>\n<p>We wachten op je in onze<br \/>\n<br \/>Bron: <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.3 - 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\/nl\/blog\/news\/sql-zanimatelnye-zadachki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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. Boeiende opgaven | ProHoster","description":"Hallo, Habr! Al meer dan 3 jaar geef ik SQL-lessen in verschillende trainingscentra, en een van mijn observaties is dat studenten SQL beter beheersen en begrijpen als ze voor een taak worden gesteld, in plaats van alleen maar te leren.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/news\/sql-zanimatelnye-zadachki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/36671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=36671"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/36671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/27465"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=36671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=36671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=36671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}