{"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\/et\/blog\/news\/sql-zanimatelnye-zadachki","title":{"rendered":"SQL. Huvitavad \u00fclesanded.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr!<\/p>\n<p>Juba rohkem kui 3 aastat olen \u00f5petanud SQL-i erinevates koolituskeskustes ning \u00fcks minu t\u00e4helepanekutest on see, et \u00f5pilased omandavad ja m\u00f5istavad SQL-i paremini, kui seada neile \u00fclesanne, mitte lihtsalt r\u00e4\u00e4kida v\u00f5imalustest ja teoreetilistest alustest.<\/p>\n<p>Selles artiklis jagan teiega oma nimekirja \u00fclesannetest, mida ma \u00f5pilastele kodut\u00f6\u00f6ks annan ja mille \u00fcle me erinevaid ajur\u00fcnnakuid peame, mis viib s\u00fcgava ja selge SQL-i m\u00f5istmiseni.<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Huvitavad \u00fclesanded.\" src=\"\/wp-content\/uploads\/2019\/07\/283f472e0c382c0621ffc14e2ac06881.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSQL (\u02c8\u025bs\u02c8kju\u02c8\u025bl; inglise keeles structured query language \u2014 \u2018struktureeritud p\u00e4ringute keel\u2019) on deklaratiivne programmeerimiskeel, mida kasutatakse andmete loomisel, muutmisel ja haldamisel r\u00e4latsioonilises andmebaasis, mida haldab vastav andmebaasi halduss\u00fcsteem. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\">Loe rohkem\u2026 <\/a><\/noindex><\/p>\n<p>SQL-i kohta saab lugeda erinevatest <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/search?q=SQL\">allikatest<\/a><\/noindex>.<br \/>\nSelle artikli eesm\u00e4rk ei ole \u00f5petada teid SQL-i nullist.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNii et, l\u00e4hme!<\/p>\n<p>Kasutame k\u00f5igile tuntud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/oracle\/db-sample-schemas\/tree\/master\/human_resources\">HR skeemi<\/a><\/noindex> Oracle'is koos selle tabelitega (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/comsc\/HR-sample-schema-table-descriptions.html\">Lisateave<\/a><\/noindex>):<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Huvitavad \u00fclesanded.\" src=\"\/wp-content\/uploads\/2019\/07\/b518c0bedd0d7bbeaedbcc4bd95079cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTahan m\u00e4rkida, et vaatame ainult SELECT \u00fclesandeid. Siin pole DML ja DDL \u00fclesandeid.<\/p>\n<h2>\u00dclesanded<\/h2>\n<p>\n<b>Andmete piiramine ja j\u00e4rjestamine<\/b><\/p>\n<p>Tabel Employees. Saage teave k\u00f5igi t\u00f6\u00f6tajate kohta. <br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle nimi on 'David'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE first_name = 'David';\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle job_id on 'IT_PROG'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE job_id = 'IT_PROG';\n<\/code><\/pre>\n<p>Tabel Employees. Saage nimekirja k\u00f5igist t\u00f6\u00f6tajatest 50. osakonnast (department_id) koos palgaga (salary), mis on \u00fcle 4000.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE department_id = 50 AND salary &gt; 4000;\n<\/code><\/pre>\n<p>Tabel Employees. Saage nimekirja k\u00f5igist t\u00f6\u00f6tajatest 20. ja 30. osakonnast (department_id).<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE department_id = 20 OR department_id = 30;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle nime viimane t\u00e4ht on 'a'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE first_name LIKE '%a';\n<\/code><\/pre>\n<p>Tabel Employees. Saage nimekirja k\u00f5igist t\u00f6\u00f6tajatest 50. ja 80. osakonnast (department_id), kellel on boonus (komisjoniprotsendi veerus ei ole v\u00e4\u00e4rtus t\u00fchi).<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE (department_id = 50 OR department_id = 80) AND commission_pct IS NOT NULL;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle nimes on v\u00e4hemalt 2 t\u00e4hte 'n'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE first_name LIKE '%n%n%';\n<\/code><\/pre>\n<p>Tabel Employees. Saage nimekirja k\u00f5igist t\u00f6\u00f6tajatest, kelle nime pikkus on \u00fcle 4 t\u00e4he.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees WHERE first_name LIKE '%_____%';\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kelle palk on vahemikus 8000 kuni 9000 (kaasa arvatud)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE salary BETWEEN 8000 AND 9000;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle nimes on s\u00fcmbol '%'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%%%' ESCAPE '';\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist juhtide ID-dest<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest koos nende ametikohtadega formaadis: Donald(sh_clerk)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;\n<\/code><\/pre>\n<p>\n<b>Kasutades \u00fchekordseid funktsioone v\u00e4ljundi kohandamiseks<\/b><\/p>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kelle nime pikkus on \u00fcle 10 t\u00e4he<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE LENGTH (first_name) &gt; 10;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle nimes on t\u00e4ht 'b' (uurimisel pole t\u00e4htede suurusel vahet)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle nimes on v\u00e4hemalt 2 t\u00e4hte 'a'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kelle palk on 1000 v\u00f5rra jaotatav<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE MOD (salary, 1000) = 0;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada kontakttelefoni numbrist t\u00f6\u00f6taja esimene 3-numbriline number, kui tema number on formaadis XXX.XXX.XXXX<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>Osakondade tabel. Saada osakonna nime esimeses s\u00f5nast need, kelle nimedes on rohkem kui \u00fcks s\u00f5na<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada t\u00f6\u00f6tajate nimed, eemaldades esimesed ja viimased t\u00e4hed nimest<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle nime viimane t\u00e4ht on 'm' ja nime pikkus on suurem kui 5<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>Dual tabel. Saada j\u00e4rgmise reede kuup\u00e4ev<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kes on ettev\u00f5ttes t\u00f6\u00f6tanud \u00fcle 17 aasta<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kelle telefoninumbri viimane number on paaritu ja koosneb 3 numbrist, mis on eraldatud punktiga<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kelle job_id v\u00e4\u00e4rtuses p\u00e4rast s\u00fcmbolit '_' on v\u00e4hemalt 3 t\u00e4hte, kuid see v\u00e4\u00e4rtus p\u00e4rast '_' ei tohi olla 'CLERK'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajad tabel. Saada k\u00f5igi t\u00f6\u00f6tajate nimekiri, kus PHONE_NUMBER v\u00e4\u00e4rtuses asendatakse k\u00f5ik '.' s\u00fcmbolid '-' s\u00fcmbolitega<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>Kasutades konversioonifunktsioone ja tingimuslikke v\u00e4ljendeid<\/b><\/p>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kes alustasid t\u00f6\u00f6d kuu esimesel p\u00e4eval (\u00fcksk\u00f5ik millisel)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'DD') = '01';\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kes alustasid t\u00f6\u00f6d 2008. aastal<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'YYYY') = '2008';\n<\/code><\/pre>\n<p>DUAL tabel. Kuvage homne kuup\u00e4ev formaadis: Homme on kuu teine p\u00e4ev jaanuaris<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (SYSDATE, 'fm\"\"Homme on \"\"Ddspth \"\"p\u00e4ev \"\"Kuu') info\n  FROM DUAL;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest ja iga\u00fche t\u00f6\u00f6le asumise kuup\u00e4ev formaadis: 21. juuni 2007<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, TO_CHAR (hire_date, 'fmddth \"\"p\u00e4ev \"\"Kuu, YYYY') hire_date\n  FROM employees;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kelle palka on suurendatud 20%. Palga kuvamine dollarim\u00e4rgis<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kes alustasid t\u00f6\u00f6d 2007. aasta veebruaris.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>DUAL tabel. Kuvage praegune kuup\u00e4ev + sekund, + minut, + tund, + p\u00e4ev, + kuu, + aasta<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest, kelle t\u00e4ispalk (palk + komisjon %) on vormingus: $24,000.00<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada nimekiri k\u00f5igist t\u00f6\u00f6tajatest ja teave palga boonuste olemasolu kohta (Jah \/ Ei)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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>T\u00f6\u00f6tajate tabel. Saada iga t\u00f6\u00f6taja palga tase: Alla 5000 loetakse madalaks tasemeks, 5000 v\u00f5i enam ja alla 10000 loetakse normaalseks tasemeks, 10000 v\u00f5i enam loetakse k\u00f5rgeks tasemeks<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name,\n       salary,\n       CASE\n           WHEN salary = 5000 AND salary &lt; 10000 THEN &#039;Normaalne&#039;\n           ELSE &#039;K\u00f5rge&#039;\n       END salary_level\n  FROM employees;\n<\/code><\/pre>\n<p>Tabel Countries. N\u00e4idata iga riigi piirkonda, kus ta asub: 1-Euroopa, 2-Ameerika, 3-Aasia, 4-Aafrika (ilma Joinita)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT country_name country,\n       DECODE (region_id,\n               1, 'Euroopa',\n               2, 'Ameerika',\n               3, 'Aasia',\n               4, 'Aafrika',\n               'Tundmatu')\n           region\n  FROM countries;\n\nSELECT country_name\n           country,\n       CASE region_id\n           WHEN 1 THEN 'Euroopa'\n           WHEN 2 THEN 'Ameerika'\n           WHEN 3 THEN 'Aasia'\n           WHEN 4 THEN 'Aafrika'\n           ELSE 'Tundmatu'\n       END\n           region\n  FROM countries;\n<\/code><\/pre>\n<p>\n<b>Aruandlus Kogutud Andmete Kohta Kasutades R\u00fchma Funktsioone<\/b><\/p>\n<p>Tabel Employees. Saada aruandlus department_id kaupa, minimaalse ja maksimaalse palgaga, varase ja hilise t\u00f6\u00f6leasumise kuup\u00e4evaga ning t\u00f6\u00f6tajate arvuga. Sordima t\u00f6\u00f6tajate arvu j\u00e4rgi (kahanevas j\u00e4rjekorras)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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. Kui palju t\u00f6\u00f6tajaid, kelle nimed algavad sama t\u00e4hega? Sordima arvu j\u00e4rgi. N\u00e4idata ainult neid, kus arv on suurem kui 1<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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. Kui palju t\u00f6\u00f6tajaid t\u00f6\u00f6tab samas osakonnas ja saab sama palka?<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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. Saada aruandlus, kui palju t\u00f6\u00f6tajaid v\u00f5eti t\u00f6\u00f6le igal n\u00e4dalap\u00e4eval. Sordima arvu j\u00e4rgi<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)\n    FROM employees\nGROUP BY TO_CHAR (hire_Date, 'Day')\nORDER BY 2 DESC;\n<\/code><\/pre>\n<p>Tabel Employees. Saada aruandlus, kui palju t\u00f6\u00f6tajaid v\u00f5eti t\u00f6\u00f6le aastate kaupa. Sordima arvu j\u00e4rgi<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)\n    FROM employees\nGROUP BY TO_CHAR (hire_date, 'YYYY');\n<\/code><\/pre>\n<p>Tabel Employees. Saada aruanne, kui palju osakondi on, kus on t\u00f6\u00f6tajad<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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. Saada osakondade loetelu, kus t\u00f6\u00f6tab rohkem kui 30 t\u00f6\u00f6tajat<br \/>\n<b class=\"spoiler_title\">Lahendus<\/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. Saada osakondade loetelu ja \u00fcmardatud keskmine palk t\u00f6\u00f6tajatele igas osakonnas. <br \/>\n<b class=\"spoiler_title\">Lahendus<\/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. Saada loetelu region_id summa k\u00f5igist letters, mis on country_name, kus on rohkem kui 60<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI region_id\n    FROM countries\nGROUP BY region_id\n  HAVING SUM (LENGTH (country_name)) &gt; 60;\n<\/code><\/pre>\n<p>Tabel Employees. Saage department_id, kus t\u00f6\u00f6tavad mitmed (&gt;1) job_id t\u00f6\u00f6tajad<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI department_id\n    FROM employees\nGROUP BY department_id\n  HAVING COUNT (DISTINCT job_id) &gt; 1;\n<\/code><\/pre>\n<p>Tabel Employees. Saage manager_id, kelle alluvate arv on suurem kui 5 ja k\u00f5igi tema alluvate palkade summa suurem kui 50000<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI 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 Employees. Saage manager_id, kelle k\u00f5igi tema alluvate keskmine palk j\u00e4\u00e4b vahemikku 6000 kuni 9000 ja kes ei saa boonuseid (commission_pct t\u00fchi)<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI 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>T\u00f6\u00f6tajad tabel. Saada maksimaalne palk k\u00f5igilt t\u00f6\u00f6tajatelt, kelle job_id l\u00f5peb s\u00f5naga 'CLERK'<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI MAX (salary) max_salary\n  FROM employees\n WHERE job_id LIKE '%CLERK';\n\nVALI MAX (salary) max_salary\n  FROM employees\n WHERE SUBSTR (job_id, -5) = 'CLERK';\n<\/code><\/pre>\n<p>Tabel Employees. Saage maksimaalne palk k\u00f5ikide osakondade keskmiste palkade seas<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI MAX (AVG (salary))\n    FROM employees\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabel Employees. Saage t\u00f6\u00f6tajate arv, kellel on sama nime pikkus. N\u00e4idake vaid neid, kelle nime pikkus on suurem kui 5 ja kellel on sellise nimega t\u00f6\u00f6tajaid rohkem kui 20. Sorteerige nime pikkuse alusel<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI 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  VALI 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>Andmete kuvamine mitmest tabelist kasutades JOIN-e<\/b><\/p>\n<p>Tabel Employees, Departaments, Locations, Countries, Regions. Saage piirkondade nimekiri ja t\u00f6\u00f6tajate arv igas piirkonnas<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI 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 Employees, Departaments, Locations, Countries, Regions. Saage \u00fcksikasjalik teave iga t\u00f6\u00f6taja kohta:<br \/>\nFirst_name, Last_name, Departament, Job, Street, Country, Region<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI 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 Employees. Kuvage k\u00f5ik juhid, kelle alluvate arv \u00fcletab 6 t\u00f6\u00f6tajat<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">  VALI 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>T\u00f6\u00f6tajate tabel. N\u00e4ita k\u00f5iki t\u00f6\u00f6tajaid, kellel ei ole \u00fclemust.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI 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\nVALI first_name\n  FROM employees\n WHERE manager_id IS NULL;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel, T\u00f6\u00f6ajalugu. T\u00f6\u00f6tajate tabelis on k\u00f5ik t\u00f6\u00f6tajad. T\u00f6\u00f6ajalugu tabelis on t\u00f6\u00f6tajad, kes on ettev\u00f5tte lahkunud. Saada aruanne k\u00f5igi t\u00f6\u00f6tajate ja nende staatuse kohta ettev\u00f5ttes (T\u00f6\u00f6tavad v\u00f5i lahkusid ettev\u00f5ttest lahkumiskuup\u00e4evaga).<br \/>\nN\u00e4ide:<br \/>\nfirst_name | staatus<br \/>\nJennifer | Lahkus ettev\u00f5ttest 31. detsembril 2006.<br \/>\nClara | Praegu t\u00f6\u00f6tav<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI first_name,\n       NVL2 (\n           end_date,\n           TO_CHAR (end_date, 'fm\"\"Lahkunud ettev\u00f5ttest\"\" DD \"\"kuup\u00e4eval\"\" Kuu, YYYY'),\n           'Praegu t\u00f6\u00f6tav')\n           staatus\n  FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel, Osakonnad, Asukohad, Riigid, Regioonid. Saada nimekiri t\u00f6\u00f6tajatest, kes elavad Euroopas (region_name).<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\"> VALI 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 = 'Europe';\n \n VALI 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 = 'Europe';\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel, Osakonnad. N\u00e4ita k\u00f5iki osakondi, kus t\u00f6\u00f6tab rohkem kui 30 t\u00f6\u00f6tajat.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI 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>T\u00f6\u00f6tajate tabel, Osakonnad. N\u00e4ita k\u00f5iki t\u00f6\u00f6tajaid, kes ei kuulu \u00fchtegi osakonda.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI 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\nVALI first_name\n  FROM employees\n WHERE department_id IS NULL;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel, Osakonnad. N\u00e4ita k\u00f5iki osakondi, kus ei ole \u00fchtegi t\u00f6\u00f6tajat.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI 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>T\u00f6\u00f6tajate tabel. N\u00e4ita k\u00f5iki t\u00f6\u00f6tajaid, kellel ei ole alluvaid.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI 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>T\u00f6\u00f6tajate tabel, T\u00f6\u00f6koht, Osakonnad. N\u00e4ita t\u00f6\u00f6tajaid vormingus: First_name, Job_title, Department_name.<br \/>\nN\u00e4ide:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Laondus | Klientlaondus<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI 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>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kelle \u00fclemused on t\u00f6\u00f6le asunud 2005. aastal, kuid need t\u00f6\u00f6tajad ise on t\u00f6\u00f6le asunud enne 2005. aastat.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI emp.*\n  KASUTA t\u00f6\u00f6tajad emp LIITU t\u00f6\u00f6tajatega man KAS (emp.manager_id = man.employee_id)\n KUS     TO_CHAR (man.hire_date, 'YYYY') = '2005'\n       JA emp.hire_date &lt; TO_DATE (&#039;01012005&#039;, &#039;DDMMYYYY&#039;);\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kelle juhid alustasid t\u00f6\u00f6d jaanuaris igal aastal ja kelle ametinimetuse pikkus on \u00fcle 15 t\u00e4hem\u00e4rgi.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI emp.*\n  KASUTA t\u00f6\u00f6tajad emp\n       LIITU t\u00f6\u00f6tajatega man KAS (emp.manager_id = man.employee_id)\n       LIITU t\u00f6\u00f6dega j KAS (emp.job_id = j.job_id)\n KUS TO_CHAR (man.hire_date, 'MM') = '01' JA LENGTH (j.job_title) &gt; 15;\n<\/code><\/pre>\n<p>\n<b>Alamklauslite kasutamine p\u00e4ringute lahendamiseks<\/b><\/p>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kellel on k\u00f5ige pikem nimi.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad\n KUS LENGTH (first_name) =\n       (VALI MAX (LENGTH (first_name)) KASUTA t\u00f6\u00f6tajad);\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kelle palk on k\u00f5rgem kui k\u00f5igi t\u00f6\u00f6tajate keskmine palk.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad\n KUS salary &gt; (VALI AVG (salary) KASUTA t\u00f6\u00f6tajad);\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate, osakondade, asukohtade tabel. Saada linn, kus t\u00f6\u00f6tajad teenivad kokku k\u00f5ige v\u00e4hem.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI linn\n    KASUTA t\u00f6\u00f6tajad e\n         LIITU osakondadega d KAS (e.department_id = d.department_id)\n         LIITU asukohtadega l KAS (d.location_id = l.location_id)\nR\u00dcHMITA LINN\n  HAVING SUM (salary) =\n         (  VALI MIN (SUM (salary))\n              KASUTA t\u00f6\u00f6tajad e\n                   LIITU osakondadega d KAS (e.department_id = d.department_id)\n                   LIITU asukohtadega l KAS (d.location_id = l.location_id)\n          R\u00dcHMITA LINN);\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kelle juhid teenivad rohkem kui 15000.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad\n KUS manager_id IN (VALI employee_id\n                        KASUTA t\u00f6\u00f6tajad\n                       KUS salary &gt; 15000)\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel, Osakonnad. N\u00e4ita k\u00f5iki osakondi, kus ei ole \u00fchtegi t\u00f6\u00f6tajat.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA osakonnad\n KUS department_id NOT IN (VALI department_id\n                               KASUTA t\u00f6\u00f6tajad\n                              KUS department_id IS NOT NULL);\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. N\u00e4ita k\u00f5iki t\u00f6\u00f6tajaid, kes ei ole juhid.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad\n KUS employee_id NOT IN (VALI manager_id\n                             KASUTA t\u00f6\u00f6tajad\n                            KUS manager_id IS NOT NULL)\n<\/code><\/pre>\n<p>Tabel Employees. Kuvage k\u00f5ik juhid, kelle alluvate arv \u00fcletab 6 t\u00f6\u00f6tajat<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad e\n KUS (VALI COUNT (*)\n          KASUTA t\u00f6\u00f6tajad\n         KUS manager_id = e.employee_id) &gt; 6;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate, osakondade tabel. N\u00e4ita t\u00f6\u00f6tajaid, kes t\u00f6\u00f6tavad IT osakonnas.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad\n KUS department_id = (VALI department_id\n                          KASUTA osakonnad\n                         KUS department_name = 'IT');\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel, T\u00f6\u00f6koht, Osakonnad. N\u00e4ita t\u00f6\u00f6tajaid vormingus: First_name, Job_title, Department_name.<br \/>\nN\u00e4ide:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Laondus | Klientlaondus<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI first_name,\n       (VALI job_title\n          KASUTA t\u00f6\u00f6de\n         KUS job_id = e.job_id)\n           job_title,\n       (VALI department_name\n          KASUTA osakonnad\n         KUS department_id = e.department_id)\n           department_name\n  KASUTA t\u00f6\u00f6tajad e;\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kelle \u00fclemused on t\u00f6\u00f6le asunud 2005. aastal, kuid need t\u00f6\u00f6tajad ise on t\u00f6\u00f6le asunud enne 2005. aastat.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad\n KUS     manager_id IN (VALI employee_id\n                            KASUTA t\u00f6\u00f6tajad\n                           KUS TO_CHAR (hire_date, 'YYYY') = '2005')\n       JA hire_date &lt; TO_DATE (&#039;01012005&#039;, &#039;DDMMYYYY&#039;);\n<\/code><\/pre>\n<p>T\u00f6\u00f6tajate tabel. Saada nimekiri t\u00f6\u00f6tajatest, kelle juhid alustasid t\u00f6\u00f6d jaanuaris igal aastal ja kelle ametinimetuse pikkus on \u00fcle 15 t\u00e4hem\u00e4rgi.<br \/>\n<b class=\"spoiler_title\">Lahendus<\/b><\/p>\n<pre><code class=\"sql\">VALI *\n  KASUTA t\u00f6\u00f6tajad e\n KUS     manager_id IN (VALI employee_id\n                            KASUTA t\u00f6\u00f6tajad\n                           KUS TO_CHAR (hire_date, 'MM') = '01')\n       JA (VALI LENGTH (job_title)\n              KASUTA t\u00f6\u00f6de\n             KUS job_id = e.job_id) &gt; 15;\n<\/code><\/pre>\n<p>\n<b>Sellega on k\u00f5ik.<\/b><\/p>\n<p>Loodan, et \u00fclesanded olid huvitavad ja kaasahaaravad. <br \/>\nP\u00fc\u00fcan seda \u00fclesannete nimekirja vajadusel t\u00e4iendada.<br \/>\nOlen ka avatud igasuguste kommentaaride ja ettepanekute suhtes.<\/p>\n<p>P.S.: Kui kellelgi tuleb meelde huvitav \u00fclesanne SELECT-i kohta, kirjutage kommentaaridesse, lisan nimekirja.<\/p>\n<p>Ait\u00e4h.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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. Huvitavad \u00fclesanded | ProHoster","description":"Tere, Habr! Olen juba \u00fcle 3 aasta \u00f5petanud SQL-i erinevates koolituskeskustes, ja \u00fcks minu t\u00e4helepanekutest on see, et \u00f5pilased omandavad ja m\u00f5istavad SQL-i paremini, kui neile esitatakse \u00fclesanne, mitte lihtsalt.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/news\/sql-zanimatelnye-zadachki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/36671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=36671"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/36671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/27465"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=36671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=36671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=36671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}