10
ENKLA FRÅGOR 3.1 Lista hela innehållet i tabellen employees SELECT * FROM employees; 3.2 Lista hela innehållet i tabellen departments SELECT * FROM departments; 3.3 Gör en projektion: Lista namn (last_name), lön (salary) och avdelningsnummer (department_id) från tabellen employees SELECT last_name, salary, department_id FROM employees; 3.4 Gör en restriktion: Lista alla uppgifter i employees gällande anställda på avdelning 20 SELECT * FROM employees WHERE department_id = 20; 3.5 Visa nam, antällningsdatum och lön för alla som har minst 13500 i lön. Kolumnalias: Namn Anställningsdatum Lön SELECT last_name "Namn", hire_date "Anställningsdatum", salary "Lön" FROM employees WHERE salary >= 13500; 3.6 Visa alla uppgifter om de anställda på avdelning 20 och 30 SELECT * FROM employees WHERE department_id IN (20, 30); 3.7 Lista alla namn som börjar på bokstaven S SELECT last_name FROM employees WHERE last_name LIKE 'S%';

SQL övningar

Embed Size (px)

Citation preview

Page 1: SQL övningar

ENKLA FRÅGOR

3.1 Lista hela innehållet i tabellen employees

SELECT * FROM employees;

3.2 Lista hela innehållet i tabellen departments

SELECT * FROM departments;

3.3 Gör en projektion: Lista namn (last_name), lön (salary) och avdelningsnummer (department_id) från tabellen employees

SELECT last_name, salary, department_id FROM employees;

3.4 Gör en restriktion: Lista alla uppgifter i employees gällande anställda på avdelning 20

SELECT * FROM employees

WHERE department_id = 20;

3.5 Visa nam, antällningsdatum och lön för alla som har minst 13500 i lön. Kolumnalias: Namn Anställningsdatum Lön

SELECT last_name "Namn", hire_date "Anställningsdatum", salary "Lön" FROM employees

WHERE salary >= 13500;

3.6 Visa alla uppgifter om de anställda på avdelning 20 och 30

SELECT * FROM employees

WHERE department_id IN (20, 30);

3.7 Lista alla namn som börjar på bokstaven S

SELECT last_name FROM employees

WHERE last_name LIKE 'S%';

3.8 Lista anställningsnummer(employee_id), namn och lön för alla med lön i intervallet 1000 och 2000. Använd valfria kolumnalias

SELECT employee_id "Anst.nr", last_name "Namn", salary "Lön" FROM employees

WHERE salary BETWEEN 12000 AND 17000;

Page 2: SQL övningar

3.9 Lista alla uppgifter i employees i bokstavsordning efter namn

SELECT * FROM employees

ORDER BY last_name;

3.10 Lista alla avdelningsnummer, namn, arbete och lön med lägsta avdelningsnummer först och –inom respektive avdelning, i ordning med högsta lönen först

SELECT department_id, last_name, salary FROM employees

ORDER BY department_id, salary DESC;

3.11 Visa namn och lön för alla kontorister (job_id slutar på CLERK) på avdelning 50. Sortera efter namn i bokstavsordning

SELECT last_name, salary FROM employees WHERE job_id LIKE '%CLERK' AND department_id = 50

ORDER BY last_name;

3.12 Man vill ha en lista med namn, jobb och lön. Alla chefer (job_id slutar på MAN) och alla som arbetar på avdelning 50 ska finnas med. Ta fram en sådan lista. Sortera efter (fallande) lön

SELECT last_name, job_id, salary FROM employees WHERE job_id LIKE '%MAN' OR department_id = 50

ORDER BY salary DESC;

3.13 Vilka personer har namn där strängen ’th’ eller strängen ’ll’ ingår

SELECT last_name FROM employees WHERE last_name LIKE '%th%'

OR last_name LIKE '%ll%';

3.14 Vilka anställda har ingen chef? (För en sådan person har chefsnumret, manager_id, värdet NULL)

SELECT last_name FROM employees

WHERE manager_id IS NULL;

Page 3: SQL övningar

3.15 Gör en lista med namn och provision för alla säljare (SA_REP). Provision är produkten av lön och bonus(commission_pct). Sortera så att högsta provisionen kommer först. Använd kolumnalias.

SELECT last_name namn, salary * commission_pct provision FROM employees WHERE job_id = 'SA_REP'

