{"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\/sv\/blog\/news\/sql-zanimatelnye-zadachki","title":{"rendered":"SQL. Intressanta uppgifter","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, Habra!<\/p>\n<p>Under de senaste tre \u00e5ren har jag undervisat i SQL p\u00e5 olika tr\u00e4ningscentra, och en av mina observationer \u00e4r att studenterna l\u00e4r sig och f\u00f6rst\u00e5r SQL b\u00e4ttre om man ger dem uppgifter, snarare \u00e4n bara ber\u00e4ttar om m\u00f6jligheter och teoretiska grunder.<\/p>\n<p>I den h\u00e4r artikeln kommer jag att dela med mig av min lista med uppgifter som jag ger till studenterna som heml\u00e4xa och som vi diskuterar p\u00e5 olika s\u00e4tt, vilket leder till en djup och klar f\u00f6rst\u00e5else av SQL.<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Intressanta uppgifter\" src=\"\/wp-content\/uploads\/2019\/07\/283f472e0c382c0621ffc14e2ac06881.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSQL (\u02c8\u025bs\u02c8kju\u02c8\u025bl; engelska. structured query language \u2014 \"strukturerad fr\u00e5gespr\u00e5k\") \u2014 ett deklarativt programmeringsspr\u00e5k som anv\u00e4nds f\u00f6r att skapa, modifiera och hantera data i en relationsdatabas som hanteras av ett relevant databas-hanteringssystem. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\">L\u00e4s mer\u2026 <\/a><\/noindex><\/p>\n<p>Man kan l\u00e4sa om SQL fr\u00e5n olika <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/search?q=SQL\">k\u00e4llor<\/a><\/noindex>.<br \/>\nDenna artikel syftar inte till att l\u00e4ra dig SQL fr\u00e5n grunden.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nS\u00e5, l\u00e5t oss k\u00f6ra ig\u00e5ng.<\/p>\n<p>Vi kommer att anv\u00e4nda det v\u00e4lk\u00e4nda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/oracle\/db-sample-schemas\/tree\/master\/human_resources\">HR-schema<\/a><\/noindex> i Oracle med dess tabeller (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/comsc\/HR-sample-schema-table-descriptions.html\">L\u00e4s mer<\/a><\/noindex>):<\/p>\n<p><img decoding=\"async\" alt=\"SQL. Intressanta uppgifter\" src=\"\/wp-content\/uploads\/2019\/07\/b518c0bedd0d7bbeaedbcc4bd95079cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJag vill p\u00e5peka att vi bara kommer att \u00f6verv\u00e4ga uppgifter p\u00e5 SELECT. Det finns inga uppgifter p\u00e5 DML och DDL.<\/p>\n<h2>Uppgifter<\/h2>\n<p>\n<b>Begr\u00e4nsa och sortera data<\/b><\/p>\n<p>Tabellen Employees. H\u00e4mta en lista med information om alla anst\u00e4llda <br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM employees\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda med namnet 'David'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name = 'David';\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda vars job_id \u00e4r lika med 'IT_PROG'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE job_id = 'IT_PROG'\n<\/code><\/pre>\n<p>Tabellen Employees. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda fr\u00e5n avdelning 50 (department_id) med en l\u00f6n (salary) som \u00e4r \u00f6ver 4000<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabellen Employees. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda fr\u00e5n avdelning 20 och avdelning 30 (department_id)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda vars sista bokstav i namnet \u00e4r 'a'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%a';\n<\/code><\/pre>\n<p>Tabellen Employees. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda fr\u00e5n avdelning 50 och avdelning 80 (department_id) som har bonus (v\u00e4rde i kolumnen commission_pct \u00e4r inte tomt)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda vars namn inneh\u00e5ller minst 2 bokst\u00e4ver 'n'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%n%n%';\n<\/code><\/pre>\n<p>Tabellen Employees. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda vars namn \u00e4r l\u00e4ngre \u00e4n 4 bokst\u00e4ver<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE first_name LIKE '%_____%';\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda vars l\u00f6n ligger mellan 8000 och 9000 (inklusive)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR L\u00d6N MELLAN 8000 OCH 9000;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda vars namn inneh\u00e5ller tecknet '%'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR F\u00d6RSTA_NAMN LIK '%%%' ESCAPE '';\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta en lista \u00f6ver alla ID:n f\u00f6r chefer<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ DISTINCT manager_id\n  FR\u00c5N anst\u00e4llda\n VAR manager_id \u00c4R INTE NULL;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta en lista \u00f6ver arbetstagare med deras positioner i formatet: Donald(sh_clerk)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ f\u00f6rsta_namn || '(' || LOWER (jobb_id) || ')' anst\u00e4lld FR\u00c5N anst\u00e4llda;\n<\/code><\/pre>\n<p>\n<b>Anv\u00e4nda enstaka radfunktioner f\u00f6r att anpassa utdata<\/b><\/p>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda vars namn \u00e4r l\u00e4ngre \u00e4n 10 bokst\u00e4ver<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR L\u00c4NGD (f\u00f6rsta_namn) &gt; 10;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda vars namn inneh\u00e5ller bokstaven 'b' (utan att ta h\u00e4nsyn till versaler)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR INSTR (LOWER (f\u00f6rsta_namn), 'b') &gt; 0;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda vars namn inneh\u00e5ller minst 2 bokst\u00e4ver 'a'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR INSTR (LOWER (f\u00f6rsta_namn),'a',1,2) &gt; 0;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda vars l\u00f6n \u00e4r delbar med 1000<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR MOD (l\u00f6n, 1000) = 0;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta de f\u00f6rsta 3 siffrorna i anst\u00e4lldas telefonnummer om numret \u00e4r i formatet XXX.XXX.XXXX<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ telefon_nummer, SUBSTR (telefon_nummer, 1, 3) nytt_telefon_nummer\n  FR\u00c5N anst\u00e4llda\n VAR telefon_nummer LIK '___.___.____';\n<\/code><\/pre>\n<p>Tabell \u00f6ver avdelningar. H\u00e4mta det f\u00f6rsta ordet i avdelningens namn f\u00f6r dem vars namn inneh\u00e5ller mer \u00e4n ett ord<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ avdelningsnamn,\n       SUBSTR (avdelningsnamn, 1, INSTR (avdelningsnamn, ' ')-1)\n           f\u00f6rsta_ord\n  FR\u00c5N avdelningar\n VAR INSTR (avdelningsnamn, ' ') &gt; 0;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta namnen p\u00e5 anst\u00e4llda utan f\u00f6rsta och sista bokstaven i namnet<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ f\u00f6rsta_namn, SUBSTR (f\u00f6rsta_namn, 2, L\u00c4NGD (f\u00f6rsta_namn) - 2) nytt_namn\n  FR\u00c5N anst\u00e4llda;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda vars sista bokstav i namnet \u00e4r 'm' och l\u00e4ngden p\u00e5 namnet \u00e4r st\u00f6rre \u00e4n 5<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR SUBSTR (f\u00f6rsta_namn, -1) = 'm' OCH L\u00c4NGD(f\u00f6rsta_namn) &gt; 5;\n<\/code><\/pre>\n<p>Tabell \u00f6ver Dual. H\u00e4mta datum f\u00f6r n\u00e4sta fredag<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ NEXT_DAY (SYSDATE, 'FRIDAY') n\u00e4sta_friday FR\u00c5N DUAL;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda som har arbetat i f\u00f6retaget i mer \u00e4n 17 \u00e5r<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR M\u00c5NADER_MELLAN (SYSDATE, anst\u00e4llningsdatum) \/ 12 &gt; 17;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta en lista \u00f6ver alla anst\u00e4llda vars sista siffra i telefonnumret \u00e4r udda och best\u00e5r av 3 siffror separerade med punkt<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR MOD (SUBSTR (telefon_nummer, -1), 2) != 0\n       OCH INSTR (telefon_nummer,'.',1,3) = 0;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda d\u00e4r v\u00e4rdet f\u00f6r job_id efter tecknet '_' har minst 3 tecken men detta v\u00e4rde efter '_' inte \u00e4r lika med 'CLERK'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda och ers\u00e4tt i v\u00e4rdet PHONE_NUMBER alla '.' med '-'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Anv\u00e4ndning av konverteringsfunktioner och konditionella uttryck<\/b><\/p>\n<p>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda som b\u00f6rjade arbeta den f\u00f6rsta dagen i m\u00e5naden (vilken som helst)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'DD') = '01';\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda som b\u00f6rjade arbeta under 2008<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT *\n  FROM employees\n WHERE TO_CHAR (hire_date, 'YYYY') = '2008';\n<\/code><\/pre>\n<p>Tabell DUAL. Visa morgondagens datum i formatet: Tomorrow is Second day of January<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT TO_CHAR (SYSDATE, 'fm\"\"Tomorrow is \"\"Ddspth \"\"day of\"\" Month')     info\n  FROM DUAL;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda och datumet n\u00e4r de b\u00f6rjade arbeta i formatet: 21st of June, 2007<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">SELECT first_name, TO_CHAR (hire_date, 'fmddth \"\"of\"\" Month, YYYY') hire_date\n  FROM employees;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver anst\u00e4llda med l\u00f6ner som \u00f6kar med 20%. Visa l\u00f6nen med dollartecken<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda som b\u00f6rjade arbeta i februari 2007.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell DUAL. Visa aktuellt datum, + sekund, + minut, + timme, + dag, + m\u00e5nad, + \u00e5r<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda med fulla l\u00f6ner (salary + commission_pct(%)) i formatet: $24,000.00<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver alla anst\u00e4llda och information om bonusar till l\u00f6nen (Ja\/Nej)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/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>Tabell Anst\u00e4llda. H\u00e4mta l\u00f6neniv\u00e5n f\u00f6r varje anst\u00e4lld: Mindre \u00e4n 5000 anses vara L\u00e5g niv\u00e5, Mellan 5000 och mindre \u00e4n 10000 anses vara Normal niv\u00e5, Mer \u00e4n eller lika med 10000 anses vara H\u00f6g niv\u00e5<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ first_name,\n       salary,\n       FALL\n           N\u00c4R salary = 5000 OCH salary &lt; 10000 D\u00c5 &#039;Normal&#039;\n           ANNARS &#039;H\u00f6g&#039;\n       SLUT salary_level\n  FR\u00c5N employees;\n<\/code><\/pre>\n<p>Tabell Countries. Visa regionen f\u00f6r varje land d\u00e4r det ligger: 1-Europa, 2-Amerika, 3-Asien, 4-Afrika (utan Join)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ country_name land,\n       DEKODERA (region_id,\n               1, 'Europa',\n               2, 'Amerika',\n               3, 'Asien',\n               4, 'Afrika',\n               'Ok\u00e4nd')\n           region\n  FR\u00c5N countries;\n\nV\u00c4LJ country_name\n           land,\n       FALL region_id\n           N\u00c4R 1 D\u00c5 'Europa'\n           N\u00c4R 2 D\u00c5 'Amerika'\n           N\u00c4R 3 D\u00c5 'Asien'\n           N\u00c4R 4 D\u00c5 'Afrika'\n           ANNARS 'Ok\u00e4nd'\n       SLUT\n           region\n  FR\u00c5N countries;\n<\/code><\/pre>\n<p>\n<b>Rapportering av aggregerad data med hj\u00e4lp av gruppfunktioner<\/b><\/p>\n<p>Tabell Employees. F\u00e5 en rapport \u00f6ver department_id med minimi och maximi l\u00f6n, med tidigaste och senaste anst\u00e4llningsdatum och antal anst\u00e4llda. Sortera efter antal anst\u00e4llda (i fallande ordning)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00c4LJ department_id,\n         MIN (salary) min_l\u00f6n,\n         MAX (salary) max_l\u00f6n,\n         MIN (hire_date) min_anst\u00e4llningsdatum,\n         MAX (hire_date) max_anst\u00e4llningsdatum,\n         ANTAL (*) antal\n    FR\u00c5N employees\nGROUP BY department_id\norder by antal desc;\n<\/code><\/pre>\n<p>Tabell Employees. Hur m\u00e5nga anst\u00e4llda har namn som b\u00f6rjar med samma bokstav? Sortera efter antal. Visa endast de d\u00e4r antalet \u00e4r st\u00f6rre \u00e4n 1<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ SUBSTR (first_name, 1, 1) f\u00f6rsta_bokstav, ANTAL (*)\n    FR\u00c5N employees\nGROUP BY SUBSTR (first_name, 1, 1)\n  HAVING ANTAL (*) &gt; 1\nORDER BY 2 DESC;\n<\/code><\/pre>\n<p>Tabell Employees. Hur m\u00e5nga anst\u00e4llda arbetar i samma avdelning och f\u00e5r samma l\u00f6n?<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ department_id, salary, ANTAL (*)\n    FR\u00c5N employees\nGROUP BY department_id, salary\n  HAVING ANTAL (*) &gt; 1;\n<\/code><\/pre>\n<p>Tabell Employees. F\u00e5 en rapport om hur m\u00e5nga anst\u00e4llda som anst\u00e4lldes varje veckodag. Sortera efter antal<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ TO_CHAR (hire_Date, 'Dag') dag, ANTAL (*)\n    FR\u00c5N employees\nGROUP BY TO_CHAR (hire_Date, 'Dag')\nORDER BY 2 DESC;\n<\/code><\/pre>\n<p>Tabell Employees. F\u00e5 en rapport om hur m\u00e5nga anst\u00e4llda som anst\u00e4lldes per \u00e5r. Sortera efter antal<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ TO_CHAR (hire_date, '\u00c5\u00c5\u00c5\u00c5') \u00e5r, ANTAL (*)\n    FR\u00c5N employees\nGROUP BY TO_CHAR (hire_date, '\u00c5\u00c5\u00c5\u00c5');\n<\/code><\/pre>\n<p>Tabell Employees. F\u00e5 antalet avdelningar d\u00e4r det finns anst\u00e4llda<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ ANTAL (ANTAL (*)) avdelningsantal\n    FR\u00c5N employees\n   WHERE department_id \u00c4R INTE NULL\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabell Employees. F\u00e5 en lista \u00f6ver department_id d\u00e4r mer \u00e4n 30 anst\u00e4llda arbetar<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00c4LJ department_id\n    FR\u00c5N employees\nGROUP BY department_id\n  HAVING ANTAL (*) &gt; 30;\n<\/code><\/pre>\n<p>Tabell Employees. F\u00e5 en lista \u00f6ver department_id och avrundad genomsnittlig l\u00f6n f\u00f6r anst\u00e4llda i varje avdelning. <br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00c4LJ department_id, AVRUND (GENOMSNITT (salary)) genomsnitt_l\u00f6n\n    FR\u00c5N employees\nGROUP BY department_id;\n<\/code><\/pre>\n<p>Tabell Countries. F\u00e5 en lista \u00f6ver region_id med summan av alla bokst\u00e4ver i country_name d\u00e4r det finns mer \u00e4n 60<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00e4lj region_id\n    Fr\u00e5n l\u00e4nder\nGrupp efter region_id\n  HAVING SUM (LENGTH (land_namn)) &gt; 60;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver department_id d\u00e4r flera (&gt;1) job_id arbetar.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00e4lj department_id\n    Fr\u00e5n anst\u00e4llda\nGrupp efter department_id\n  HAVING COUNT (DISTINCT job_id) &gt; 1;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver manager_id som har fler \u00e4n 5 underordnade och summan av alla deras l\u00f6ner \u00f6ver 50000.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00e4lj manager_id\n    Fr\u00e5n anst\u00e4llda\nGrupp efter manager_id\n  HAVING COUNT (*) &gt; 5 OCH SUM (l\u00f6n) &gt; 50000;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta lista \u00f6ver manager_id som har ett genomsnittligt l\u00f6n mellan 6000 och 9000 och som inte f\u00e5r bonusar (commission_pct \u00e4r tomt).<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00e4lj manager_id, AVG (l\u00f6n) avg_l\u00f6n\n    Fr\u00e5n anst\u00e4llda\n   D\u00e4r commission_pct \u00c4R NULL\nGrupp efter manager_id\n  HAVING AVG (l\u00f6n) MELLAN 6000 OCH 9000;\n<\/code><\/pre>\n<p>Tabell \u00f6ver anst\u00e4llda. H\u00e4mta maxl\u00f6nen bland alla anst\u00e4llda vars job_id slutar med ordet 'CLERK'<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00e4lj MAX (l\u00f6n) max_l\u00f6n\n  Fr\u00e5n anst\u00e4llda\n D\u00e4r job_id LIKE '%CLERK';\n\nV\u00e4lj MAX (l\u00f6n) max_l\u00f6n\n  Fr\u00e5n anst\u00e4llda\n D\u00e4r SUBSTR (job_id, -5) = 'CLERK';\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta maxl\u00f6n bland alla genomsnittliga l\u00f6ner per avdelning.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00e4lj MAX (AVG (l\u00f6n))\n    Fr\u00e5n anst\u00e4llda\nGrupp efter department_id;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta antal anst\u00e4llda med samma antal bokst\u00e4ver i namnet. Visa endast de som har namn med mer \u00e4n 5 tecken och d\u00e4r antalet anst\u00e4llda med det namnet \u00e4r mer \u00e4n 20. Sortera efter l\u00e4ngden p\u00e5 namnet.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00e4lj LENGTH (f\u00f6rnamn), COUNT (*)\n    Fr\u00e5n anst\u00e4llda\nGrupp efter LENGTH (f\u00f6rnamn)\n  HAVING LENGTH (f\u00f6rnamn) &gt; 5 OCH COUNT (*) &gt; 20\nORDER BY LENGTH (f\u00f6rnamn);\n\n  V\u00e4lj LENGTH (f\u00f6rnamn), COUNT (*)\n    Fr\u00e5n anst\u00e4llda\n   D\u00e4r LENGTH (f\u00f6rnamn) &gt; 5\nGrupp efter LENGTH (f\u00f6rnamn)\n  HAVING COUNT (*) &gt; 20\nORDER BY LENGTH (f\u00f6rnamn);\n<\/code><\/pre>\n<p>\n<b>Visar data fr\u00e5n flera tabeller med hj\u00e4lp av joins.<\/b><\/p>\n<p>Tabell Anst\u00e4llda, Avdelningar, Platser, L\u00e4nder, Regioner. H\u00e4mta lista \u00f6ver regioner och antal anst\u00e4llda i varje region.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00e4lj region_namn, COUNT (*)\n    Fr\u00e5n anst\u00e4llda e\n         JOIN avdelningar d P\u00c5 (e.department_id = d.department_id)\n         JOIN platser l P\u00c5 (d.location_id = l.location_id)\n         JOIN l\u00e4nder c P\u00c5 (l.country_id = c.country_id)\n         JOIN regioner r P\u00c5 (c.region_id = r.region_id)\nGrupp efter region_namn;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar, Platser, L\u00e4nder, Regioner. H\u00e4mta detaljerad information om varje anst\u00e4lld:<br \/>\nF\u00f6rnamn, Efternamn, Avdelning, Jobb, Gata, Land, Region.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00e4lj F\u00f6rnamn,\n       Efternamn,\n       Avdelnings_namn,\n       Jobb_id,\n       gatuadress,\n       Lands_namn,\n       Regions_namn\n  Fr\u00e5n anst\u00e4llda e\n       JOIN avdelningar d P\u00c5 (e.department_id = d.department_id)\n       JOIN platser l P\u00c5 (d.location_id = l.location_id)\n       JOIN l\u00e4nder c P\u00c5 (l.country_id = c.country_id)\n       JOIN regioner r P\u00c5 (c.region_id = r.region_id);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. Visa alla chefer som har fler \u00e4n 6 anst\u00e4llda under sig.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">  V\u00c4LJ man.first_name, ANTAL (*)\n    FR\u00c5N anst\u00e4llda emp G\u00c5 MED anst\u00e4llda man P\u00c5 (emp.manager_id = man.employee_id)\nGRUPPERA EFTER man.first_name\n  HAVANDE ANTAL (*) &gt; 6;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. Visa alla anst\u00e4llda som inte rapporterar till n\u00e5gon<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ emp.first_name\n  FR\u00c5N anst\u00e4llda emp\n       V\u00c4NSTER G\u00c5 MED anst\u00e4llda man P\u00c5 (emp.manager_id = man.employee_id)\n D\u00c4R man.FIRST_NAME \u00c4R NULL;\n\nV\u00c4LJ first_name\n  FR\u00c5N anst\u00e4llda\n D\u00c4R manager_id \u00c4R NULL;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Jobbhistorik. I tabellen Anst\u00e4llda lagras alla anst\u00e4llda. I tabellen Jobbhistorik lagras anst\u00e4llda som har l\u00e4mnat f\u00f6retaget. F\u00e5 en rapport om alla anst\u00e4llda och deras status i f\u00f6retaget (Arbetar eller har l\u00e4mnat f\u00f6retaget med utg\u00e5ngsdatum)<br \/>\nExempel:<br \/>\nfirst_name | status<br \/>\nJennifer | L\u00e4mnade f\u00f6retaget den 31 december 2006<br \/>\nClara | F\u00f6r n\u00e4rvarande anst\u00e4lld<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ first_name,\n       NVL2 (\n           end_date,\n           TO_CHAR (end_date, 'fm\"\"L\u00e4mnade f\u00f6retaget den\"\" DD \"\"i\"\" M\u00e5nad, YYYY'),\n           'F\u00f6r n\u00e4rvarande anst\u00e4lld')\n           status\n  FR\u00c5N anst\u00e4llda e V\u00c4NSTER G\u00c5 MED jobbhistorik j P\u00c5 (e.employee_id = j.employee_id);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar, Platser, L\u00e4nder, Regionen. F\u00e5 en lista \u00f6ver anst\u00e4llda som bor i Europa (region_name)<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\"> V\u00c4LJ first_name\n  FR\u00c5N anst\u00e4llda\n       G\u00c5 MED avdelningar MED (department_id)\n       G\u00c5 MED platser MED (location_id)\n       G\u00c5 MED l\u00e4nder MED (country_id)\n       G\u00c5 MED regioner MED (region_id)\n D\u00c4R region_name = 'Europa';\n \n V\u00c4LJ first_name\n  FR\u00c5N anst\u00e4llda e\n       G\u00c5 MED avdelningar d P\u00c5 (e.department_id = d.department_id)\n       G\u00c5 MED platser l P\u00c5 (d.location_id = l.location_id)\n       G\u00c5 MED l\u00e4nder c P\u00c5 (l.country_id = c.country_id)\n       G\u00c5 MED regioner r P\u00c5 (c.region_id = r.region_id)\n D\u00c4R region_name = 'Europa';\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar. Visa alla avdelningar med fler \u00e4n 30 anst\u00e4llda<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ department_name, ANTAL (*)\n    FR\u00c5N anst\u00e4llda e G\u00c5 MED avdelningar d P\u00c5 (e.department_id = d.department_id)\nGRUPPERA EFTER department_name\n  HAVANDE ANTAL (*) &gt; 30;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar. Visa alla anst\u00e4llda som inte tillh\u00f6r n\u00e5gon avdelning<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ first_name\n  FR\u00c5N anst\u00e4llda e\n       V\u00c4NSTER G\u00c5 MED avdelningar d P\u00c5 (e.department_id = d.department_id)\n D\u00c4R d.department_name \u00c4R NULL;\n\nV\u00c4LJ first_name\n  FR\u00c5N anst\u00e4llda\n D\u00c4R department_id \u00c4R NULL;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar. Visa alla avdelningar utan n\u00e5gra anst\u00e4llda<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ department_name\n  FR\u00c5N anst\u00e4llda e\n       H\u00d6GER G\u00c5 MED avdelningar d P\u00c5 (e.department_id = d.department_id)\n D\u00c4R first_name \u00c4R NULL;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. Visa alla anst\u00e4llda som inte har n\u00e5gra underordnade<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ man.first_name\n  FR\u00c5N anst\u00e4llda emp\n       H\u00d6GER G\u00c5 MED anst\u00e4llda man P\u00c5 (emp.manager_id = man.employee_id)\n D\u00c4R emp.FIRST_NAME \u00c4R NULL;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Jobb, Avdelningar. Visa anst\u00e4llda i formatet: First_name, Job_title, Department_name.<br \/>\nExempel:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Frakt | Kontor Frakt<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ first_name, job_title, department_name\n  FR\u00c5N anst\u00e4llda e\n       G\u00c5 MED jobb j P\u00c5 (e.job_id = j.job_id)\n       G\u00c5 MED avdelningar d P\u00c5 (d.department_id = e.department_id);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. F\u00e5 en lista \u00f6ver anst\u00e4llda vars chefer anst\u00e4lldes \u00e5r 2005 men som sj\u00e4lva anst\u00e4lldes f\u00f6re \u00e5r 2005<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ emp.*\n  FR\u00c5N anst\u00e4llda emp G\u00c5 MED anst\u00e4llda man P\u00c5 (emp.manager_id = man.employee_id)\n VAR     TO_CHAR (man.hire_date, 'YYYY') = '2005'\n       OCH emp.hire_date &lt; TO_DATE (&#039;01012005&#039;, &#039;DDMMYYYY&#039;);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta en lista \u00f6ver anst\u00e4llda vars chefer b\u00f6rjade arbeta i januari m\u00e5nad vilket \u00e5r som helst, och d\u00e4r l\u00e4ngden p\u00e5 job_title f\u00f6r dessa anst\u00e4llda \u00e4r mer \u00e4n 15 tecken.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ emp.*\n  FR\u00c5N anst\u00e4llda emp\n       G\u00c5 MED anst\u00e4llda man P\u00c5 (emp.manager_id = man.employee_id)\n       G\u00c5 MED jobb j P\u00c5 (emp.job_id = j.job_id)\n VAR TO_CHAR (man.hire_date, 'MM') = '01' OCH LENGTH (j.job_title) &gt; 15;\n<\/code><\/pre>\n<p>\n<b>Anv\u00e4nda subfr\u00e5gor f\u00f6r att l\u00f6sa fr\u00e5gor<\/b><\/p>\n<p>Tabell Anst\u00e4llda. H\u00e4mta en lista \u00f6ver anst\u00e4llda med det l\u00e4ngsta namnet.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR LENGTH (first_name) =\n       (V\u00c4LJ MAX (LENGTH (first_name)) FR\u00c5N anst\u00e4llda);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta en lista \u00f6ver anst\u00e4llda med en l\u00f6n som \u00e4r h\u00f6gre \u00e4n genomsnittsl\u00f6nen f\u00f6r alla anst\u00e4llda.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR salary &gt; (V\u00c4LJ AVG (salary) FR\u00c5N anst\u00e4llda);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar, Platser. H\u00e4mta staden d\u00e4r de anst\u00e4llda sammantaget tj\u00e4nar minst.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ stad\n    FR\u00c5N anst\u00e4llda e\n         G\u00c5 MED avdelningar d P\u00c5 (e.department_id = d.department_id)\n         G\u00c5 MED platser l P\u00c5 (d.location_id = l.location_id)\nGRUPPERA EFTER stad\n  HAVING SUM (salary) =\n         (  V\u00c4LJ MIN (SUM (salary))\n              FR\u00c5N anst\u00e4llda e\n                   G\u00c5 MED avdelningar d P\u00c5 (e.department_id = d.department_id)\n                   G\u00c5 MED platser l P\u00c5 (d.location_id = l.location_id)\n          GRUPPERA EFTER stad);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta en lista \u00f6ver anst\u00e4llda vars chefer har en l\u00f6n som \u00f6verstiger 15000.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR manager_id IN (V\u00c4LJ employee_id\n                        FR\u00c5N anst\u00e4llda\n                       VAR salary &gt; 15000)\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar. Visa alla avdelningar utan n\u00e5gra anst\u00e4llda<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N avdelningar\n VAR department_id INTE I (V\u00c4LJ department_id\n                               FR\u00c5N anst\u00e4llda\n                              VAR department_id \u00c4R INTE NULL);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. Visa alla anst\u00e4llda som inte \u00e4r chefer.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR employee_id INTE I (V\u00c4LJ manager_id\n                             FR\u00c5N anst\u00e4llda\n                            VAR manager_id \u00c4R INTE NULL)\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. Visa alla chefer som har fler \u00e4n 6 anst\u00e4llda under sig.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda e\n VAR (V\u00c4LJ COUNT (*)\n          FR\u00c5N anst\u00e4llda\n         VAR manager_id = e.employee_id) &gt; 6;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Avdelningar. Visa anst\u00e4llda som arbetar i avdelningen IT.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR department_id = (V\u00c4LJ department_id\n                          FR\u00c5N avdelningar\n                         VAR department_name = 'IT');\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda, Jobb, Avdelningar. Visa anst\u00e4llda i formatet: First_name, Job_title, Department_name.<br \/>\nExempel:<br \/>\nFirst_name | Job_title | Department_name<br \/>\nDonald | Frakt | Kontor Frakt<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ first_name,\n       (V\u00c4LJ job_title\n          FR\u00c5N jobb\n         VAR job_id = e.job_id)\n           job_title,\n       (V\u00c4LJ department_name\n          FR\u00c5N avdelningar\n         VAR department_id = e.department_id)\n           department_name\n  FR\u00c5N anst\u00e4llda e;\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. F\u00e5 en lista \u00f6ver anst\u00e4llda vars chefer anst\u00e4lldes \u00e5r 2005 men som sj\u00e4lva anst\u00e4lldes f\u00f6re \u00e5r 2005<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda\n VAR     manager_id IN (V\u00c4LJ employee_id\n                            FR\u00c5N anst\u00e4llda\n                           VAR TO_CHAR (hire_date, 'YYYY') = '2005')\n       OCH hire_date &lt; TO_DATE (&#039;01012005&#039;, &#039;DDMMYYYY&#039;);\n<\/code><\/pre>\n<p>Tabell Anst\u00e4llda. H\u00e4mta en lista \u00f6ver anst\u00e4llda vars chefer b\u00f6rjade arbeta i januari m\u00e5nad vilket \u00e5r som helst, och d\u00e4r l\u00e4ngden p\u00e5 job_title f\u00f6r dessa anst\u00e4llda \u00e4r mer \u00e4n 15 tecken.<br \/>\n<b class=\"spoiler_title\">L\u00f6sning<\/b><\/p>\n<pre><code class=\"sql\">V\u00c4LJ *\n  FR\u00c5N anst\u00e4llda e\n VAR     manager_id IN (V\u00c4LJ employee_id\n                            FR\u00c5N anst\u00e4llda\n                           VAR TO_CHAR (hire_date, 'MM') = '01')\n       OCH (V\u00c4LJ LENGTH (job_title)\n              FR\u00c5N jobb\n             VAR job_id = e.job_id) &gt; 15;\n<\/code><\/pre>\n<p>\n<b>Det \u00e4r allt f\u00f6r nu.<\/b><\/p>\n<p>Jag hoppas att uppgifterna var intressanta och engagerande. <br \/>\nJag kommer att komplettera denna lista med uppgifter n\u00e4r jag kan.<br \/>\nJag \u00e4r ocks\u00e5 \u00f6ppen f\u00f6r alla kommentarer och f\u00f6rslag.<\/p>\n<p>P.S.: Om n\u00e5gon kommer p\u00e5 en intressant uppgift om SELECT, skriv i kommentarerna, s\u00e5 l\u00e4gger jag till den i listan.<\/p>\n<p>Tack.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/news\/sql-zanimatelnye-zadachki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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. Intressanta uppgifter | ProHoster","description":"Hej, Habr! Jag har undervisat i SQL p\u00e5 olika tr\u00e4ningscenter i \u00f6ver 3 \u00e5r, och en av mina observationer \u00e4r att studenter l\u00e4r sig och f\u00f6rst\u00e5r SQL b\u00e4ttre om de st\u00e4lls inf\u00f6r en uppgift, ist\u00e4llet f\u00f6r bara.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/news\/sql-zanimatelnye-zadachki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/36671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=36671"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/36671\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/27465"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=36671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=36671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=36671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}