Upload
malin-johansson
View
199
Download
0
Embed Size (px)
Citation preview
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;
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;
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';
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
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
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?
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)
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