Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 1 Übungsaufgaben mit Lösungen 1) Ausgabe sämtlicher Spalten der Tabelle DEPARTMENT. SELECT * FROM DEPARTMENT 2) Ausgabe aller Projektnummern und Projektnamen. SELECT PROJNO, PROJNAME FROM PROJECT 3) Ausgabe von Vorname, Nachname und Telefonnummer sämtlicher Mitarbeiter. SELECT FIRSTNAME, LASTNAME, PHONENO 4) Ausgabe aller verschiedenen Berufe. SELECT DISTINCT JOB
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 2 5) Ausgabe von Nachname und Abteilungsnummer der Mitarbeiter, die in Abteilung Nr. D21 arbeiten. SELECT LASTNAME, WORKDEPT WHERE WORKDEPT = 'D21' 6) Zeigen Sie die Mitarbeiter auf, die mehr als 40000 GE verdienen. SELECT LASTNAME, SALARY WHERE SALARY > 40000 7) Ausgabe der Projekte, die mindestens einen Personalbedarf von 2 Personen haben. SELECT PROJNO, PROJNAME, PRSTAFF FROM PROJECT WHERE PRSTAFF >=2 8) Liste der Mitarbeiter, die im Projekt IF1000 tätig sind und diesem Projekt 50% ihrer Arbeitskraft widmen. SELECT EMPNO, PROJNO, EMPTIME _ACTIVITY WHERE PROJNO = 'IF1000' AND EMPTIME = 0.5 9) Nachname, Bonus und Provision der Mitarbeiter, die überhaupt einen Bonus bekommen, und die eine Provision von mindestens 2500 GE erhalten. SELECT LASTNAME, BONUS, COMM
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 3 WHERE BONUS IS NOT NULL AND COMM >= 2500 10) Ausgabe aller Mitarbeiter, die zwischen 20000 und 25000 GE verdienen. SELECT LASTNAME, SALARY WHERE SALARY BETWEEN 20000 AND 25000 11) Ausgabe der Mitarbeiter, die in Abteilung D21 arbeiten, und deren Ausbildung zwischen 15 und 17 Jahren liegt. SELECT LASTNAME, WORKDEPT, EDLEVEL WHERE WORKDEPT = 'D21' AND EDLEVEL BETWEEN 15 AND 17 12) Ausgabe von Abteilungsnummer und -name der Abteilungen, deren Nummern zwischen A00 und D21 liegen. SELECT DEPTNO, DEPTNAME FROM DEPARTMENT WHERE DEPTNO BETWEEN 'A00' AND 'D21' 13) Ausgabe aller verschiedenen Berufe der Mitarbeiter aus Abteilung B01, C01, D11 und E21. SELECT DISTINCT JOB WHERE WORKDEPT IN ('B01', 'C01', 'D11', 'E21') 14) Ausgabe aller Projekte, deren Nummer mit 'MA' beginnt.
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 4 SELECT PROJNO, PROJNAME FROM PROJECT WHERE PROJNO LIKE 'MA%' 15) Liste aller Mitarbeiter, die eine vierstellige Telefonnummer haben, und deren Nachname mit 'S' beginnt. SELECT LASTNAME, PHONENO WHERE LASTNAME LIKE 'S%' AND PHONENO LIKE ' ' 16) Ausgabe der Abteilungen, die in der Spalte MGRNO einen Eintrag haben. SELECT DEPTNO, DEPTNAME, MGRNO FROM DEPARTMENT WHERE MGRNO IS NOT NULL 17) Ausgabe des höchsten Gehaltes. SELECT MAX(SALARY) 18) Ermitteln Sie die Anzahl der Mitarbeiter, die Provision erhalten. SELECT COUNT(*) WHERE COMM IS NOT NULL
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 5 19) Ermitteln Sie die Summe der Gehälter, den maximalen Bonus und die minimale Provision. SELECT SUM(SALARY), MAX(BONUS), MIN(COMM) 20) Ermitteln Sie den Gesamtpersonalbedarf aller Projekte. SELECT SUM(PRSTAFF) FROM PROJECT 21) Ausgabe von Nachname, Beruf und Gesamteinkommen (Gehalt + Bonus + Provision) derjenigen Mitarbeiter, die ein Gesamteinkommen von mindestens 45000 GE haben. SELECT LASTNAME, JOB, (SALARY + BONUS + COMM) WHERE (SALARY + BONUS + COMM) >= 45000 22) Ausgabe von Nachname, Gehalt, Provision und 8% des Gehaltes derjenigen, deren Provision höher ist als 8% ihres Gehaltes. SELECT LASTNAME, SALARY, COMM, (SALARY * 0.08) WHERE COMM > SALARY * 0.08 23) Ausgabe aller Abteilungen alphabetisch geordnet nach Abteilungsnamen. SELECT DEPTNO, DEPTNAME FROM DEPARTMENT ORDER BY 2 24) Ausgabe von Abteilungsnummer, Nachname und Beruf aller Mitarbeiter mit Personalnummern zwischen 000100 und 000320. Die Liste soll aufsteigend nach Abteilungsnummern und innerhalb der Abteilungsnummern absteigend nach Nachnamen sortiert sein.
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 6 SELECT WORKDEPT, LASTNAME, JOB WHERE EMPNO BETWEEN '000100' AND '000320' ORDER BY WORKDEPT ASC, LASTNAME DESC oder [ORDER BY 1 ASC, 2 DESC] 25) Ausgabe aller Projekte der Abteilungen A00, D11, D21 und E11 aufsteigend sortiert nach Abteilungsnummer und innerhalb der Abteilungsnummer nach ihrem Projektenddatum. SELECT PROJNAME, DEPTNO, PRENDATE FROM PROJECT WHERE DEPTNO IN ('A00', 'D11', 'D21', 'E11') ORDER BY 2, 3 26) Ausgabe der Nachnamen der Manager, zugehörige Abteilungsnummer und -name, geordnet nach Abteilungsnummer. SELECT LASTNAME, WORKDEPT, DEPTNAME, DEPARTMENT WHERE DEPTNO = WORKDEPT AND JOB = 'MANAGER' ORDER BY WORKDEPT 27) Ausgabe von Projektname und Vor- und Nachname des Projektleiters, der Projekte, die einen geschätzten Personalbedarf von 1 Person haben. SELECT PROJNAME, FIRSTNME, LASTNAME FROM PROJECT, EMPLOYEE WHERE RESPEMP = EMPNO AND PRSTAFF = 1 28) Ausgabe von Personalnummer, Nachname, Projektnummer und zeitliche Beanspruchung derjenigen, die ab 01.01.82 in einem Projekt tätig sind.
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 7 SELECT EMPLOYEE.EMPNO, LASTNAME, PROJNO, EMPTIME, EMPLOYEE_ACTIVITY WHERE EMPLOYEE.EMPNO = EMPLOYEE_ACTIVITY.EMPNO AND EMSTDATE = '01.01.82' 29) Ausgabe von Personalnummer, Anfangsdatum der Einzelaktivität und Datum des Projektstartes jener Mitarbeiter, die am Anfang des Projektes mitarbeiten. SELECT EMPNO, EMSTDATE, PRSTDATE _ACTIVITY, PROJECT WHERE EMPLOYEE_ACTIVITY.PROJNO = PROJECT.PROJNO AND EMSTDATE = PRSTDATE
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 8 30) Ausgabe von Nachname und Gehalt derjenigen, die über 35000 oder unter 20000 verdienen. Diejenigen über 35000 sollen den Zusatz 'gute Verdiener', die unter 20000 den Zusatz 'schlechte Verdiener' erhalten. Die Ausgabe soll nach Nachnamen sortiert erfolgen. SELECT LASTNAME, SALARY, 'GUTER VERDIENER ' WHERE SALARY > 35000 UNION SELECT LASTNAME, SALARY, 'SCHLECHTER VERDIENER' WHERE SALARY < 20000 ORDER BY 1 31) Ausgabe der Durchschnittsgehälter aller Frauen und Männer. Die Frauen sollen den Zusatz 'Frauen', die Männer den Zusatz 'Männer' erhalten. SELECT AVG(SALARY), 'FRAUEN' WHERE SEX = 'F' UNION SELECT AVG(SALARY), 'MÄNNER' WHERE SEX = 'M'
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 9 32) Ausgabe der Durchschnittsgehälter je Berufsgruppe. SELECT JOB, AVG(SALARY) GROUP BY JOB 33) Ausgabe der höchsten Edlevel je Abteilung. Es sollen nur die Abteilungen ausgegeben werden, mit einem 'D' oder 'E' beginnen. SELECT WORKDEPT, MAX(EDLEVEL) WHERE WORDEPT LIKE 'E%' OR WORKDEPT LIKE 'D%' GROUP BY WORKDEPT 34) Es soll eine Liste aller Mitarbeiter mit der Anzahl an verschiedenen Projekten, an denen sie mitarbeiten, ausgegeben werden. SELECT EMPNO, COUNT(DISTINCT PROJNO) _ACTIVITY GROUP BY EMPNO
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 10 35) Besteht ein Zusammenhang zwischen Edlevel und Gesamteinkommen? Erstellen Sie eine Tabelle, die das durchschnittliche Gesamteinkommen je Edlevel wiederspiegelt. Die Ausgabe soll absteigend nach Edlevel erfolgen. SELECT EDLEVEL, AVG(SALARY + BONUS + COMM) GROUP BY EDLEVEL ORDER BY 1 DESC 36) Ausgabe der Abteilungen mit Durchschnittsgehältern, in denen mehr als 3 Mitarbeiter arbeiten. SELECT WORKDEPT, AVG(SALARY) GROUP BY WORKDEPT HAVING COUNT(*) > 3 37) Ausgabe der Personalnummer, Nachname, Job und Provision derjenigen, die eine überdurchschnittliche Provision erhalten, alphabetisch sortiert nach Namen. SELECT EMPNO, LASTNAME, JOB, COMM WHERE COMM > (SELECT AVG(COMM) ) ORDER BY LASTNAME 38) Ausgabe von Nachname, Vorname und Einstellungsdatum derjenigen, die nach William Jones eingestellt wurden. SELECT FIRSTNME, LASTNAME, HIREDATE WHERE HIREDATE > (SELECT HIREDATE WHERE LASTNAME = 'JONES')
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 11 39) Ausgabe das Nachnamens, Berufes, Gehaltes und der Abteilung der Mitarbeiter, die mehr verdienen als irgendein Mitarbeiter aus Abteilung C01. SELECT LASTNAME, JOB, SALARY, WORKDEPT WHERE SALARY > ANY (SELECT SALARY WHERE WORKDEPT = 'C01') 40) Ausgabe das Nachnamens, Berufes, Gehaltes und der Abteilung der Mitarbeiter, die mehr verdienen als alle Mitarbeiter aus Abteilung C01. SELECT LASTNAME, JOB, SALARY, WORKDEPT WHERE SALARY > ALL (SELECT SALARY WHERE WORKDEPT = 'C01') 41) Einfügen eines beliebigen Satzes in die Tabelle PROJECT. z.b. INSERT INTO PROJECT VALUES ('IF3000', 'SURFEN', 'A00', '000340', 1, '01.04.90', '01.04.91') 42) Löschen des unter 41) angelegten Satzes. z.b. DELETE FROM PROJECT WHERE PROJNO = 'IF3000' 43) Alle Frauen erhalten eine 5%ige Gehaltserhöhung. UPDATE EMPLOYEE
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 12 SET SALARY = SALARY * 1.05 WHERE SEX = 'F' 44) Legen Sie die Tabelle PRODUKTE an. Sie soll die Spalten Produktnummer, Produktname, Lieferant und Preis enthalten. Überlegen Sie sich geeignete Datentypen! CREATE TABLE PRODUKTE (PRODUKTNUMMER VARCHAR (7), PRODUKTNAME VARCHAR (9), LIEFERANT VARCHAR (8), PREIS DEC (3,2)) 45) Erstellen Sie die Benutzersicht EMP der Tabelle EMPLOYEE. Sie soll alle Personalnummern, Nachnamen und Abteilungen enthalten. CREATE VIEW EMP AS SELECT EMPNO, LASTNAME, WORKDEPT 46) Fügen Sie zu der Tabelle EMPLOYEE die Spalte Wohnort hinzu. ALTER TABLE EMPLOYEE ADD WOHNORT VARCHAR (10) 47) Löschen Sie die unter 44) angelegte Tabelle. DROP TABLE PRODUKTE 48) Räumen Sie einer Userid für die Tabelle EMPLOYEE die Rechte SELECT und INSERT ein. GRANT SELECT, INSERT ON EMPLOYEE
Abt. Wi.-Inf. II Wirtschaftsinformatik II: SQL 13 TO userid 49) Räumen Sie einer Userid alle Rechte für die Tabelle PROJECT ein, einschließlich dem Recht, die erhaltenen Rechte weiterzugeben. GRANT ALL ON PROJECT TO userid WITH GRANT OPTION 50) Ziehen Sie die unter 48) eingeräumten Rechte wieder zurück. REVOKE SELECT, INSERT ON EMPLOYEE FROM userid 51) Ziehen Sie die unter 49) eingeräumten Rechte wieder zurück. REVOKE ALL ON PROJECT FROM userid