Выдержка из текста работы
- Запустить SQL*PLUS («Пуск» – «Программы» – «Oracle» – «SQL*PLUS»).
- Ввести имя Scott пароль Tiger и удаленное имя base165.
- Просмотреть структуру таблиц EMP, DЕРT (DESC).
SQL>descrdept
Name Null? Type
—————————————————— ——— ————————————
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL>descremp
Name Null? Type
—————————————————— ——— ————————————
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL>
- Выберите всю информацию из таблицы ЕМР.
> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
——- ———- ——— ———- ———- ———- ———- ———-
7839 KING PRESIDENT 17.11.1981 5000
7369 SMITH CLERK 7902 17.12.1980 800 20
7499 ALLEN SALESMAN 7698 20.02.1981 1600 300 30
7521 WARD SALESMAN 7698 22.02.1981 1250 500 30
7566 JONES MANAGER 7839 02.04.1981 2975 20
7654 MARTIN SALESMAN 7698 28.09.1981 1250 1400 30
7698 BLAKE MANAGER 7839 01.05.1981 2850 30
7782 CLARK MANAGER 7839 09.06.1981 2450 10
7788 SCOTT ANALYST 7566 09.12.1982 3000 20
7844 TURNER SALESMAN 7698 08.09.1981 1500 30
7876 ADAMS CLERK 7788 12.01.1983 1100 20
7900 JAMES CLERK 7698 03.12.1981 950 30
7902 FORD ANALYST 7566 03.12.1981 3000 20
7934 MILLER CLERK 7782 23.01.1982 1300 10
- Выберите всю информацию из таблицы DЕРT.
select * from dept;
DEPTNO DNAME LOC
—— ————— ———
50 MARKETING PARIS
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
- Выдайте имена всех служащих и их годовой доход (годовая зарплата плюс премия), используйте заменитель имен столбцов.
SQL> select ename,sal*12+nvl(comm,0) Year_sal from emp;
ENAME YEAR_SAL
———- ———-
KING 60000
SMITH 9600
ALLEN 19500
WARD 15500
JONES 35700
MARTIN 16400
BLAKE 34200
CLARK 29400
SCOTT 36000
TURNER 18000
ADAMS 13200
JAMES 11400
FORD 36000
MILLER 15600
14 rowsselected.
- Выдайте все имеющиеся в таблице ЕМР комбинации номеров отделов и должностей.
SQL> select distinct deptno,job from emp;
DEPTNO JOB
———- ———
20 CLERK
30 SALESMAN
20 MANAGER
30 CLERK
30 MANAGER
10 CLERK
PRESIDENT
10 MANAGER
20 ANALYST
9 rows selected.
- Получить имена и зарплату всех служащих, увеличенную на 15% и округленную до целых.
SQL> select ename,floor(sal*1.15) New_salary from emp;
ENAME NEW_SALARY
———- ———-
KING 5750
SMITH 920
ALLEN 1840
WARD 1437
JONES 3421
MARTIN 1437
BLAKE 3277
CLARK 2817
SCOTT 3450
TURNER 1725
ADAMS 1265
JAMES 1092
FORD 3450
MILLER 1495
14 rows selected.
- Определить сотрудников, которые были зачислены на работу до января 1979 и после февраля 1981 годов. Результаты упорядочить в порядке убывания даты зачисления на работу.
SQL> select ename,hiredate from emp where hiredate not between ‘01.01.1979’ and ‘01.03.1981’ order by hiredate;
ENAME HIREDATE
———- ———-
JONES 02.04.1981
BLAKE 01.05.1981
CLARK 09.06.1981
TURNER 08.09.1981
MARTIN 28.09.1981
KING 17.11.1981
JAMES 03.12.1981
FORD 03.12.1981
MILLER 23.01.1982
SCOTT 09.12.1982
ADAMS 12.01.1983
11 rows selected.
- Определить аналитиков 20 отдела и клерков 30 отдела, зачисленных на работу в январе.
selectename,job from emp where deptno=20 and job=’ANALYST’ and hiredate like ‘%.01.%’union select ename,job from emp where deptno=30 and job=’CLERK’ and hiredate like ‘%.01.%’;
no rows selected
- Определить сотрудников, которыми никто не руководит.
SQL> select * from emp where mgr is null;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- ———- ——— ———- ———- ———- ———- ———-
7839 KING PRESIDENT 17.11.1981 5000
SQL>
- Вывести сотрудников, табельные номера менеджеров которых 7755, 5889, 2578.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- ———- ——— ———- ———- ———- ———- ———-
7839 KING PRESIDENT 17.11.1981 5000
SQL> select * from emp where mgr in (7755,5889,2578);
No rows selected
- Определить сотрудников 10 отдела, занимающих должность менеджера или имеющих годовой доход более 3000.
SQL> select * from emp where deptno=10 and (sal=3000 or job=’MANAGER’)
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- ———- ——— ———- ———- ———- ———- ———-
7782 CLARK MANAGER 7839 09.06.1981 2450 10
- Найти всех клерков или аналитиков, имена которых содержат комбинации TH или LL. Данные вывести в порядке возрастания их зарплат.
SQL> select * from emp where (ename like ‘%TH%’orename like ‘%ll%’) and job in (‘CLERK’,’ANALYST’) order by sal;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- ———- ——— ———- ———- ———- ———- ———-
7369 SMITH CLERK 7902 17.12.1980 800 20
- Найдите всех сотрудников с определенной должностью, используя переменные подстановки. Сделайте поиск независимым от регистра, на котором вводятся значения должностей.
SQL> select * from emp where job=upper(‘&dolg’);
Enter value for dolg: clerk
old 1: select * from emp where job=upper(‘&dolg’)
new 1: select * from emp where job=upper(‘clerk’)
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- ———- ——— ———- ———- ———- ———- ———-
7369 SMITH CLERK 7902 17.12.1980 800 20
7876 ADAMS CLERK 7788 12.01.1983 1100 20
7900 JAMES CLERK 7698 03.12.1981 950 30
7934 MILLER CLERK 7782 23.01.1982 1300 10
- Вывести всех служащих в иерархическом порядке, определяемом должностной подчиненностью. Используйте псевдостолбецLEVEL, чтобы выбрать два первых уровня управленческой иерархии, и функцию LPAD для организации вывода данных со сдвижкой на 2 позиции каждого уровня иерархии.
SQL> select lpad(‘—-‘,level),ename,job from emp where level in (1,2) start with job=’PRESIDENT’ connect by prior empno=mgr;
LPAD(‘—-‘,LEVEL)
—————————————————————————————————-
ENAME JOB
———- ———
KING PRESIDENT
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
- Вывести всех служащих в иерархическом порядке, определяемом должностной подчиненностью, кроме аналитиков.x\\
SQL> select * from emp where job!=’ANALYST’ start with job=’PRESIDENT’ connect by prior empno=mgr;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- ———- ——— ———- ———- ———- ———- ———-
7839 KING PRESIDENT 17.11.1981 5000
7566 JONES MANAGER 7839 02.04.1981 2975 20
7876 ADAMS CLERK 7788 12.01.1983 1100 20
7369 SMITH CLERK 7902 17.12.1980 800 20
7698 BLAKE MANAGER 7839 01.05.1981 2850 30
7499 ALLEN SALESMAN 7698 20.02.1981 1600 300 30
7521 WARD SALESMAN 7698 22.02.1981 1250 500 30
7654 MARTIN SALESMAN 7698 28.09.1981 1250 1400 30
7844 TURNER SALESMAN 7698 08.09.1981 1500 30
7900 JAMES CLERK 7698 03.12.1981 950 30
7782 CLARK MANAGER 7839 09.06.1981 2450 10
7934 MILLER CLERK 7782 23.01.1982 1300 10
12 rowsselected.
- Определите переменную, хранящую арифметическое выражение для вычисления годового дохода служащего. Используйте эту переменную для того, чтобы найти всех служащих с годовым доходом, превышающим $30000.
SQL> define year_sal=sal*12+nvl(comm,0)
SQL> select * from emp where &year_sal>30000;
old 1: select * from emp where &year_sal>30000
new 1: select * from emp where sal*12+nvl(comm,0)>30000
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
———- ———- ——— ———- ———- ———- ———- ———-
7839 KING PRESIDENT 17.11.1981 5000
7566 JONES MANAGER 7839 02.04.1981 2975 20
7698 BLAKE MANAGER 7839 01.05.1981 2850 30
7788 SCOTT ANALYST 7566 09.12.1982 3000 20
7902 FORD ANALYST 7566 03.12.1981 3000 20
- Напишите запрос, позволяющий получить первый понедельник через два месяца после текущей даты в формате «DayddMonthYYYY».
SQL> select next_day(add_months(sysdate,2),1) from emp;
NEXT_DAY(A
———-
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
25.01.2016
14 rows selected.
- Определите, сколько клерков работает в компании, не выдавая по ним никаких данных.
SQL> select count(*) from emp where job=’CLERK’;
COUNT(*)
———-
- Вычислите максимальную, среднюю и минимальную зарплату для каждой должности в отделе.
SQL> select min(sal),max(sal),avg(sal) from emp group by deptno;
MIN(SAL) MAX(SAL) AVG(SAL)
———- ———- ———-
5000 5000 5000
950 2850 1566,66667
800 3000 2175
1300 2450 1875
- Вычислите, сколько различных должностей есть в компании
SQL> (select count(distinct job) JOB from emp);
———-
- Определить среднюю зарплату сотрудников, зачисленных на работу в 1981 году.
SQL> select avg(sal) Average_sal from emp where hiredate like ‘%1981’;
AVERAGE_SAL
————
2282,5
- Определите количество служащих в каждом отделе компании.
SQL> select deptno,count(*) from emp group by deptno;
DEPTNO COUNT(*)
———- ———-
30 6
20 5
10 2
- Найдите отделы, в которых работает больше 3-х служащих.
SQL> select count(*),deptno from emp group by deptno having count(*)>3;
COUNT(*) DEPTNO
———- ———-
6 30
5 20
- Определить количество сотрудников компании, которые получают премию, размер которой от 100 до 400$.
SQL> select count(*) from emp where comm between 100 and 400;
COUNT(*)
———-
- Определить отделы, в которых суммарный годовой доход больше 30000. При расчете не учитывать 10 отдел.
SQL> select deptno from emp where deptno!=10 group by deptno having sum(sal*12+nvl(comm,0))>30000;
DEPTNO
———-
Вывод:Ознакомились с синтаксисом языкаSQLи закрепили полученные знания на практике. Научились извлекать информацию из базы данных с помощью команд языкаSQL.