ORDER BY provision DESC;

3.16 Vilka personer har högre bonus än lön?3.17 All personal läkarundersöks 7 dagar efter anställning. Ta fram en lista med

namn, antällningsdag och datum för läkartest. Sortera efter anställningsdag. Använd kolumnalias: NAMN, ANSTÄLLNINGSDAG och TESTDAG

SELECT last_name namn, hire_date anställningsdag,

hire_date + 7 testdag FROM employees

ORDER BY hire_date;

3.18 Kolumner kan konkateneras med tecknet || Exempelvis ger satsen SELECT country_id||'-'||country_name landskod FROM countries;utskriften:

LANDSKOD------------------AR-ArgentinaAU-AustraliaBE-BelgiumBR-Brazil

Gör en lista där förnamn och efternamn på anställda skrivs ut konkatenerat med blanksteg emellan

SELECT first_name || ' ' || last_name "Namn" FROM employees;

3.19 Gör DESCRIBE på tabellen locations och svara sen på följande frågor:Vilken gatuadress har kontoret i Tokyo?

SELECT street_address FROM locations

WHERE city = 'Tokyo';

Page 4: SQL övningar

FUNKTIONER

4.1 Lista i ordning efter avdelningsnummer, alla anställdas namn samt lön ökat med 15%. Den nya lönen skall avrundas till heltal

SELECT department_id "Avdelning", last_name "Namn",

ROUND (salary * 1.15, -2) "Lön" FROM employees

ORDER BY department_id;

4.2 Lista e-postadresser med gemener (små bokstäver) – första bokstaven skall dock vara versal (stor bokstav)

SELECT INITCAP(email) "E-post" FROM employees

ORDER BY department_id;

4.3 Lista anställningsnummer, namn och inkomst för alla anställda som har bonus. Med inkomst menas lön plus eventuell bonus. Ordning efter inkomst

SELECT employee_id "Anst.nr", last_name "Namn", salary + salary * NVL (commission_pct, 0) "Inkomst" FROM employees

ORDER BY "Inkomst";

4.4 Lista namn, anställningsdatum och anställningstid för alla anställda. Antällningstiden ska avrundas till hela år

SELECT last_name "Namn", hire_date "Anställningsdatum", ROUND(MONTHS_BETWEEN(sysdate, hire_date)/12, 0) "Anställningstid" FROM employees ORDER BY "Anställningsdatum";

4.5 Vilken är den största lönen en anställd har? Svar: 24000 kr

SELECT MAX (salary) max_lön FROM employees;

4.6 Hur många rader innehåller employees -tabellen? Svar: 107 st

SELECT COUNT(*) antal FROM employees;

4.7 Hur många anställda har bonus? Svar: 35 st

SELECT COUNT(commission_pct) antal

Page 5: SQL övningar

FROM employees;

4.8 Hur många chefer finns det? Svar: 2 st

SELECT count (*) antal FROM employees

WHERE job_id like '%MGR';

4.9 Hur många anställda har en lön som överstiger 15000? Svar: 3

SELECT count (*) antal FROM employees

WHERE salary > 15000;

4.10 Lista alla typer av jobb samt max- och minlön för resp. jobb. Bokstavsordning efter jobb

SELECT job_id yrke, MAX (salary) MAX, MIN (salary) MIN FROM employees GROUP BY job_id

ORDER BY job_id;

4.11 Vilken är medellönen för chefer? Svar: 12000

SELECT AVG (salary) FROM employees

WHERE job_id LIKE '%MGR';

4.12 Lista alla typer av jobb samt medelinkomsten för resp. jobb. Inkomst = lön + eventuell bonus

SELECT job_id yrke, AVG (salary + salary * NVL (commission_pct, 0)) medelinkomst FROM employees GROUP BY job_id ORDER BY job_id;

4.13 Lista alla typer av jobb

SELECT DISTINCT(job_id) FROM employees;

4.14 Lista avdelningsnummer samt antalet anställda på respektive avdelning

SELECT department_id avd, count(*) antal FROM employees

GROUP BY department_id;

4.15 Som föregående men ta endast med de avdelningar som har mindre än 6 anställda

Page 6: SQL övningar

SELECT department_id avd, count(*) antal FROM employees GROUP BY department_id

HAVING count(*) < 6;

4.16 Lista de avdelningar och medellönen där medellönen överstiger 9000. Mr King ska undantas från beräkningarna

