{"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\/ro\/blog\/news\/sql-zanimatelnye-zadachki","title":{"rendered":"SQL. Probleme interesante","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bun\u0103, Habr!<\/p>\n<p>De mai bine de 3 ani, predau SQL \u00een diferite centre de formare, iar una dintre observa\u021biile mele este c\u0103 studen\u021bii \u00eenva\u021b\u0103 \u0219i \u00een\u021beleg SQL mai bine atunci c\u00e2nd li se pune o sarcin\u0103, \u00een loc s\u0103 li se vorbeasc\u0103 doar despre posibilit\u0103\u021bi \u0219i fundamente teoretice.<\/p>\n<p>\u00cen acest articol, voi \u00eemp\u0103rt\u0103\u0219i cu voi lista mea de sarcini pe care le dau studen\u021bilor ca tem\u0103 de lucru \u0219i asupra c\u0103rora organiz\u0103m diverse sesiuni de brainstorming, ceea ce duce la o \u00een\u021belegere profund\u0103 \u0219i clar\u0103 a SQL.<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Probleme interesante\" src=\"\/wp-content\/uploads\/2019\/07\/283f472e0c382c0621ffc14e2ac06881.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSQL (\u02c8\u025bs\u02c8kju\u02c8\u025bl; engl. structured query language \u2014 \u201elimbaj de interogare structurat\u201d) este un limbaj de programare declarativ, utilizat pentru crearea, modificarea \u0219i gestionarea datelor \u00eentr-o baz\u0103 de date rela\u021bional\u0103, administrat\u0103 de un sistem de gestionare a bazelor de date corespunz\u0103tor. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\">Mai multe informa\u021bii\u2026 <\/a><\/noindex><\/p>\n<p>Pute\u021bi citi despre SQL din diferite surse. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/search?q=SQL\">surse<\/a><\/noindex>.<br \/>\nAcest articol nu are ca scop s\u0103 v\u0103 \u00eenve\u021be SQL de la zero.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nA\u0219adar, s\u0103 \u00eencepem.<\/p>\n<p>Vom folosi binecunoscutul <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/oracle\/db-sample-schemas\/tree\/master\/human_resources\">schema HR<\/a><\/noindex> \u00een Oracle cu tabelele sale (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/comsc\/HR-sample-schema-table-descriptions.html\">Afl\u0103 mai multe<\/a><\/noindex>):<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Probleme interesante\" src=\"\/wp-content\/uploads\/2019\/07\/b518c0bedd0d7bbeaedbcc4bd95079cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMen\u021bionez c\u0103 vom analiza doar sarcinile pe SELECT. Nu sunt incluse sarcini pe DML \u0219i DDL.<\/p>\n<h2>Sarcini<\/h2>\n<p>\n<b>Restric\u021bionarea \u0219i sortarea datelor<\/b><\/p>\n<p>Tabelul Employees. Ob\u021bine\u021bi o list\u0103 cu informa\u021bii despre to\u021bi angaja\u021bii <br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees\n<\/code><\/pre>\n<p>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii cu numele 'David'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name = 'David';\n<\/code><\/pre>\n<p>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii a c\u0103ror job_id este 'IT_PROG'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE job_id = 'IT_PROG'\n<\/code><\/pre>\n<p>Tabelul Employees. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii din departamentul 50 (department_id) cu salariul (salary) mai mare de 4000<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii din departamentele 20 \u0219i 30 (department_id)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii al c\u0103ror nume se termin\u0103 cu litera 'a'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%a';\n<\/code><\/pre>\n<p>Tabelul Employees. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii din departamentele 50 \u0219i 80 (department_id) care au bonus (valoarea din coloana commission_pct nu este goal\u0103)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii ai c\u0103ror nume con\u021bin cel pu\u021bin 2 litere 'n'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%n%n%';\n<\/code><\/pre>\n<p>Tabelul Employees. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii ale c\u0103ror nume au mai mult de 4 litere<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%_____%';\n<\/code><\/pre>\n<p>Tabelul Employees. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii ale c\u0103ror salarii se afl\u0103 \u00eentre 8000 \u0219i 9000 (inclusiv)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE salary BETWEEN 8000 AND 9000;\n<\/code><\/pre>\n<p>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii ai c\u0103ror nume con\u021bin simbolul '%'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%%%' ESCAPE '';\n<\/code><\/pre>\n<p>Tabela Employees. Ob\u021bine lista tuturor ID-urilor managerilor<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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 Employees. Ob\u021bine lista angaja\u021bilor cu pozi\u021biile lor \u00een formatul: Donald(sh_clerk)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;\n<\/code><\/pre>\n<p>\n<b>Folosind func\u021bii cu un singur r\u00e2nd pentru a personaliza ie\u0219irea<\/b><\/p>\n<p>Tabela Employees. Ob\u021bine lista tuturor angaja\u021bilor a c\u0103ror lungime a numelui dep\u0103\u0219e\u0219te 10 litere<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE LENGTH (first_name) &gt; 10;\n<\/code><\/pre>\n<p>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii ai c\u0103ror nume con\u021bin litera 'b' (indiferent de caz)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii ai c\u0103ror nume con\u021bin cel pu\u021bin 2 litere 'a'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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 Employees. Ob\u021bine lista tuturor angaja\u021bilor ale c\u0103ror salarii sunt multipli de 1000<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE MOD (salary, 1000) = 0;\n<\/code><\/pre>\n<p>Tabela Employees. Ob\u021bine primul num\u0103r de 3 cifre din num\u0103rul de telefon al angajatului, dac\u0103 num\u0103rul s\u0103u este \u00een formatul XXX.XXX.XXXX<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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 Departments. Ob\u021bine primul cuv\u00e2nt din numele departamentului pentru cei care au mai multe cuvinte \u00een denumire<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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 Employees. Ob\u021bine numele angaja\u021bilor f\u0103r\u0103 prima \u0219i ultima liter\u0103 din nume<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii al c\u0103ror nume se termin\u0103 cu litera 'm' \u0219i are o lungime mai mare de 5 caractere<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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. Ob\u021bine data urm\u0103toarei zile de vineri<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;\n<\/code><\/pre>\n<p>Tabela Employees. Ob\u021bine lista tuturor angaja\u021bilor care lucreaz\u0103 \u00een companie de mai bine de 17 ani<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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 Employees. Ob\u021bine lista tuturor angaja\u021bilor ale c\u0103ror ultime cifre ale num\u0103rului de telefon sunt impari \u0219i constau din 3 cifre separate prin punct<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii a c\u0103ror job_id are dup\u0103 semnul '_' cel pu\u021bin 3 caractere, dar acest lucru nu trebuie s\u0103 fie 'CLERK'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi o list\u0103 cu to\u021bi angaja\u021bii \u00eenlocuind \u00een num\u0103rul de telefon toate '.' cu '-'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Folosind func\u021bii de conversie \u0219i expresii condi\u021bionale<\/b><\/p>\n<p>Tabel\u0103 Employees. Ob\u021bine\u021bi lista tuturor angaja\u021bilor care au \u00eenceput munca \u00een prima zi a oric\u0103rei luni<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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\u0103 Employees. Ob\u021bine\u021bi lista tuturor angaja\u021bilor care au \u00eenceput munca \u00een anul 2008<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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\u0103 DUAL. Afi\u0219a\u021bi data de m\u00e2ine \u00een format: M\u00e2ine este a doua zi din ianuarie<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (SYSDATE, 'fm\"\"M\u00e2ine este \"\"Ddspth \"\"ziua din\"\" Lunar')     info\n  FROM DUAL;\n<\/code><\/pre>\n<p>Tabel\u0103 Employees. Ob\u021bine\u021bi lista tuturor angaja\u021bilor \u0219i data \u00eenceperii muncii fiec\u0103ruia \u00een format: 21st of June, 2007<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, TO_CHAR (hire_date, 'fmddth \"\"din\"\" Lunar, YYYY') hire_date\n  FROM employees;\n<\/code><\/pre>\n<p>Tabel\u0103 Employees. Ob\u021bine\u021bi lista angaja\u021bilor cu salarii m\u0103rite cu 20%. Salariul s\u0103 fie afi\u0219at cu semnul dolarului<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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\u0103 Employees. Ob\u021bine\u021bi lista tuturor angaja\u021bilor care au \u00eenceput munca \u00een februarie 2007.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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\u0103 DUAL. Afi\u0219a\u021bi data curent\u0103, + secund\u0103, + minut, + or\u0103, + zi, + lun\u0103, + an<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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\u0103 Employees. Ob\u021bine\u021bi lista tuturor angaja\u021bilor cu salariile complete (salary + commission_pct(%)) \u00een format: $24,000.00<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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\u0103 Employees. Ob\u021bine\u021bi lista tuturor angaja\u021bilor \u0219i informa\u021biile despre bonusurile la salariu (Yes\/No)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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\u0103 Employees. Ob\u021bine\u021bi nivelul salarial al fiec\u0103rui angajat: Mai pu\u021bin de 5000 este considerat nivel sc\u0103zut, 5000 sau mai mult \u0219i mai pu\u021bin de 10000 este considerat nivel normal, 10000 sau mai mult este considerat nivel ridicat<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name,\n       salary,\n       CASE\n           WHEN salary = 5000 AND salary &lt; 10000 THEN &#039;Normal&#039;\n           ELSE &#039;High&#039;\n       END salary_level\n  FROM employees;\n<\/code><\/pre>\n<p>Tabel\u0103 Countries. Pentru fiecare \u021bar\u0103 ar\u0103ta\u021bi regiunea \u00een care se afl\u0103: 1-Europe, 2-America, 3-Asia, 4-Africa (f\u0103r\u0103 Join)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT country_name country,\n       DECODE (region_id,\n               1, 'Europa',\n               2, 'America',\n               3, 'Asia',\n               4, 'Africa',\n               'Necunoscut')\n           region\n  FROM countries;\n\nSELECT country_name\n           country,\n       CASE region_id\n           WHEN 1 THEN 'Europa'\n           WHEN 2 THEN 'America'\n           WHEN 3 THEN 'Asia'\n           WHEN 4 THEN 'Africa'\n           ELSE 'Necunoscut'\n       END\n           region\n  FROM countries;\n<\/code><\/pre>\n<p>\n<b>Raportarea datelor agregate folosind func\u021biile de grup<\/b><\/p>\n<p>Tabelul Employees. Ob\u021bine\u021bi un raport pe department_id cu salariul minim \u0219i maxim, cu data de angajare timpurie \u0219i t\u00e2rzie \u0219i cu num\u0103rul de angaja\u021bi. S\u0103 fie sortat dup\u0103 num\u0103rul de angaja\u021bi (\u00een ordine descresc\u0103toare)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. C\u00e2\u021bi angaja\u021bi au numele care \u00eencepe cu aceea\u0219i liter\u0103? S\u0103 fie sortat dup\u0103 num\u0103r. S\u0103 fie afi\u0219ate doar cele unde num\u0103rul este mai mare de 1<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. C\u00e2\u021bi angaja\u021bi lucreaz\u0103 \u00een acela\u0219i departament \u0219i au salarii identice?<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi un raport cu c\u00e2\u021bi angaja\u021bi au fost angaja\u021bi \u00een fiecare zi a s\u0103pt\u0103m\u00e2nii. S\u0103 fie sortat dup\u0103 num\u0103r<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi un raport cu c\u00e2\u021bi angaja\u021bi au fost angaja\u021bi de-a lungul anilor. S\u0103 fie sortat dup\u0103 num\u0103r<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi num\u0103rul de departamente \u00een care exist\u0103 angaja\u021bi<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi lista department_id unde lucreaz\u0103 mai mult de 30 de angaja\u021bi<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi lista department_id \u0219i salariul mediu rotunjit al angaja\u021bilor din fiecare departament. <br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Countries. Ob\u021bine\u021bi lista region_id suma tuturor literelor din toate country_name unde este mai mare de 60<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi lista department_id \u00een care lucreaz\u0103 angaja\u021bi cu mai multe job_id-uri (&gt;1)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine lista manager_id-urilor care au mai mult de 5 subordona\u021bi \u0219i suma tuturor salariilor subordona\u021bilor s\u0103i dep\u0103\u0219e\u0219te 50000<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine lista manager_id-urilor ale c\u0103ror salarii medii ale tuturor subordona\u021bilor se afl\u0103 \u00eentre 6000 \u0219i 9000 \u0219i care nu primesc bonusuri (commission_pct este null)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine\u021bi salariul maxim de la to\u021bi angaja\u021bii a c\u0103ror job_id se termin\u0103 cu cuv\u00e2ntul 'CLERK'<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine salariul maxim dintre toate salariile medii pe departamente<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">  SELECT MAX (AVG (salary))\n    FROM employees\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabelul Employees. Ob\u021bine num\u0103rul angaja\u021bilor cu acela\u0219i num\u0103r de litere \u00een nume. Arat\u0103 doar cei cu lungimea numelui mai mare de 5 \u0219i num\u0103rul angaja\u021bilor cu acest nume mai mare de 20. Sorteaz\u0103 dup\u0103 lungimea numelui<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Afi\u0219area datelor din mai multe tabele folosind Joins<\/b><\/p>\n<p>Tabelul Employees, Departaments, Locations, Countries, Regions. Ob\u021bine lista regiunilor \u0219i num\u0103rul angaja\u021bilor din fiecare regiune<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees, Departaments, Locations, Countries, Regions. Ob\u021bine informa\u021bii detaliate despre fiecare angajat:<br \/>\nFirst_name, Last_name, Departament, Job, Street, Country, Region<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Arat\u0103 to\u021bi managerii care au \u00een subordine mai mult de 6 angaja\u021bi<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Arat\u0103 to\u021bi angaja\u021bii care nu au pe nimeni \u00een subordine<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees, Job_history. Tabelul Employee con\u021bine to\u021bi angaja\u021bii. Tabelul Job_history con\u021bine angaja\u021bii care au p\u0103r\u0103sit compania. Ob\u021bine\u021bi un raport despre to\u021bi angaja\u021bii \u0219i statutul lor \u00een companie (Lucreaz\u0103 sau a p\u0103r\u0103sit compania cu data plec\u0103rii)<br \/>\nExemplu:<br \/>\nfirst_name | status<br \/>\nJennifer | A p\u0103r\u0103sit compania pe 31 decembrie 2006<br \/>\nClara | Lucreaz\u0103 \u00een prezent<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name,\n       NVL2 (\n           end_date,\n           TO_CHAR (end_date, 'fm\"\"A p\u0103r\u0103sit compania pe\"\" DD \"\"din\"\" Luna, YYYY'),\n           'Lucreaz\u0103 \u00een prezent')\n           status\n  FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);\n<\/code><\/pre>\n<p>Tabelul Employees, Departaments, Locations, Countries, Regions. Ob\u021bine\u021bi lista angaja\u021bilor care locuiesc \u00een Europa (region_name)<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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 = 'Europe';\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 = 'Europe';\n<\/code><\/pre>\n<p>Tabelul Employees, Departaments. Afi\u0219a\u021bi toate departamentele \u00een care lucreaz\u0103 mai mult de 30 de angaja\u021bi<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees, Departaments. Afi\u0219a\u021bi to\u021bi angaja\u021bii care nu fac parte din niciun departament<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees, Departaments. Afi\u0219a\u021bi toate departamentele \u00een care nu exist\u0103 niciun angajat<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Afi\u0219a\u021bi to\u021bi angaja\u021bii care nu au pe nimeni \u00een subordine<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees, Jobs, Departaments. Afi\u0219a\u021bi angaja\u021bii \u00een format: First_name, Job_title, Department_name.<br \/>\nExemplu:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Shipping | Clerk Shipping<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi lista angaja\u021bilor ale c\u0103ror manageri s-au angajat \u00een 2005, dar ace\u0219ti angaja\u021bi s-au angajat \u00eenainte de 2005<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine lista angaja\u021bilor ai c\u0103ror manageri au fost angaja\u021bi \u00een luna ianuarie a oric\u0103rui an \u0219i lungimea titulului de munc\u0103 al acestor angaja\u021bi este mai mare de 15 caractere.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Folosind Subinterog\u0103ri pentru a Rezolva Interog\u0103rile<\/b><\/p>\n<p>Tabelul Angaja\u021bilor. Ob\u021bine lista angaja\u021bilor cu cel mai lung nume.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine lista angaja\u021bilor cu un salariu mai mare dec\u00e2t salariul mediu al tuturor angaja\u021bilor.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor, Departamentelor, Loca\u021biilor. Ob\u021bine ora\u0219ul \u00een care angaja\u021bii c\u00e2\u0219tig\u0103 \u00een total cel mai pu\u021bin.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine lista angaja\u021bilor care au manageri cu salarii mai mari de 15000.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees, Departaments. Afi\u0219a\u021bi toate departamentele \u00een care nu exist\u0103 niciun angajat<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Afi\u0219eaz\u0103 to\u021bi angaja\u021bii care nu sunt manageri.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Arat\u0103 to\u021bi managerii care au \u00een subordine mai mult de 6 angaja\u021bi<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor, Departamentelor. Afi\u0219eaz\u0103 angaja\u021bii care lucreaz\u0103 \u00een departamentul IT.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees, Jobs, Departaments. Afi\u0219a\u021bi angaja\u021bii \u00een format: First_name, Job_title, Department_name.<br \/>\nExemplu:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Shipping | Clerk Shipping<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Employees. Ob\u021bine\u021bi lista angaja\u021bilor ale c\u0103ror manageri s-au angajat \u00een 2005, dar ace\u0219ti angaja\u021bi s-au angajat \u00eenainte de 2005<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Tabelul Angaja\u021bilor. Ob\u021bine lista angaja\u021bilor ai c\u0103ror manageri au fost angaja\u021bi \u00een luna ianuarie a oric\u0103rui an \u0219i lungimea titulului de munc\u0103 al acestor angaja\u021bi este mai mare de 15 caractere.<br \/>\n<b class=\"spoiler_title\">Solu\u021bie<\/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>Asta e tot pentru acum.<\/b><\/p>\n<p>Sper c\u0103 sarcinile au fost interesante \u0219i captivante. <br \/>\nVoi completa acest list\u0103 de sarcini pe c\u00e2t posibil.<br \/>\nDe asemenea, sunt deschis la orice observa\u021bii \u0219i sugestii.<\/p>\n<p>P.S.: Dac\u0103 cineva are o idee interesant\u0103 pentru o problem\u0103 pe SELECT, v\u0103 rog s\u0103 scrie\u021bi \u00een comentarii, o voi ad\u0103uga pe lista.<\/p>\n<p>Mul\u021bumim.<br \/>\n<br \/>Sursa: <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.2.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\/ro\/blog\/news\/sql-zanimatelnye-zadachki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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. Probleme interesante | ProHoster","description":"Salut, Habr! De mai bine de 3 ani, predau SQL \u00een diferite centre de formare, iar una dintre observa\u021biile mele este c\u0103 studen\u021bii \u00eenva\u021b\u0103 \u0219i \u00een\u021beleg SQL mai bine atunci c\u00e2nd li se ofer\u0103 o sarcin\u0103, nu doar a\u0219a.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/sql-zanimatelnye-zadachki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/36671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=36671"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/27465"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=36671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=36671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=36671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}