{"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\/it\/blog\/news\/sql-zanimatelnye-zadachki","title":{"rendered":"SQL. Problemi interessanti","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr!<\/p>\n<p>Da oltre 3 anni insegno SQL in diversi centri di formazione, e una delle mie osservazioni \u00e8 che gli studenti apprendono e comprendono meglio l'SQL se viene presentato loro un compito, piuttosto che semplicemente raccontare le possibilit\u00e0 e le basi teoriche.<\/p>\n<p>In questo articolo condivider\u00f2 con voi la mia lista di compiti che assegno agli studenti come compiti a casa e sui quali facciamo vari brainstorming, il che porta a una comprensione profonda e chiara dell'SQL.<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Problemi interessanti\" src=\"\/wp-content\/uploads\/2019\/07\/283f472e0c382c0621ffc14e2ac06881.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSQL (\u02c8\u025bs\u02c8kju\u02c8\u025bl; inglese: structured query language \u2014 \"linguaggio di query strutturato\") \u2014 \u00e8 un linguaggio di programmazione dichiarativo utilizzato per creare, modificare e gestire dati in un database relazionale, controllato dal corrispondente sistema di gestione dei database. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\">Ulteriori informazioni\u2026 <\/a><\/noindex><\/p>\n<p>Puoi leggere di SQL da diverse <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/search?q=SQL\">fonti<\/a><\/noindex>.<br \/>\nQuesto articolo non ha l'obiettivo di insegnarti SQL da zero.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nBene, iniziamo.<\/p>\n<p>Useremo la famosa <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/oracle\/db-sample-schemas\/tree\/master\/human_resources\">schema HR<\/a><\/noindex> in Oracle con le sue tabelle (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/comsc\/HR-sample-schema-table-descriptions.html\">Ulteriori informazioni<\/a><\/noindex>):<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Problemi interessanti\" src=\"\/wp-content\/uploads\/2019\/07\/b518c0bedd0d7bbeaedbcc4bd95079cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVoglio sottolineare che considereremo solo compiti su SELECT. Non ci sono compiti su DML e DDL.<\/p>\n<h2>Problemi<\/h2>\n<p>\n<b>Limitare e Ordinare i Dati<\/b><\/p>\n<p>Tabella Employees. Ottenere un elenco con informazioni su tutti i dipendenti <br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere l'elenco di tutti i dipendenti il cui nome \u00e8 'David'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name = 'David';\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere l'elenco di tutti i dipendenti con job_id uguale a 'IT_PROG'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE job_id = 'IT_PROG'\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere un elenco di tutti i dipendenti del 50\u00b0 dipartimento (department_id) con stipendio (salary) superiore a 4000<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere un elenco di tutti i dipendenti del 20\u00b0 e del 30\u00b0 dipartimento (department_id)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti la cui ultima lettera nel nome \u00e8 'a'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%a';\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere un elenco di tutti i dipendenti del 50\u00b0 e dell'80\u00b0 dipartimento (department_id) che hanno bonus (valore nella colonna commission_pct non vuoto)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti i cui nomi contengono almeno 2 lettere 'n'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%n%n%';\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere un elenco di tutti i dipendenti i cui nomi hanno una lunghezza superiore a 4 lettere<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%_____%';\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere l'elenco di tutti i dipendenti la cui retribuzione si trova nell'intervallo tra 8000 e 9000 (incluso)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE salary BETWEEN 8000 AND 9000;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere l'elenco di tutti i dipendenti i cui nomi contengono il simbolo '%'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%%%' ESCAPE '';\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere l'elenco di tutti gli ID dei manager<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipendenti. Ottenere un elenco dei lavoratori con le loro posizioni nel formato: Donald(sh_clerk)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;\n<\/code><\/pre>\n<p>\n<b>Utilizzare Funzioni a Riga Singola per Personalizzare il Risultato<\/b><\/p>\n<p>Tabella Dipendenti. Ottenere l'elenco di tutti i dipendenti la cui lunghezza del nome \u00e8 superiore a 10 caratteri<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE LENGTH (first_name) &gt; 10;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere l'elenco di tutti i dipendenti i cui nomi contengono la lettera 'b' (senza distinzione tra maiuscole e minuscole)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti i cui nomi contengono almeno 2 lettere 'a'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipendenti. Ottenere l'elenco di tutti i dipendenti la cui retribuzione \u00e8 un multiplo di 1000<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE MOD (salary, 1000) = 0;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere il primo numero a 3 cifre del numero di telefono del dipendente se il suo numero \u00e8 nel formato XXX.XXX.XXXX<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipartimenti. Ottenere la prima parola del nome del dipartimento per quelli che hanno pi\u00f9 di una parola nel titolo<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipendenti. Ottenere i nomi dei dipendenti senza la prima e l'ultima lettera nel nome<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti la cui ultima lettera nel nome \u00e8 'm' e la lunghezza del nome \u00e8 maggiore di 5<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dual. Ottenere la data del prossimo venerd\u00ec<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere l'elenco di tutti i dipendenti che lavorano in azienda da pi\u00f9 di 17 anni<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipendenti. Ottenere l'elenco di tutti i dipendenti la cui ultima cifra del numero di telefono \u00e8 dispari e consiste in 3 cifre separate da un punto<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti i cui job_id hanno almeno 3 caratteri dopo il simbolo '_' ma questo valore dopo '_' non \u00e8 'CLERK'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti sostituendo nel valore PHONE_NUMBER tutti i '.' con '-'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Utilizzando Funzioni di Conversione ed Espressioni Condizionali<\/b><\/p>\n<p>Tabella Employees. Ottenere l'elenco di tutti i dipendenti che sono stati assunti il primo giorno del mese (qualsiasi mese)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'DD') = '01';\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere l'elenco di tutti i dipendenti assunti nell'anno 2008<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'YYYY') = '2008';\n<\/code><\/pre>\n<p>Tabella DUAL. Mostrare la data di domani nel formato: Domani \u00e8 il secondo giorno di gennaio<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (SYSDATE, 'fm\"\"Domani \u00e8 \"\"Ddspth \"\"giorno di\"\" Mese')     info\n  FROM DUAL;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere l'elenco di tutti i dipendenti e la data di assunzione di ciascuno nel formato: 21 di Giugno, 2007<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, TO_CHAR (hire_date, 'fmddth \"\"di\"\" Mese, YYYY') hire_date\n  FROM employees;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere l'elenco dei dipendenti con aumenti di stipendio del 20%. Mostrare lo stipendio con il simbolo del dollaro<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti assunti nel febbraio 2007.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella DUAL. Restituire la data attuale, + secondo, + minuto, + ora, + giorno, + mese, + anno<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti con stipendi totali (salary + commission_pct(%)) nel formato: $24,000.00<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere l'elenco di tutti i dipendenti e informazioni sulla presenza di bonus salariali (S\u00ec\/No)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere il livello di stipendio di ciascun dipendente: Meno di 5000 \u00e8 considerato di basso livello, Maggiore o uguale a 5000 e minore di 10000 \u00e8 considerato di livello normale, Maggiore o uguale a 10000 \u00e8 considerato di alto livello<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA first_name,\n       stipendio,\n       CASE\n           WHEN stipendio = 5000 AND stipendio &lt; 10000 THEN &#039;Normale&#039;\n           ELSE &#039;Alto&#039;\n       END livello_stipendio\n  DA dipendenti;\n<\/code><\/pre>\n<p>Tabella Paesi. Per ogni paese mostrare la regione in cui si trova: 1-Europa, 2-America, 3-Asia, 4-Africa (senza Join)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA country_name paese,\n       DECODE (region_id,\n               1, 'Europa',\n               2, 'America',\n               3, 'Asia',\n               4, 'Africa',\n               'Sconosciuto')\n           regione\n  DA paesi;\n\nSELEZIONA country_name\n           paese,\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 'Sconosciuto'\n       FINE\n           regione\n  DA paesi;\n<\/code><\/pre>\n<p>\n<b>Reporting Dati Aggregati Utilizzando le Funzioni di Gruppo<\/b><\/p>\n<p>Tabella Dipendenti. Ottenere un report per department_id con stipendio minimo e massimo, data di assunzione pi\u00f9 precoce e pi\u00f9 tardiva e numero di dipendenti. Ordinare per numero di dipendenti (in ordine decrescente)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA department_id,\n         MIN (stipendio) stipendio_minimo,\n         MAX (stipendio) stipendio_massimo,\n         MIN (hire_date) data_assunzione_min,\n         MAX (hire_date) data_assunzione_max,\n         CONTA (*) conteggio\n    DA dipendenti\nGROUP BY department_id\nORDER BY conteggio DESC;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Quanti dipendenti hanno nomi che iniziano con la stessa lettera? Ordinare per numero. Mostrare solo quelli dove il numero \u00e8 maggiore di 1<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA SUBSTR (first_name, 1, 1) primo_carattere, CONTARE (*)\n    DA dipendenti\nGROUP BY SUBSTR (first_name, 1, 1)\n  HAVING CONTARE (*) &gt; 1\nORDER BY 2 DESC;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Quanti dipendenti lavorano nello stesso dipartimento e ricevono lo stesso stipendio?<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA department_id, stipendio, CONTARE (*)\n    DA dipendenti\nGROUP BY department_id, stipendio\n  HAVING CONTARE (*) &gt; 1;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere un report su quanti dipendenti sono stati assunti in ogni giorno della settimana. Ordinare per numero<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA TO_CHAR (hire_Date, 'Giorno') giorno, CONTARE (*)\n    DA dipendenti\nGROUP BY TO_CHAR (hire_Date, 'Giorno')\nORDER BY 2 DESC;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere un report su quanti dipendenti sono stati assunti per anno. Ordinare per numero<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA TO_CHAR (hire_date, 'YYYY') anno, CONTARE (*)\n    DA dipendenti\nGROUP BY TO_CHAR (hire_date, 'YYYY');\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere il numero di dipartimenti in cui ci sono dipendenti<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA CONTARE (CONTARE (*)) dipartimento_conteggio\n    DA dipendenti\n   DOVE department_id \u00c8 NON NULL\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere l'elenco degli department_id in cui lavorano pi\u00f9 di 30 dipendenti<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA department_id\n    DA dipendenti\nGROUP BY department_id\n  HAVING CONTARE (*) &gt; 30;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottenere l'elenco degli department_id e il salario medio arrotondato dei lavoratori in ogni dipartimento. <br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA department_id, ARROTONDA (MEDIA (stipendio)) stipendio_medio\n    DA dipendenti\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabella Paesi. Ottenere l'elenco degli region_id somma di tutte le lettere di tutti i country_name in cui sono pi\u00f9 di 60<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA region_id\n    DA paesi\nRAGGRUPPA PER region_id\n  AVENDO SOMMA (LUNGHEZZA (country_name)) &gt; 60;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere un elenco di department_id in cui lavorano i dipendenti con pi\u00f9 di un job_id<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA department_id\n    DA dipendenti\nRAGGRUPPA PER department_id\n  AVENDO CONTEGGIO (DISTINTI job_id) &gt; 1;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere un elenco di manager_id che hanno pi\u00f9 di 5 dipendenti e la somma di tutti gli stipendi dei suoi dipendenti \u00e8 maggiore di 50000<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA manager_id\n    DA dipendenti\nRAGGRUPPA PER manager_id\n  AVENDO CONTEGGIO (*) &gt; 5 E SOMMA (stipendio) &gt; 50000;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere un elenco di manager_id la cui media degli stipendi di tutti i suoi dipendenti \u00e8 compresa tra 6000 e 9000 e che non ricevono provvigioni (commission_pct vuoto)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA manager_id, MEDIA (stipendio) avg_salary\n    DA dipendenti\n   DOVE commission_pct \u00c8 NULL\nRAGGRUPPA PER manager_id\n  AVENDO MEDIA (stipendio) TRA 6000 E 9000;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere lo stipendio massimo di tutti i dipendenti il cui job_id termina con la parola 'CLERK'<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA MAX (stipendio) max_salary\n  DA dipendenti\n DOVE job_id SIMILE '%CLERK';\n\nSELEZIONA MAX (stipendio) max_salary\n  DA dipendenti\n DOVE SUBSTR (job_id, -5) = 'CLERK';\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere lo stipendio massimo tra tutte le medie degli stipendi per dipartimento<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA MAX (MEDIA (stipendio))\n    DA dipendenti\nRAGGRUPPA PER department_id;\n<\/code><\/pre>\n<p>Tabella Employees. Ottenere il numero di dipendenti con lo stesso numero di lettere nel nome. Mostrare solo quelli con una lunghezza del nome maggiore di 5 e un numero di dipendenti con quel nome maggiore di 20. Ordinare per lunghezza del nome<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA LUNGHEZZA (first_name), CONTEGGIO (*)\n    DA dipendenti\nRAGGRUPPA PER LUNGHEZZA (first_name)\n  AVENDO LUNGHEZZA (first_name) &gt; 5 E CONTEGGIO (*) &gt; 20\nORDINA PER LUNGHEZZA (first_name);\n\n  SELEZIONA LUNGHEZZA (first_name), CONTEGGIO (*)\n    DA dipendenti\n   DOVE LUNGHEZZA (first_name) &gt; 5\nRAGGRUPPA PER LUNGHEZZA (first_name)\n  AVENDO CONTEGGIO (*) &gt; 20\nORDINA PER LUNGHEZZA (first_name);\n<\/code><\/pre>\n<p>\n<b>Visualizzazione Dati da Tabelle Multiple Utilizzando Join<\/b><\/p>\n<p>Tabella Employees, Departament, Locations, Countries, Regions. Ottenere un elenco di regioni e il numero di dipendenti in ciascuna regione<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA region_name, CONTEGGIO (*)\n    DA dipendenti e\n         UNISCITI a dipartimenti d SU (e.department_id = d.department_id)\n         UNISCITI a localit\u00e0 l SU (d.location_id = l.location_id)\n         UNISCITI a paesi c SU (l.country_id = c.country_id)\n         UNISCITI a regioni r SU (c.region_id = r.region_id)\nRAGGRUPPA PER region_name;\n<\/code><\/pre>\n<p>Tabella Employees, Departaments, Locations, Countries, Regions. Ottenere informazioni dettagliate su ciascun dipendente:<br \/>\nFirst_name, Last_name, Departament, Job, Street, Country, Region<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA First_name,\n       Last_name,\n       Department_name,\n       Job_id,\n       street_address,\n       Country_name,\n       Region_name\n  DA dipendenti  e\n       UNISCITI a dipartimenti d SU (e.department_id = d.department_id)\n       UNISCITI a localit\u00e0 l SU (d.location_id = l.location_id)\n       UNISCITI a paesi c SU (l.country_id = c.country_id)\n       UNISCITI a regioni r SU (c.region_id = r.region_id);\n<\/code><\/pre>\n<p>Tabella Employees. Mostrare tutti i manager che hanno pi\u00f9 di 6 dipendenti sotto di loro<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">  SELEZIONA man.first_name, CONTEGGIO (*)\n    DA dipendenti emp UNISCITI a dipendenti man ON (emp.manager_id = man.employee_id)\nRAGGRUPPA PER man.first_name\n  HAVENDO CONTEGGIO (*) &gt; 6;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Mostra tutti i dipendenti che non rispondono a nessuno<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA emp.first_name\n  DA dipendenti emp\n       SINISTRA UNISCI a dipendenti man ON (emp.manager_id = man.employee_id)\n DOVE man.FIRST_NAME \u00c8 NULL;\n\nSELEZIONA first_name\n  DA dipendenti\n DOVE manager_id \u00c8 NULL;\n<\/code><\/pre>\n<p>Tabella Dipendenti, Storia_lavoro. Nella tabella Dipendenti sono memorizzati tutti i dipendenti. Nella tabella Storia_lavoro sono memorizzati i dipendenti che hanno lasciato l'azienda. Ottieni un report su tutti i dipendenti e sul loro stato nell'azienda (Lavora o ha lasciato l'azienda con la data di uscita)<br \/>\nEsempio:<br \/>\nfirst_name | stato<br \/>\nJennifer | Ha lasciato l'azienda il 31 dicembre 2006<br \/>\nClara | Attualmente in lavorazione<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA first_name,\n       NVL2 (\n           end_date,\n           TO_CHAR (end_date, 'fm\"\"Ha lasciato l'azienda il\"\" DD \"\"di\"\" Mese, YYYY'),\n           'Attualmente in lavorazione')\n           stato\n  DA dipendenti e SINISTRA UNISCI storia_lavoro j ON (e.employee_id = j.employee_id);\n<\/code><\/pre>\n<p>Tabella Dipendenti, Dipartimenti, Localit\u00e0, Paesi, Region. Ottieni un elenco dei dipendenti che vivono in Europa (region_name)<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\"> SELEZIONA first_name\n  DA dipendenti\n       UNISCITI a dipartimenti UTILIZZANDO (department_id)\n       UNISCITI a localit\u00e0 UTILIZZANDO (location_id)\n       UNISCITI a paesi UTILIZZANDO (country_id)\n       UNISCITI a regioni UTILIZZANDO (region_id)\n DOVE region_name = 'Europa';\n \n SELEZIONA first_name\n  DA dipendenti e\n       UNISCITI a dipartimenti d ON (e.department_id = d.department_id)\n       UNISCITI a localit\u00e0 l ON (d.location_id = l.location_id)\n       UNISCITI a paesi c ON (l.country_id = c.country_id)\n       UNISCITI a regioni r ON (c.region_id = r.region_id)\n DOVE region_name = 'Europa';\n<\/code><\/pre>\n<p>Tabella Dipendenti, Dipartimenti. Mostra tutti i dipartimenti in cui lavorano pi\u00f9 di 30 dipendenti<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA department_name, CONTEGGIO (*)\n    DA dipendenti e UNISCITI a dipartimenti d ON (e.department_id = d.department_id)\nRAGGRUPPA PER department_name\n  HAVENDO CONTEGGIO (*) &gt; 30;\n<\/code><\/pre>\n<p>Tabella Dipendenti, Dipartimenti. Mostra tutti i dipendenti che non appartengono a nessun dipartimento<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA first_name\n  DA dipendenti e\n       SINISTRA UNISCI a dipartimenti d ON (e.department_id = d.department_id)\n DOVE d.department_name \u00c8 NULL;\n\nSELEZIONA first_name\n  DA dipendenti\n DOVE department_id \u00c8 NULL;\n<\/code><\/pre>\n<p>Tabella Dipendenti, Dipartimenti. Mostra tutti i dipartimenti in cui non c'\u00e8 nessun dipendente<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA department_name\n  DA dipendenti e\n       DESTRA UNISCI a dipartimenti d ON (e.department_id = d.department_id)\n DOVE first_name \u00c8 NULL;\n<\/code><\/pre>\n<p>Tabella Dipendenti. Mostra tutti i dipendenti che non hanno nessuno a cui rispondere<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA man.first_name\n  DA dipendenti emp\n       DESTRA UNISCI a dipendenti man ON (emp.manager_id = man.employee_id)\n DOVE emp.FIRST_NAME \u00c8 NULL;\n<\/code><\/pre>\n<p>Tabella Dipendenti, Lavori, Dipartimenti. Mostra i dipendenti nel formato: First_name, Job_title, Department_name.<br \/>\nEsempio:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Spedizione | Impiegato Spedizione<br \/>\n<b class=\"spoiler_title\">Soluzione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA first_name, job_title, department_name\n  DA dipendenti e\n       UNISCITI a lavori j ON (e.job_id = j.job_id)\n       UNISCITI a dipartimenti d ON (d.department_id = e.department_id);\n<\/code><\/pre>\n<p>Tabella Dipendenti. Ottieni un elenco dei dipendenti i cui manager sono stati assunti nel 2005, ma questi stessi lavoratori sono stati assunti prima del 2005<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere un elenco di dipendenti i cui manager sono stati assunti nel mese di gennaio di qualsiasi anno e la lunghezza del job_title di questi dipendenti supera i 15 caratteri.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Utilizzo delle Sottoquery per Risolvere le Query<\/b><\/p>\n<p>Tabella Employees. Ottenere un elenco di dipendenti con il nome pi\u00f9 lungo.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere un elenco di dipendenti con uno stipendio superiore alla media degli stipendi di tutti i dipendenti.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees, Departments, Locations. Ottenere la citt\u00e0 in cui i dipendenti guadagnano meno in totale.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere un elenco di dipendenti i cui manager guadagnano pi\u00f9 di 15000.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipendenti, Dipartimenti. Mostra tutti i dipartimenti in cui non c'\u00e8 nessun dipendente<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Mostrare tutti i dipendenti che non sono manager.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Mostrare tutti i manager che hanno pi\u00f9 di 6 dipendenti sotto di loro<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees, Departaments. Mostrare i dipendenti che lavorano nel dipartimento IT.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipendenti, Lavori, Dipartimenti. Mostra i dipendenti nel formato: First_name, Job_title, Department_name.<br \/>\nEsempio:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Spedizione | Impiegato Spedizione<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Dipendenti. Ottieni un elenco dei dipendenti i cui manager sono stati assunti nel 2005, ma questi stessi lavoratori sono stati assunti prima del 2005<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Tabella Employees. Ottenere un elenco di dipendenti i cui manager sono stati assunti nel mese di gennaio di qualsiasi anno e la lunghezza del job_title di questi dipendenti supera i 15 caratteri.<br \/>\n<b class=\"spoiler_title\">Soluzione<\/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>Per ora \u00e8 tutto.<\/b><\/p>\n<p>Spero che i compiti siano stati interessanti e coinvolgenti. <br \/>\nFar\u00f2 del mio meglio per ampliare questa lista di compiti.<br \/>\nSar\u00f2 anche felice di ricevere qualsiasi commento o suggerimento.<\/p>\n<p>P.S.: Se a qualcuno viene in mente un compito interessante su SELECT, scrivete nei commenti, lo aggiunger\u00f2 alla lista.<\/p>\n<p>Grazie.<br \/>\n<br \/>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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. Compiti interessanti | ProHoster","description":"Ciao, Habr! Sono pi\u00f9 di 3 anni che insegno SQL in diversi centri di formazione, e una delle mie osservazioni \u00e8 che gli studenti padroneggiano e comprendono meglio SQL se viene loro presentato un compito, invece di farlo semplicemente.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/sql-zanimatelnye-zadachki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/36671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=36671"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/27465"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}