SELECT department_id avd, AVG(salary) medel FROM employees WHERE last_name != 'King' GROUP BY department_id HAVING AVG(salary) > 9000;

4.17 Visa först strukturen för tabellen INVENTION (tabellen innehåller data om ett antal uppfinningar)

4.18 Ta fram namnen på alla uppfinnare som har gjort fler än två uppfinningar. Bokstavsordning efter uppfinnarnas namn

4.19 Finns det i tabellen INVENTION något årtal som har fler än 5 uppfinningar?

4.20 Finns det några länder i tabellen NATION som har lika stor area?

Page 7: SQL övningar

FLERA TABELLER

Lista anställdas namn, lön och avdelningsnamn(department_name) för all personal i employees -tabellen. (Join employees och departments)

SELECT last_name, salary, department_name FROM employees e, departments d WHERE e.department_id = d.department_id;

Som föregående – men ta endast med dem som har en lön som överstiger 5000

SELECT last_name, salary, department_name FROM employees e, departments d WHERE e.department_id = d.department_id AND salary > 5000;

Som övning 9.1 men endast personal på finansavdelningen(Finance) ska vara med i listan

SELECT last_name, salary, department_name FROM employees e, departments d WHERE e.department_id = d.department_id AND department_name = 'Finance';

På vilken avdelning arbetar Fripp?

SELECT last_name, first_name, department_name FROM employees e, departments d WHERE e.department_id = d.department_id AND last_name = 'Fripp';

9.1 Visa först innehållet i tabellen SALGRADE. (LOSAL och HISAL är tal som bestämmer nedre respektive övre gränsen för en viss lönegrad, GRADE).

Gör en lista som visar namn, jobb, lön samt lönegrad för alla i EMP-tabellen(en non-equi-join)

9.2 Som föregående men visa endast dem i lönegrad 3

9.3 Som övning 9.5 men utnyttja även tabellen DEPT för att få med uppgift om avdelningsnamn i listan

9.4 Lista anställdas namn, jobb, avdelningsnamn och ort. Alla avdelningar ska vara med – även de som inte har några anställda. (Outer join)

9.5 Lista alla ansällningsnummer, namn och chefsnummer(MGR) i Emp

9.6 Som föregående men ta även med respektive chefs namn i listan (Gör en self join på EMP tabellen)

9.7 Som föregående med tillse att även personer som inte har någon chef kommer med i listan. (Bygg på föregående till en outer join)

Page 8: SQL övningar

9.8 Som föregående men lägg till kolumner för anställdas lön och chefs lön. Gör en restriktion så att endast de rader där den anställde tjänar mer än sin chef visas.

9.9 Lista alla avdelningsnamn och antalet anställda på respektive avdelning. Med en outer join får vi även med avdelningar som inte har några anställda.

9.10 Lista DEPTNO från DEPT i union med DEPTNO från EMP. (Dvs vilka avdelningar finns i antingen EMP eller DEPT, utan att ta med dubletter)

9.11 Som ovan men visa snittet. (Dvs vilka avdelningar finns i både EMP och DEPT)

9.12 Som ovan men visa differansen. (Dvs vilka avdelningar finns bara i DEPT)

9.13 Visa strukturen för tabellerna INVENTION och NATION. (I NATION finns data om olika länder).

Gör en lista på alla uppfinningar vars namn börjar på bokstaven B. Av listan ska även respektive uppfinnares nationalitet framgå.

9.14 Lista alla länder och antalet uppfinningar som respektive land bidragit med. Sortera med flest uppfinningar först.

9.15 Visa först strukturen hos tabellen BORDER. (I denna tabell beskrivs vilka länder som gränsar till ett land).Vilka länder gränsar till exakt 5 andra länder?

9.16 Lista alla nationer som är öar. (Dessa har inga angränsande länder) (Outer join)

9.17 Lista alla länder som gränsar till andra länder och, för varje land, gränsnationernas namn.

9.18 Lista anställningsnummer och namn på alla chefer i EMP-tabellen samt medellönen för de personer som är direkt underställda respektive chef.

9.19 Visa uppfinnare, årtal och uppfinningar för uppfinningar som har presenterats av svenskar.

9.20 Skriv ett program som läser in namnet på ett land (på engelska) från terminalen och som därefter visar detta lands grannländer

9.21 Jhkj

9.22 kjhkjh