Команда select содержит 4 ошибки

Добавил:

Upload

Опубликованный материал нарушает ваши авторские права? Сообщите нам.

Вуз:

Предмет:

Файл:

blablabla.docx

Скачиваний:

33

Добавлен:

07.12.2018

Размер:

324.98 Кб

Скачать

  • Выборка
    данных из разных таблиц

  • Описание
    структуры таблиц

  • Выполнение
    арифметических вычислений и задание
    имён столбцов

  • Использование
    iSQL*Plus

  1. вызовите
    iSQL*Plus
    http://pks0.pks:5560/isqlplus

  2. Команды
    iSQL*Plus
    помогают запрашивать данные?
    Нет

  3. Будет
    ли успешна эта команда SELECT?
    SELECT
    *
    FROM job_grades;
    домашнпя
    Да

  4. Команда
    SELECT содержит 4 ошибки.
    Укажите их.
    SELECT employee_id,
    last_name,

salary *
12 ANNUAL_SALARY

FROM employees;

  1. Name

    Null?

    Type

    DEPARTMENT_ID

    NOT NULL

    NUMBER(4)

    DEPARTMENT_NAME

    NOT NULL

    VARCHAR(2)

    MANAGER_ID

    NUMBER(6)

    LOCATION_ID

    NUMBER(4)

    DEPARTMENT_ID

    DEPARTMENT_NAME

    MANAGER_ID

    LOCATION_ID

    10

    Administration

    200

    1700

    20

    Marketing

    201

    1800

    50

    Shipping

    124

    1500

    60

    IT

    103

    1400

    80

    Sales

    149

    2500

    90

    Executive

    100

    1700

    110

    Accounting

    205

    1700

    190

    Contracting

    1700

    Покажите структуру таблицы
    DEPARTMENS. Выберите данные
    из неё.
    desc Departments
    8 row
    selected

Select
DEPARTMENT_ID,DEPARTMENT_NAME,MANAGER_ID,LOCATION_ID

From departments

Where DEPARTMENT_ID in (10,20,50,60,80,90,110,190)

  1. Покажите
    структуру таблицы EMPLOYEES.

desc Employees

  1. Name

    Null?

    Type

    EMPLOYEE_ID

    NOT NULL

    NUMBER(6)

    FIRST_NAME

    VARCHAR2(20)

    LAST_NAME

    NOT NULL

    VARCHAR2(25)

    EMAIL

    NOT NULL

    VARCHAR2(25)

    PHONE_NUMBER

    VARCHAR2(20)

    HIRE_DATE

    NOT NULL

    DATE

    JOB_ID

    NOT NULL

    VARCHAR2(10)

    SALARY

    NUMBER(8,2)

    COMISSION_PCT

    NUMBER(2,2)

    MANAGER_ID

    NUMBER(6)

    DEPARTMENT_ID

    NUMBER(4)

    EMPLOYEE_ID

    LAST_NAME

    JOB_ID

    StartDate

    100

    King

    AD_PRES

    17-JUN-87

    101

    Kochhar

    AD_VP

    21-SEP-89

    102

    De Haan

    AD_VP

    13-JAN-93

    103

    Hunold

    IT_PROG

    03-JAN-90

    104

    Ernst

    IT_PROG

    21-MAY-91

    107

    Lorentz

    IT_PROG

    07-FEB-99

    124

    Mourgos

    ST_MAN

    16-NOV-99

    141

    Rajs

    ST_CLERK

    17-OCT-95

    142

    Davies

    ST_CLERK

    90-JAN-97

    143

    Matos

    ST_CLERK

    15-MAR-98

    144

    Vargas

    ST_CLERK

    09-JUL-98

    Составьте запрос для вывода имени
    каждого служащего, должности, даты
    найма и номера.

Номер служащего должен быть первым.
Сохраните запрос
с именем
lab1_7.sql.
select employee_id, last_name, job_id, hire_date as
«StartDate» from employees;

JOB_ID

AC_ACCOUNT

AC_MGR

AD_ASST

AD_PRES

AD_VP

IT_PROG

MK_MAN

MK_REP

SA_MAN

SA_REP

ST_CLERK

ST_MAN

  1. Составьте
    запрос для вывода неповторяющихся
    должностей из таблицы
    EMPLOYEES.

select
distinct job_id from EMPLOYEES

  1. Employee and Title

    King, AD_PRES

    Kochhar, AD_VP

    De Haan, AD_VP

    Hunold, IT_PROG

    Ernst, IT_PROG

    Lorentz, IT_PROG

    Mourgos, ST_MAN

    Rajs, ST_CLERK

    Davies, ST_CLERK

    Matos, ST_CLERK

    Vargas, ST_CLERK

    Выведите на экран имя, соединённое
    с идентификатором должности через
    запятую и пробел. Назовите
    новый столбец
    Employee and Title
    select FIRST_NAME||’, ‘||JOB_ID as «Employee
    and Title» from EMPLOYEES

  2. Создайте
    запрос для вывода всех данных из таблицы
    EMPLOYEES. Разделите столбцы
    запятыми. Назовите столбец THE_OUTPUT
    select
    EMPLOYEE_ID||’,’|| FIRST_NAME ||’,’|| LAST_NAME ||’,’|| EMAIL
    ||’,’|| PHONE_NUMBER ||’,’|| HIRE_DATE ||’,’|| JOB_ID ||’,’||
    SALARY ||’,’|| COMMISSION_PCT ||’,’|| MANAGER_ID ||’,’||
    DEPARTMENT_ID as «THE_OUTPUT» from EMPLOYEES

THE_OUTPUT

100,Steven,King,SKING,515.123.4567,AD_PRES,17-JUN-87,24000,,90

101,Neena,Kochhar,NKOCHHAR,515.123.4568,AD_VP,100,21-SEP-89,17000,,90

102,Lex,De
Haan,LDEHAAN,515.123.4569,AD_VP,100,13-JAN-93,17000,,90

103,Alexander,Hunold,AHUNOLD,590.423.4567,IT_PROG,102,03-JAN-90,9000,,60

104,Bruce,Ernst,BERNST,590.423.4568,IT_PROG,103,21-MAY-91,6000,,60

107,Diana,LorentzDLORENTZ,590.423.5567,IT_PROG,103,07-FEB-99,4200,,60

…..

Лабораторная работа 2

  • Выборка
    данных и изменение последовательности
    вывода строк

  • Ограничение
    количества возвращаемых строк с помощью
    предложения WHERE

  • Сортировка
    строк с помощью предложения ORDER
    BY

  1. Создайте запрос
    для вывода имени и заработной платы
    служащих, зарабатывающих более $12000.
    Сохраните команду
    SQL в файле
    lab2_1.sql. выполните
    запрос.
    SELECT first_name, salary
    FROM employees where salary>12000

LAST_NAME

SALARY

King

24000

Kochhar

17000

De Haan

17000

Hartstein

13000

  1. Создайте запрос
    для вывода фамилии и номера отдела
    служащего под номером 176

SELECT
last_name, department_id FROM employees where employee_id=176

LAST_NAME

DEPARTMENT_ID

Taylor

80

  1. Измените файл
    lab2_1.sql и
    выведите фамилии и оклады всех служащих,
    чей оклад не входит в диапазон от $5000
    до $12000. сохраните команду SQL
    в файле lab2_3.sql.
    SELECT
    first_name,
    salary FROM
    employees where
    salary>12000 or
    salary<5000

LAST_NAME

SALARY

King

24000

Kochhar

17000

De Haan

17000

Lorentz

4200

Rajs

3500

Davies

3100

Matos

2600

Vargas

2500

Whalen

4400

Hartstein

13000

LAST_NAME

JOB_ID

HIRE_DATE

Matos

ST_CLERK

15-MAR-98

Taylor

SA_REP

24-MAR-98

Выведите фамилию,
идентификатор должности и дату начала
работы всех служащих, нанятых в период
с 20 февраля 1998 по 1 мая 1998 г. Отсортируйте
данные в порядке возрастания даты
найма.
SELECT last_name, job_id,
hire_date FROM employees where hire_date>=’20-FEB-1998′ and
hire_date<=’1-MAY-1998′ Order by hire_date

  1. Выведите фамилию
    и номер отдела всех служащих из отделов
    20 и 50. Отсортируйте данные
    по фамилиям
    в алфавитном
    порядке.
    SELECT LAST_NAME,
    DEPARTMENT_ID FROM employees where department_id in (20,50) Order
    by LAST_NAME

LAST_NAME

DEPARTMENT_ID

Davies

50

Fay

20

Hartstein

20

Matos

50

Mourgos

50

Rajs

50

Vargas

50

7
row selected

  1. Измените файл
    lab2_3.sql для
    вывода фамилий и окладов служащих
    отделов 20 и 50, зарабатывающих от $5000 до
    $12000. Назовите столбцы Employee
    и Monthly Salary,
    соответственно. Вновь сохраните команду
    SQL в файле lab2_6.sql.
    Выполните запрос.
    SELECT
    first_name as «Employee», salary as «Monthly Salary»
    FROM employees where salary>5000 and salary<12000 and
    department_id in (20,50)

EMPLOYEE

Monthly Salary

Mourgos

5800

Fay

6000

  1. Выведите
    фамилию и
    дату найма
    всех служащих,
    нанятых в
    1994 г.
    SELECT last_name, hire_date
    FROM employees where hire_date>’31-DEC-93′ and
    hire_date<‘1-JAN-95’

LAST_NAME

HIRE_DATE

Higgins

07-JUN-94

Gietz

07-JUN-94

  1. Выведите фамилии
    и должности всех служащих, не имеющих
    менеджера.
    SELECT last_name, job_id
    FROM employees where manager_id is null

LAST_NAME

JOB_ID

King

AD_PRES

  1. Выведите фамилию,
    и комиссионные всех служащих,
    зарабатывающих комиссионные. Отсортируйте
    данные в
    порядке убывания
    окладов и
    комиссионных.
    SELECT
    LAST_NAME, SALARY, COMMISSION_PCT FROM employees where
    commission_pct is not null Order by commission_pct desc

LAST_NAME

SALARY

COMMISSION_PCT

Abel

11000

.3

Zlotkey

10500

.2

Taylor

8600

.2

Grant

7000

.15

  1. Выведите
    все фамилии
    служащих, в
    которых третья
    буква – а.
    SELECT
    LAST_NAME FROM employees where last_name like ‘__a%’

LAST_NAME

Grant

Whalen

  1. Выведите фамилии
    всех служащих, в которых есть буквы
    «а» и «е».
    SELECT
    LAST_NAME FROM employees where last_name like ‘%a%’ and last_name
    like ‘%e%’

    LAST_NAME

    De Haan

    Davies

    Whalen

    Hartstein

  2. запросите фамилии,
    должности и оклады всех служащих,
    работающих торговыми представителями
    (SA_REP) или
    клерками на складе (ST_CLERK)
    и с окладом, не равным $2500, $3500 и
    $7000.
    SELECT LAST_NAME, JOB_ID, SALARY FROM
    employees where (job_id = ‘ST_CLERK’ or job_id = ‘SA_REP’) and
    salary not in (2500,3500,7000)

    LAST_NAME

    JOB_ID

    SALARY

    Davies

    ST_CLERK

    3100

    Matos

    ST_CLERK

    2600

    Abel

    SA_REP

    11000

    Taylor

    SA_REP

    8600

  3. Измените lab2_6.sql
    так, чтобы получить фамилии оклады и
    комиссионные всех служащих, у которых
    сумма комиссионных превышает 20%.
    Выполните запрос ещё раз. Сохраните
    запрос в файле lab2_13.sql.

SELECT
LAST_NAME as «Employee», SALARY as «Monthly Salary»,
COMMISSION_PCT FROM employees where commission_pct is not null and
commission_pct>.2 Order by commission_pct desc

Employee

Monthly Salary

COMMISSION_PCT

Zlotkey

10500

.2

Taylor

8600

.2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

  1. ПРАКТИЧЕСКИЕ ЗАНЯТИЯ ПО КУРСУ

  2. ВВЕДЕНИЕ В ORACLE 10g: SQL (Часть 1)

  3. Без ORDER BY как (в каком порядке) выводятся значения в таблице? (см. книгу)

  4. Практическое занятие 1

  5. • Выборка данных из разных таблиц

  6. • Описание структуры таблиц

  7. • Выполнение арифметических вычислений и задание имён столбцов

  8. • Использование iSQL*Plus

  9. 1. Будет ли успешна эта команда SELECT?

  10. SELECT last_name, job_id, salary As sal

  11. FROM employees;

  12. Да/Нет

  13. 2. Будет ли успешна эта команда SELECT?

  14. SELECT *

  15. FROM job_grades;

  16. Да/Нет

  17. 3. Команда SELECT содержит 4 ошибки. Укажите их.

  18. SELECT employee_id, last_name

  19. sal x 12 ANNUAL SALARY

  20. FROM employees;

  21. Верно:

  22. SELECT employee_id, last_name, (salary*12) «ANNUAL SALARY»

  23. FROM employees;

  24. EMPLOYEE_ID LAST_NAME ANNUAL SALARY

  25. ———————- ————————- ———————-

  26. 198 OConnell 31200

  27. 199 Grant 31200

  28. 200 Whalen 52800

  29. 201 Hartstein 156000

  30. 4. Покажите структуру таблицы DEPARTMENTS. Выберите данные из неё.

  31. DESCRIBE departments

  32. SELECT *

  33. FROM departments;

  34. Name Null Type

  35. —————————— ——— ———————————————————————————————————————————————————————————————

  36. DEPARTMENT_ID NOT NULL NUMBER(4)

  37. DEPARTMENT_NAME NOT NULL VARCHAR2(30)

  38. MANAGER_ID NUMBER(6)

  39. LOCATION_ID NUMBER(4)

  40. DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

  41. ———————- —————————— ———————- ———————-

  42. 10 Administration 200 1700

  43. 20 Marketing 201 1800

  44. 30 Purchasing 114 1700

  45. 40 Human Resources 203 2400

  46. 50 Shipping 121 1500

  47. 60 IT 103 1400

  48. Name Null? Type

  49. DEPARTMENT_ID NOT NULL NUMBER(4)

  50. DEPARTMENT_NAME NOT NULL VARCHAR(2)

  51. MANAGER_ID NUMBER(6)

  52. LOCATION_ID NUMBER(4)

  53. DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

  54. 10 Administration 200 1700

  55. 20 Marketing 201 1800

  56. 50 Shipping 124 1500

  57. 60 IT 103 1400

  58. 80 Sales 149 2500

  59. 90 Executive 100 1700

  60. 110 Accounting 205 1700

  61. 190 Contracting 1700

  62. 8 row selected

  63. 5. Покажите структуру таблицы EMPLOYEES.

  64. Составьте запрос для вывода имени каждого служащего, должности, даты найма и номера. Номер служащего должен быть первым. Столбец Hire_date должен отображаться под именем StartDate Сохраните запрос с именем lab1_7.sql.

  65. DESCRIBE EMPLOYEES

  66. SELECT employee_id, last_name, job_id, hire_date AS «StartDate»

  67. FROM employees;

  68. DESCRIBE EMPLOYEES

  69. Name Null Type

  70. —————————— ——— ———————————————————————————————————————————————————————————————

  71. EMPLOYEE_ID NOT NULL NUMBER(6)

  72. FIRST_NAME VARCHAR2(20)

  73. LAST_NAME NOT NULL VARCHAR2(25)

  74. EMAIL NOT NULL VARCHAR2(25)

  75. PHONE_NUMBER VARCHAR2(20)

  76. HIRE_DATE NOT NULL DATE

  77. JOB_ID NOT NULL VARCHAR2(10)

  78. SALARY NUMBER(8,2)

  79. COMMISSION_PCT NUMBER(2,2)

  80. MANAGER_ID NUMBER(6)

  81. DEPARTMENT_ID NUMBER(4)

  82. EMPLOYEE_ID LAST_NAME JOB_ID StartDate

  83. ———————- ————————- ———- ————————-

  84. 198 OConnell SH_CLERK 21.06.07

  85. 199 Grant SH_CLERK 13.01.08

  86. 200 Whalen AD_ASST 17.09.03

  87. 201 Hartstein MK_MAN 17.02.04

  88. 202 Fay MK_REP 17.08.05

  89. 203 Mavris HR_REP 07.06.02

  90. Name Null? Type

  91. EMPLOYEE_ID NOT NULL NUMBER(6)

  92. FIRST_NAME VARCHAR2(20)

  93. LAST_NAME NOT NULL VARCHAR2(25)

  94. EMAIL NOT NULL VARCHAR2(25)

  95. PHONE_NUMBER VARCHAR2(20)

  96. HIRE_DATE NOT NULL DATE

  97. JOB_ID NOT NULL VARCHAR2(10)

  98. SALARY NUMBER(8,2)

  99. COMISSION_PCT NUMBER(2,2)

  100. MANAGER_ID NUMBER(6)

  101. DEPARTMENT_ID NUMBER(4)

  102. EMPLOYEE_ID LAST_NAME JOB_ID StartDate

  103. 100 King AD_PRES 17-JUN-87

  104. 101 Kochhar AD_VP 21-SEP-89

  105. 102 De Haan AD_VP 13-JAN-93

  106. 103 Hunold IT_PROG 03-JAN-90

  107. 104 Ernst IT_PROG 21-MAY-91

  108. 107 Lorentz IT_PROG 07-FEB-99

  109. 124 Mourgos ST_MAN 16-NOV-99

  110. 141 Rajs ST_CLERK 17-OCT-95

  111. 142 Davies ST_CLERK 90-JAN-97

  112. 143 Matos ST_CLERK 15-MAR-98

  113. 144 Vargas ST_CLERK 09-JUL-98

  114. 8. Проверьте выполнение запроса из файла lab1_7.sql, чтобы убедиться, что он выполняется правильно.

  115. 9. Составьте запрос для вывода неповторяющихся должностей из таблицы EMPLOYEES.

  116. SELECT DISTINCT job_id

  117. FROM employees;

  118. JOB_ID

  119. ———-

  120. AC_ACCOUNT

  121. AC_MGR

  122. AD_ASST

  123. AD_PRES

  124. AD_VP

  125. FI_ACCOUNT

  126. FI_MGR

  127. JOB_ID

  128. AC_ACCOUNT

  129. AC_MGR

  130. AD_ASST

  131. AD_PRES

  132. AD_VP

  133. IT_PROG

  134. MK_MAN

  135. MK_REP

  136. SA_MAN

  137. SA_REP

  138. ST_CLERK

  139. ST_MAN

  140. 10. Скопируйте команды из файла lab1_7.sql в окно редактирования iSQL*Plus. Назовите столбцы Emp #, Employee, Job, Hire Date. Выполните запрос ещё раз.

  141. SELECT employee_id AS «Emp#», last_name AS «Employee», job_id AS «Job», hire_date AS «Hire Date»

  142. FROM employees;

  143. Emp# Employee Job Hire Date

  144. ———————- ————————- ———- ————————-

  145. 198 OConnell SH_CLERK 21.06.07

  146. 199 Grant SH_CLERK 13.01.08

  147. 200 Whalen AD_ASST 17.09.03

  148. 201 Hartstein MK_MAN 17.02.04

  149. 202 Fay MK_REP 17.08.05

  150. 203 Mavris HR_REP 07.06.02

  151. Emp # Employee Job Hire Date

  152. 100 King AD_PRES 17-JUN-87

  153. 101 Kochhar AD_VP 21-SEP-89

  154. 102 De Haan AD_VP 13-JAN-93

  155. 103 Hunold IT_PROG 03-JAN-90

  156. 104 Ernst IT_PROG 21-MAY-91

  157. 107 Lorentz IT_PROG 07-FEB-99

  158. 124 Mourgos ST_MAN 16-NOV-99

  159. 141 Rajs ST_CLERK 17-OCT-95

  160. 142 Davies ST_CLERK 90-JAN-97

  161. 143 Matos ST_CLERK 15-MAR-98

  162. 144 Vargas ST_CLERK 09-JUL-98

  163. 11. Выведите на экран имя, соединённое с идентификатором должности через запятую и пробел. Назовите новый столбец Employee and Title

  164. SELECT last_name ||’, ‘|| job_id

  165. AS «Employee and Title»

  166. FROM employees;

  167. Employee and Title

  168. ————————————

  169. Abel,SA_REP

  170. Ande,SA_REP

  171. Atkinson,ST_CLERK

  172. Austin,IT_PROG

  173. Baer,PR_REP

  174. 12. Создайте запрос для вывода всех данных из таблицы EMPLOYEES. Разделите столбцы запятыми. Назовите столбец THE_OUTPUT

  175. SELECT employee_id ||’,’|| first_name ||’,’|| last_name ||’,’|| email ||’,’|| phone_number ||’,’|| hire_date ||’,’|| job_id ||’,’|| salary ||’,’|| commission_pct ||’,’|| manager_id ||’,’|| department_id

  176. AS the_output

  177. FROM employees;

  178. THE_OUTPUT

  179. ——————————————————————————————————————————————————————————————————————————————————————————————————————————

  180. 198,Donald,OConnell,DOCONNEL,650.507.9833,21.06.07,SH_CLERK,2600,,124,50

  181. 199,Douglas,Grant,DGRANT,650.507.9844,13.01.08,SH_CLERK,2600,,124,50

  182. 200,Jennifer,Whalen,JWHALEN,515.123.4444,17.09.03,AD_ASST,4400,,101,10

  183. 201,Michael,Hartstein,MHARTSTE,515.123.5555,17.02.04,MK_MAN,13000,,100,20

  184. 202,Pat,Fay,PFAY,603.123.6666,17.08.05,MK_REP,6000,,201,20

  185. Практическое занятие 2

  186. • Выборка данных и изменение последовательности вывода строк

  187. • Ограничение количества возвращаемых строк с помощью предложения WHERE

  188. • Сортировка строк с помощью предложения ORDER BY

  189. 1. Создайте запрос для вывода имени и заработной платы служащих, зарабатывающих более $12000. Сохраните команду SQL в файле lab2_1.sql. выполните запрос.

  190. SELECT last_name, salary

  191. FROM employees

  192. WHERE salary > 12000;

  193. LAST_NAME SALARY

  194. ————————- ———————-

  195. Hartstein 13000

  196. Higgins 12008

  197. King 24000

  198. LAST_NAME SALARY

  199. King 24000

  200. Kochhar 17000

  201. De Haan 17000

  202. Hartstein 13000

  203. 2. Создайте запрос для вывода фамилии и номера отдела служащего под номером 176

  204. SELECT last_name, department_id

  205. FROM employees

  206. WHERE employee_id = 176;

  207. LAST_NAME DEPARTMENT_ID

  208. ————————- ———————-

  209. Taylor 80

  210. LAST_NAME DEPARTMENT_ID

  211. Taylor 80

  212. 3. Измените файл lab2_1.sql и выведите фамилии и оклады всех служащих, чей оклад не входит в диапазон от $5000 до $12000. сохраните команду SQL в файле lab2_3.sql.

  213. SELECT last_name, salary

  214. FROM employees

  215. WHERE salary

  216. NOT BETWEEN 5000 AND 12000;

  217. LAST_NAME SALARY

  218. ————————- ———————-

  219. OConnell 2600

  220. Grant 2600

  221. Whalen 4400

  222. Hartstein 13000

  223. Higgins 12008

  224. King 24000

  225. LAST_NAME SALARY

  226. King 24000

  227. Kochhar 17000

  228. De Haan 17000

  229. Lorentz 4200

  230. Rajs 3500

  231. Davies 3100

  232. Matos 2600

  233. Vargas 2500

  234. Whalen 4400

  235. Hartstein 13000

  236. LAST_NAME JOB_ID HIRE_DATE

  237. Matos ST_CLERK 15-MAR-98

  238. Taylor SA_REP 24-MAR-98

  239. 4. Выведите фамилию, идентификатор должности и дату начала работы всех служащих, нанятых в период с 20 февраля 2008 по 1 мая 2008 г. Отсортируйте данные в порядке возрастания даты найма.

  240. SELECT last_name, job_id, hire_date

  241. FROM employees

  242. WHERE hire_date >= ‘20.02.2008’

  243. AND hire_date <= ‘01.05.2008’

  244. ORDER BY hire_date;

  245. LAST_NAME JOB_ID HIRE_DATE

  246. ————————- ———- ————————-

  247. Lee SA_REP 23.02.08

  248. Markle ST_CLERK 08.03.08

  249. Ande SA_REP 24.03.08

  250. Banda SA_REP 21.04.08

  251. Kumar SA_REP 21.04.08

  252. 5. Выведите фамилию и номер отдела всех служащих из отделов 20 и 50. Отсортируйте данные по фамилиям в алфавитном порядке.

  253. SELECT last_name, department_id

  254. FROM employees

  255. WHERE department_id = 20

  256. OR department_id = 50

  257. ORDER BY last_name;

  258. LAST_NAME DEPARTMENT_ID

  259. ————————- ———————-

  260. Atkinson 50

  261. Bell 50

  262. Bissot 50

  263. Bull 50

  264. Cabrio 50

  265. Chung 50

  266. Davies 50

  267. Dellinger 50

  268. Dilly 50

  269. Everett 50

  270. Fay 20

  271. Feeney 50

  272. LAST_NAME DEPARTMENT_ID

  273. Davies 50

  274. Fay 20

  275. Hartstein 20

  276. Matos 50

  277. Mourgos 50

  278. Rajs 50

  279. Vargas 50

  280. 7 row selected

  281. 6. Измените файл lab2_3.sql для вывода фамилий и окладов служащих отделов 20 и 50, зарабатывающих от $5000 до $12000. Назовите столбцы Employee и Monthly Salary, соответственно. Вновь сохраните команду SQL в файле lab2_6.sql. Выполните запрос.

  282. SELECT last_name AS employee, salary AS «Monthly Salary»

  283. FROM employees

  284. WHERE department_id IN (20, 50)

  285. AND salary BETWEEN 5000

  286. AND 12000;

  287. EMPLOYEE Monthly Salary

  288. ————————- ———————-

  289. Fay 6000

  290. Weiss 8000

  291. Fripp 8200

  292. Kaufling 7900

  293. Vollman 6500

  294. Mourgos 5800

  295. EMPLOYEE Monthly Salary

  296. Mourgos 5800

  297. Fay 6000

  298. 7. Выведите фамилию и дату найма всех служащих, нанятых в 2004 г.

  299. SELECT last_name, hire_date

  300. FROM employees

  301. WHERE hire_date LIKE ‘%04’;

  302. LAST_NAME HIRE_DATE

  303. ————————- ————————-

  304. Hartstein 17.02.04

  305. Weiss 18.07.04

  306. Mallin 14.06.04

  307. Russell 01.10.04

  308. King 30.01.04

  309. LAST_NAME HIRE_DATE

  310. Higgins 07-JUN-94

  311. Gietz 07-JUN-94

  312. 8. Выведите фамилии и должности всех служащих, не имеющих менеджера.

  313. SELECT last_name, job_id

  314. FROM employees

  315. WHERE manager_id IS NULL;

  316. LAST_NAME JOB_ID

  317. ————————- ———-

  318. King AD_PRES

  319. LAST_NAME JOB_ID

  320. King AD_PRES

  321. 9. Выведите фамилию, оклады и комиссионные всех служащих, зарабатывающих комиссионные. Отсортируйте данные в порядке убывания окладов и комиссионных.

  322. SELECT last_name, salary, commission_pct

  323. FROM employees

  324. WHERE commission_pct IS NOT NULL

  325. ORDER BY salary DESC, commission_pct DESC;

  326. LAST_NAME SALARY COMMISSION_PCT

  327. ————————- ———————- ———————-

  328. Russell 14000 0,4

  329. Partners 13500 0,3

  330. Errazuriz 12000 0,3

  331. Ozer 11500 0,25

  332. Cambrault 11000 0,3

  333. Abel 11000 0,3

  334. Vishney 10500 0,25

  335. LAST_NAME SALARY COMMISSION_PCT

  336. Abel 11000 .3

  337. Zlotkey 10500 .2

  338. Taylor 8600 .2

  339. Grant 7000 .15

  340. 10. Создайте запрос для вывода фамилии и зарплаты сотрудников, у которых зарплата превышает некоторое заданное значение, которое вводится при выполнении запроса. Сохраните этот запрос в файле lab2_10.sql

  341. SELECT last_name, salary

  342. FROM employees

  343. WHERE salary > &salary_num;

  344. FROM employees

  345. WHERE salary > 5000

  346. LAST_NAME SALARY

  347. ————————- ———————-

  348. Hartstein 13000

  349. Fay 6000

  350. Mavris 6500

  351. Baer 10000

  352. Higgins 12008

  353. Gietz 8300

  354. King 24000

  355. Kochhar 17000

  356. De Haan 17000

  357. 11. Создайте запрос для вывода номеров сотрудников, фамилий сотрудников, зарплаты и отдела. Номер руководителя сотрудников должен вводиться при выполнении запроса

  358. SELECT employee_id, last_name, salary, department_id

  359. FROM employees

  360. WHERE manager_id = &manager_num;

  361. WHERE manager_id = 103

  362. EMPLOYEE_ID LAST_NAME SALARY DEPARTMENT_ID

  363. ———————- ————————- ———————- ———————-

  364. 104 Ernst 6000 60

  365. 105 Austin 4800 60

  366. 106 Pataballa 4800 60

  367. 12. Выведите все фамилии служащих, в которых третья буква – а.

  368. SELECT last_name

  369. FROM employees

  370. WHERE last_name LIKE ‘__a%’;

  371. LAST_NAME

  372. ————————-

  373. Grant

  374. Grant

  375. Whalen

  376. LAST_NAME

  377. Grant

  378. Whalen

  379. 13. Выведите фамилии всех служащих, в которых есть буквы «а» и «е».

  380. SELECT last_name

  381. FROM employees

  382. WHERE last_name LIKE ‘%a%’

  383. AND last_name LIKE ‘%e%’;

  384. LAST_NAME

  385. ————————-

  386. Baer

  387. Bates

  388. Colmenares

  389. Davies

  390. De Haan

  391. Faviet

  392. Fleaur

  393. Gates

  394. Hartstein

  395. Markle

  396. LAST_NAME

  397. De Haan

  398. Davies

  399. Whalen

  400. Hartstein

  401. 14. Запросите фамилии, должности и оклады всех служащих, работающих торговыми представителями (SA_REP) или клерками на складе (ST_CLERK) и с окладом, не равным $2500, $3500 и $7000.

  402. SELECT last_name, job_id, salary

  403. FROM employees

  404. WHERE (job_id IN (‘SA_REP’, ‘ST_CLERK’))

  405. AND (salary NOT IN (2500, 3500, 7000));

  406. LAST_NAME JOB_ID SALARY

  407. ————————- ———- ———————-

  408. Tucker SA_REP 10000

  409. Bernstein SA_REP 9500

  410. Hall SA_REP 9000

  411. Olsen SA_REP 8000

  412. Cambrault SA_REP 7500

  413. King SA_REP 10000

  414. Sully SA_REP 9500

  415. McEwen SA_REP 9000

  416. Smith SA_REP 8000

  417. Doran SA_REP 7500

  418. LAST_NAME JOB_ID SALARY

  419. Davies ST_CLERK 3100

  420. Matos ST_CLERK 2600

  421. Abel SA_REP 11000

  422. Taylor SA_REP 8600

  423. 15. Измените lab2_6.sql так, чтобы получить фамилии оклады и комиссионные всех служащих, у которых сумма комиссионных составляет 20%. Выполните запрос ещё раз. Сохраните запрос в файле lab2_15.sql.

  424. DEFINE commission_num = .2

  425. SELECT last_name AS «Employee», salary AS «Monthly Salary», commission_pct

  426. FROM employees

  427. WHERE commission_pct = &commission_num;

  428. UNDEFINE commission_num

  429. или

  430. SELECT last_name AS «Employee», salary AS «Monthly Salary», commission_pct

  431. FROM employees

  432. WHERE commission_pct = .2;

  433. Employee Monthly Salary COMMISSION_PCT

  434. ————————- ———————- ———————-

  435. Zlotkey 10500 0,2

  436. Olsen 8000 0,2

  437. Cambrault 7500 0,2

  438. Bloom 10000 0,2

  439. Fox 9600 0,2

  440. Taylor 8600 0,2

  441. Livingston 8400 0,2

  442. Employee Monthly Salary COMMISSION_PCT

  443. Zlotkey 10500 .2

  444. Taylor 8600 .2

  445. Практическое занятие 3, часть 1

  446. • Составление запроса для вывода текущей даты.

  447. • Составление запросов, требующих использования числовых, символьных функций и функций для работы с датами.

  448. • Вычисление продолжительности работы служащего в месяцах и годах.

  449. 1. Напишите запрос для вывода текущей даты. Назовите столбец Date.

  450. SELECT SYSDATE AS «Date»

  451. FROM DUAL;

  452. DATE

  453. ————————-

  454. 08.11.13

  455. DATE

  456. 08-MAR-01

  457. 2. Выведите номер служащего, его фамилию, оклад и новый оклад, повышенный на 15.5% и округлённый до целого. Назовите столбец New Salary. Сохраните команду SQL в текстовом файле lab3_2sql.

  458. SELECT employee_id, last_name, salary, ROUND (salary+salary*0.155, 0) «New Salary»

  459. FROM employees;

  460. EMPLOYEE_ID LAST_NAME SALARY New Salary

  461. ———————- ————————- ———————- ———————-

  462. 198 OConnell 2600 3000

  463. 199 Grant 2600 3000

  464. 200 Whalen 4400 5080

  465. 201 Hartstein 13000 15020

  466. 202 Fay 6000 6930

  467. 203 Mavris 6500 7510

  468. 204 Baer 10000 11550

  469. 205 Higgins 12008 13870

  470. 206 Gietz 8300 9590

  471. 100 King 24000 27720

  472. 101 Kochhar 17000 19640

  473. 102 De Haan 17000 19640

  474. 103 Hunold 9000 10400

  475. 104 Ernst 6000 6930

  476. 105 Austin 4800 5540

  477. 106 Pataballa 4800 5540

  478. 3. Выполните запрос из файла lab3_2sql.

  479. EMPLOYEE_ID LAST_NAME SALARY New Salary

  480. 100 King 24000 27600

  481. 101 Kochhar 17000 19550

  482. 102 De Haan 17000 19550

  483. 103 Hunold 9000 10350

  484. 104 Ernst 6000 6900

  485. ………….

  486. 20 rows selected

  487. 4. Измените lab3_2.sql. добавьте ещё один столбец, который будет содержать результат вычитания старого оклада из нового. Назовите столбец Increase. Сохраните изменённый запрос в lab3_4.sql. Выполните запрос ещё раз.

  488. SELECT employee_id, last_name, salary, ROUND (salary+salary*0.155) «New Salary», ROUND (salary+salary*0.155) — salary «Increase»

  489. FROM employees;

  490. EMPLOYEE_ID LAST_NAME SALARY New Salary Increase

  491. ———— ————————- ——— ———- ———-

  492. 198 OConnell 2600 3003 403

  493. 199 Grant 2600 3003 403

  494. 200 Whalen 4400 5082 682

  495. 201 Hartstein 13000 15015 2015

  496. 202 Fay 6000 6930 930

  497. EMPLOYEE_ID LAST_NAME SALARY New Salary Increase

  498. 100 King 24000 27600 3600

  499. 101 Kochhar 17000 19550 2550

  500. 102 De Haan 17000 19550 2550

  501. 103 Hunold 9000 10350 1350

  502. 104 Ernst 6000 6900 900

  503. …………

  504. 20 rows selected

  505. 5. Выведите фамилии служащих (первая буква каждой фамилии должна быть заглавной, а остальные — строчными) и длину каждой фамилии для тех служащих, фамилия которых начинается с символа J, A или М. Присвойте соответствующие заголовки столбцам. Отсортируйте результат по фамилии сотрудников.

  506. SELECT UPPER (LPAD (last_name, 1)) || LOWER(SUBSTR (last_name, 2))

  507. FROM employees;

  508. SELECT UPPER (SUBSTR (last_name, 1, 1)) || LOWER(SUBSTR (last_name, 2)) «Name», LENGTH (last_name) «Length»

  509. FROM employees

  510. WHERE last_name LIKE ‘J%’

  511. OR last_name LIKE ‘A%’

  512. OR last_name LIKE ‘M%’

  513. ORDER BY last_name;

  514. Name Length

  515. ————————- ———-

  516. Abel 4

  517. Ande 4

  518. Atkinson 8

  519. Austin 6

  520. Johnson 7

  521. Jones 5

  522. Name Length

  523. Abel 4

  524. Matos 5

  525. Mourgos 7

  526. 6. Перепишите запрос таким образом, чтобы пользователь мог при выполнении запроса вводить букву, с которой начинается фамилия сотрудника.

  527. SELECT INITCAP(last_name) «Name», LENGTH (last_name) «Length»

  528. FROM employees

  529. WHERE last_name LIKE UPPER (‘&one_letter%’)

  530. ORDER BY last_name;

  531. Name Length

  532. ————————- ———-

  533. Kaufling 8

  534. Khoo 4

  535. King 4

  536. 7. Создайте запрос для определения срока работы сотрудников в месяцах до текущей даты. Назовите столбец MONTHS_WORKED. Отсортируйте результат в порядке возрастания числа проработанных месяцев. Округлите результат до целого числа.

  537. SELECT last_name, ROUND(MONTHS_BETWEEN (SYSDATE, hire_date)) month_worked

  538. FROM employees

  539. ORDER BY month_worked;

  540. LAST_NAME MONTH_WORKED

  541. ————————- ————

  542. Banda 67

  543. Kumar 67

  544. Ande 68

  545. Markle 68

  546. Geoni 69

  547. Philtanker 69

  548. Lee 69

  549. Grant 70

  550. LAST_NAME MONTH_WORKED

  551. Zlotkey 13

  552. Mourgos 16

  553. Grant 22

  554. Lorentz 25

  555. Vargas 32

  556. Taylor 36

  557. Matos 36

  558. Fay 43

  559. ……………..

  560. 20 rows selected

  561. Практическое занятие 3, часть 2

  562. • Составление запросов, требующих использования числовых, символьных функций и функций для работы с датами.

  563. • Использование конкатенации с функциями.

  564. • Составление запросов, нечувствительных к регистру символов, для проверки полезности символьных функций.

  565. • Вычисление продолжительности работы служащего в месяцах и годах.

  566. • Определение даты аттестации служащего.

  567. 1. Получите по каждому служащему отчёт в следующем виде:

  568. <фамилия> зарабатывает <оклад> в месяц, но желает <утроенный оклад>. Назовите столбец Dream Salaries

  569. SELECT Last_name ||’ earns’|| TO_CHAR (salary, ‘$99,999.00’) || ‘ monthly but wants’ || TO_CHAR (salary*3, ‘$999,999.00’)

  570. AS «Dream Salaries»

  571. FROM employees;

  572. Dream Salaries

  573. ————————————————————————

  574. OConnell earns $2,600.00 monthly but wants $7,800.00

  575. Grant earns $2,600.00 monthly but wants $7,800.00

  576. Whalen earns $4,400.00 monthly but wants $13,200.00

  577. Hartstein earns $13,000.00 monthly but wants $39,000.00

  578. Fay earns $6,000.00 monthly but wants $18,000.00

  579. Mavris earns $6,500.00 monthly but wants $19,500.00

  580. Baer earns $10,000.00 monthly but wants $30,000.00

  581. Higgins earns $12,008.00 monthly but wants $36,024.00

  582. Gietz earns $8,300.00 monthly but wants $24,900.00

  583. King earns $24,000.00 monthly but wants $72,000.00

  584. Dream Salaries

  585. King earns $24,000.00 monthly but wants $72,000.00

  586. Kochhar earns $17,000.00 monthly but wants $51,000.00

  587. De Haan earns $17,000.00 monthly but wants $51,000.00

  588. Hunold earns $9,000.00 monthly but wants $27,000.00

  589. Ernst earns $6,000.00 monthly but wants $18,000.00

  590. Lorentz earns $4,200.00 monthly but wants $12,600.00

  591. Mourgos earns $5,800.00 monthly but wants $17,400.00

  592. Rajs earns $3,500.00 monthly but wants $10,500.00

  593. Davies earns $3,100.00 monthly but wants $9,300.00

  594. ……………

  595. 20 rows selected

  596. 2. Напишите запрос для вывода фамилий и окладов всех служащих. Назовите выходной столбец SALARY. Длина столбца SALARY – 15 символов с заполнением символом $.

  597. SELECT last_name, LPAD (salary, 15, ‘$’) salary

  598. FROM employees;

  599. LAST_NAME SALARY

  600. ————————- —————

  601. OConnell $$$$$$$$$$$2600

  602. Grant $$$$$$$$$$$2600

  603. Whalen $$$$$$$$$$$4400

  604. Hartstein $$$$$$$$$$13000

  605. Fay $$$$$$$$$$$6000

  606. Mavris $$$$$$$$$$$6500

  607. Baer $$$$$$$$$$10000

  608. LAST_NAME SALARY

  609. King $$$$$$$$$$24000

  610. Kochhar $$$$$$$$$$17000

  611. De Haan $$$$$$$$$$17000

  612. Hunold $$$$$$$$$$$9000

  613. Ernst $$$$$$$$$$$6000

  614. Lorentz $$$$$$$$$$$4200

  615. Mourgos $$$$$$$$$$$5800

  616. Rajs $$$$$$$$$$$3500

  617. Davies $$$$$$$$$$$3100

  618. Matos $$$$$$$$$$$2600

  619. ………………

  620. 20 rows selected

  621. 3. Для каждого служащего выведите фамилию, дату найма и дату пересмотра зарплаты, которая приходится на первый понедельник после 6 месяцев работы. Назовите столбец REVIEW. Формат даты при выводе имеет вид: “Monday, the Thirty-First of MM, YYYY”.

  622. SELECT last_name,

  623. TO_CHAR (hire_date, ‘DD-MON-YY’, ‘NLS_DATE_LANGUAGE=american’) hire_date,

  624. TO_CHAR (NEXT_DAY (ADD_MONTHS (hire_date, 6), ‘Понедельник’), ‘fmDay, «the» Ddspth «of» Month, YYYY’, ‘NLS_DATE_LANGUAGE=american’) review

  625. FROM employees;

  626. LAST_NAME HIRE_DATE REVIEW

  627. ————————- ——— ————————————————

  628. OConnell 21-JUN-07 Monday, the Twenty-Fourth of December, 2007

  629. Grant 13-JAN-08 Monday, the Fourteenth of July, 2008

  630. Whalen 17-SEP-03 Monday, the Twenty-Second of March, 2004

  631. Hartstein 17-FEB-04 Monday, the Twenty-Third of August, 2004

  632. Fay 17-AUG-05 Monday, the Twentieth of February, 2006

  633. Mavris 07-JUN-02 Monday, the Ninth of December, 2002

  634. Baer 07-JUN-02 Monday, the Ninth of December, 2002

  635. LAST_NAME HIRE_DATE REVIEW

  636. King 17-JUN-87 Monday, the Thirty-First of December, 1987

  637. Kochhar 21-SEP-89 Monday, the Thirty-Sixth of March, 1990

  638. De Haan 13-JAN-93 Monday, the Nineteenth of July, 1993

  639. Hunold 03-JAN-90 Monday, the Ninth of July, 1990

  640. 20 rows selected

  641. 4. По каждому служащему выведите фамилию, дату найма и день недели, когда он был нанят на работу. Назовите последний столбец DAY. Отсортируйте результаты по дням недели.

  642. SELECT last_name,

  643. TO_CHAR (hire_date, ‘DD-MON-YY’, ‘NLS_DATE_LANGUAGE=american’) «HIRE_DАTE»,

  644. TO_CHAR (hire_date, ‘fmDay’, ‘NLS_DATE_LANGUAGE=american’) day

  645. FROM employees

  646. ORDER BY TO_CHAR (hire_date, ‘D’);

  647. LAST_NAME HIRE_DАTE DAY

  648. ————————- ——— ———

  649. Mallin 14-JUN-04 Monday

  650. Banda 21-APR-08 Monday

  651. Ladwig 14-JUL-03 Monday

  652. Vollman 10-OCT-05 Monday

  653. Walsh 24-APR-06 Monday

  654. Kumar 21-APR-08 Monday

  655. Ernst 21-MAY-07 Monday

  656. Ande 24-MAR-08 Monday

  657. Greene 19-MAR-07 Monday

  658. Cambrault 15-OCT-07 Monday

  659. Olson 10-APR-07 Tuesday

  660. Urman 07-MAR-06 Tuesday

  661. Hunold 03-JAN-06 Tuesday

  662. LAST_NAME HIRE_DATE DAY

  663. Grant 24-MAY-99 MONDAY

  664. Ernst 21-MAY-91 TUESDAY

  665. Mourgos 16-NOV-99 TUESDAY

  666. Taylor 24-MAR-98 TUESDAY

  667. Rajs 17-OCT-95 TUESDAY

  668. Gietz 07-JUN-94 TUESDAY

  669. Higgins 07-JUN-94 TUESDAY

  670. King 17-JUN-87 WEDNESDAY

  671. De Haan 13-JAN-93 WEDNESDAY

  672. ………………

  673. 20 rows selected

  674. 5. Напишите запрос для вывода фамилии и суммы комиссионных каждого служащего. Если служащий не зарабатывает комиссионных, укажите в столбце «No Commission». Назовите столбец COMM.

  675. SELECT last_name, NVL (TO_CHAR (commission_pct), ‘No Commission’) COMM

  676. FROM employees;

  677. LAST_NAME COMM

  678. ————————- —————————————-

  679. OConnell No Commission

  680. Grant No Commission

  681. Whalen No Commission

  682. Vargas No Commission

  683. Russell ,4

  684. Partners ,3

  685. Errazuriz ,3

  686. LAST_NAME COMM

  687. King No Commission

  688. Kochhar No Commission

  689. De Haan No Commission

  690. Hunold No Commission

  691. Ernst No Commission

  692. Lorentz No Commission

  693. Mourgos No Commission

  694. Rajs No Commission

  695. Davies No Commission

  696. Matos No Commission

  697. Vargas No Commission

  698. Zlotkey .2

  699. Abel .3

  700. …………….

  701. 20 rows selected

  702. 6. Напишите запрос для отображения фамилий сотрудников и их заработной платы в виде гистограммы, состоящей из звёздочек. Каждая звёздочка означает 1000$. Строки должны быть отсортированы по заработной плате в убывающем порядке. Результат должен быть выведен одним столбцом, озаглавленным как EMPLOYEES AND THEIR SALARIES.

  703. SELECT last_name || TRIM (‘ ‘ FROM RPAD (‘ ‘, salary/1000+1, ‘*’))

  704. «EMPLOYEES AND THERE SALARIES»

  705. FROM employees

  706. ORDER BY salary DESC;

  707. ———————————————————————————————————————————

  708. Hartstein*************

  709. EMPLOYEES AND THEIR SALARIES

  710. King************************

  711. Kochhar*****************

  712. De Haan*****************

  713. Hartstein*************

  714. Higgins************

  715. Abel***********

  716. ………………….

  717. 20 rows selected

  718. 7. Используя функцию DECODE, напишите запрос для отображения должности сотрудника и её разряда (grade). Разряд каждого типа должности JOB_ID приведён в таблице.

  719. SELECT job_id,

  720. DECODE (job_id, ‘AD_PRES’, ‘A’,

  721. ‘ST_MAN’, ‘B’,

  722. ‘IT_PROG’, ‘C’,

  723. ‘SA_REP’, ‘D’,

  724. ‘ST_CLERK’, ‘E’,

  725. 0)

  726. G

  727. FROM employees;

  728. JOB_ID G

  729. ———- —

  730. AC_ACCOUNT 0

  731. AC_MGR 0

  732. AD_ASST 0

  733. AD_PRES A

  734. AD_VP 0

  735. AD_VP 0

  736. FI_ACCOUNT 0

  737. FI_ACCOUNT 0

  738. FI_ACCOUNT 0

  739. FI_ACCOUNT 0

  740. FI_ACCOUNT 0

  741. FI_MGR 0

  742. HR_REP 0

  743. IT_PROG C

  744. IT_PROG C

  745. IT_PROG C

  746. IT_PROG C

  747. Должность Разряд

  748. AD_PRES A

  749. ST_MAN B

  750. IT_PROG C

  751. SA_REP D

  752. ST_CLERK E

  753. Другая 0

  754. JOB_ID G

  755. AD_PRES A

  756. AD_VP 0

  757. AD_VP 0

  758. IT_PROG C

  759. IT_PROG C

  760. IT_PROG C

  761. ST_MAN B

  762. ST_CLERK E

  763. …………………..

  764. 20 rows selected

  765. 8. Перепишите команду из предыдущего задания, используя синтаксис выражения CASE.

  766. SELECT job_id,

  767. CASE job_id WHEN ‘AD_PRES’ THEN ‘A’

  768. WHEN ‘ST_MAN’ THEN ‘B’

  769. WHEN ‘IT_PROG’ THEN ‘C’

  770. WHEN ‘SA_REP’ THEN ‘D’

  771. WHEN ‘ST_CLERK’ THEN ‘E’

  772. ELSE ‘0’

  773. END G

  774. FROM employees;

  775. JOB_ID G

  776. ———- —

  777. AC_ACCOUNT 0

  778. AC_MGR 0

  779. AD_ASST 0

  780. AD_PRES A

  781. AD_VP 0

  782. AD_VP 0

  783. FI_ACCOUNT 0

  784. FI_ACCOUNT 0

  785. FI_ACCOUNT 0

  786. Практическое занятие 4

  787. • Использование групповых функций

  788. • Вывод данных по группам с помощью предложения GROUP BY

  789. • Включение и исключение групп с помощью предложения HAVING

  790. 1. Напишите запрос для вывода самого высокого, самого низкого и среднего оклада по всем служащим, а также суммы всех окладов. Назовите столбцы Maximum, Minimum, Average и Sum. Округлите средний оклад до ближайшего целого значения. Сохраните свой запрос в файле lab5_6.sql.

  791. SELECT MAX (salary) «Maximum», MIN (salary) «Minimum», SUM (salary) «Sum», ROUND (AVG (salary), 0) «Average»

  792. FROM employees;

  793. Maximum Minimum Sum Average

  794. ———- ———- ———- ———-

  795. 24000 2100 691408 6462

  796. Maximum Minimum Sum Average

  797. 24000 2500 175500 8775

  798. 2. Измените запрос в lab5_6.sql. так, чтобы получить самый низкий, самый высокий и средний оклады, а также сумму окладов по каждой должности. Сохраните изменённый запрос в файле lab5_5.sql. Выполните запрос из lab5_5.sql.

  799. SELECT job_id, MAX (salary) «Maximum», MIN (salary) «Minimum», SUM (salary) «Sum», ROUND (AVG (salary), 0) «Average»

  800. FROM employees

  801. GROUP BY job_id;

  802. JOB_ID Maximum Minimum Sum Average

  803. ———- ———- ———- ———- ———-

  804. AC_ACCOUNT 8300 8300 8300 8300

  805. AC_MGR 12008 12008 12008 12008

  806. AD_ASST 4400 4400 4400 4400

  807. AD_PRES 24000 24000 24000 24000

  808. AD_VP 17000 17000 34000 17000

  809. FI_ACCOUNT 9000 6900 39600 7920

  810. JOB_ID Maximum Minimum Sum Average

  811. AC_ACCOUNT 8300 8300 8300 8300

  812. AC_MGR 12000 12000 12000 12000

  813. AD_ASST 4400 4400 4400 4400

  814. AD_PRES 24000 24000 24000 24000

  815. AD_VP 17000 17000 34000 17000

  816. …………….

  817. 3. Напишите запрос для вывода должности и количества служащих, занимающих каждую должность.

  818. 4.

  819. SELECT job_id, COUNT (*) cnt

  820. FROM employees

  821. GROUP BY job_id;

  822. JOB_ID CNT

  823. ———- ———-

  824. AC_ACCOUNT 1

  825. AC_MGR 1

  826. AD_ASST 1

  827. AD_PRES 1

  828. AD_VP 2

  829. FI_ACCOUNT 5

  830. JOB_ID CNT

  831. AD_ACCOUNT 1

  832. AC_MGR 1

  833. AD_ASST 1

  834. AD_PRES 1

  835. AD_VP 2

  836. IT_PROG 3

  837. MK_MAN 1

  838. MK_REP 1

  839. SA_MAN 1

  840. SA_REP 3

  841. ST_CLERK 4

  842. ST_MAN 1

  843. 5. Получите количество служащих, имеющих подчинённых, без их перечисления. Назовите столбец Number of Managers. Используйте столбец MANAGER_ID для определения числа менеджеров.

  844. SELECT COUNT (DISTINCT manager_id) «Number of Managers»

  845. FROM employees;

  846. Number of Managers

  847. ——————

  848. 18

  849. Number of Managers

  850. 8

  851. 6. Напишите запрос для вывода разности между самым высоким и самым низким окладами. Назовите столбец DIFFERENCE

  852. SELECT (MAX (salary) — MIN (salary)) DIFFERENCE

  853. FROM employees;

  854. DIFFERENCE

  855. ———-

  856. 21900

  857. DIFFERENCE

  858. 21500

  859. 7. Напишите запрос для вывода номера каждого менеджера, имеющего подчинённых, и заработную плату самого низкооплачиваемого из его подчинённых. Исключите менеджеров для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $6000. Отсортируйте выходные строки в порядке убывания оклада.

  860. SELECT manager_id, MIN (salary) min_salary

  861. FROM employees

  862. WHERE manager_id IS NOT NULL

  863. HAVING MIN (salary) >= 6000

  864. GROUP BY manager_id

  865. ORDER BY min_salary DESC;

  866. MANAGER_ID MIN_SALARY

  867. ———- ———-

  868. 102 9000

  869. 205 8300

  870. 146 7000

  871. 145 7000

  872. MANAGER_ID MIN_SALARY

  873. 102 9000

  874. 205 8300

  875. 149 7000

  876. 8. Напишите запрос для вывода общего количества служащих и количества служащих, нанятых в 2005, 2006, 2007 и 2008 годах. Дайте соответствующие заголовки столбцам.

  877. SELECT COUNT (*) total,

  878. SUM (DECODE (TO_CHAR (hire_date, ‘YYYY’), 05, 1)) «2005»,

  879. SUM (DECODE (TO_CHAR (hire_date, ‘YY’), 06, 1)) «2006»,

  880. SUM (DECODE (TO_CHAR (hire_date, ‘YY’), 07, 1)) «2007»,

  881. SUM (DECODE (TO_CHAR (hire_date, ‘YY’), 08, 1)) «2008»

  882. FROM employees;

  883. TOTAL 2005 2006 2007 2008

  884. ———- ———- ———- ———- ———-

  885. 107 29 24 19 11

  886. TOTAL 2005 2006 2007 2008

  887. 20 1 2 2 3

  888. 9 Напишите матричный запрос для вывода всех должностей и суммы заработной платы служащих, работающих в этой должности в отделах 20, 50, 80 и 90. Последний столбец должен содержать сумму заработной платы служащих этих отделов, занимающих каждую конкретную должность. Дайте столбцам соответствующие заголовки.

  889. SELECT job_id «Job»,

  890. SUM (DECODE (department_id, 20, salary)) «Dept20»,

  891. SUM (DECODE (department_id, 50, salary)) «Dept50»,

  892. SUM (DECODE (department_id, 80, salary)) «Dept80»,

  893. SUM (DECODE (department_id, 90, salary)) «Dept90»,

  894. SUM (salary) «Total»

  895. FROM employees

  896. GROUP BY job_id;

  897. Job Dept20 Dept50 Dept80 Dept90 Total

  898. ———- ———- ———- ———- ———- ———-

  899. AC_ACCOUNT 8300

  900. AC_MGR 12008

  901. AD_ASST 4400

  902. AD_PRES 24000 24000

  903. AD_VP 34000 34000

  904. FI_ACCOUNT 39600

  905. FI_MGR 12000

  906. Job Dept20 Dept50 Dept80 Dept90 Total

  907. AC_ACCOUNT 4200 4100 8300

  908. AC_MGR 7800 4200 12000

  909. AD_ASST 4400 4400

  910. AD_PRES 24000 24000

  911. AD_VP 34000 34000

  912. IT_PROG 14700 4500 19200

  913. ……………………………

  914. ДОПОЛНИТЕЛЬНО (надо было переделать):

  915. SELECT job_id «Job»,

  916. SUM (DECODE (department_id, 20, salary)) «Dept20»,

  917. SUM (DECODE (department_id, 50, salary)) «Dept50»,

  918. SUM (DECODE (department_id, 80, salary)) «Dept80»,

  919. SUM (DECODE (department_id, 90, salary)) «Dept90»,

  920. SUM (DECODE (department_id, 20, salary,

  921. 50, salary,

  922. 80, salary,

  923. 90, salary)) «Total»

  924. FROM employees

  925. GROUP BY job_id;

  926. Job Dept20 Dept50 Dept80 Dept90 Total

  927. ———- ———- ———- ———- ———- ———-

  928. AC_ACCOUNT

  929. AC_MGR

  930. AD_ASST

  931. AD_PRES 24000 24000

  932. AD_VP 34000 34000

  933. FI_ACCOUNT

  934. FI_MGR

  935. HR_REP

  936. IT_PROG

  937. MK_MAN 13000 13000

  938. MK_REP 6000 6000

  939. PR_REP

  940. PU_CLERK

  941. PU_MAN

  942. SA_MAN 61000 61000

  943. SA_REP 243500 243500

  944. SH_CLERK 64300 64300

  945. ST_CLERK 55700 55700

  946. ST_MAN 36400 36400

  947. 19 rows selected

  948. Доп задача 1.11

  949. Написать команду, которая позволит выводить фамилию сотрудника через запятую столько раз, сколько букв в его фамилии.

  950. SELECT LPAD (last_name, LENGTH(last_name)*LENGTH(last_name)+(2*(LENGTH(last_name)-1)), last_name ||’, ‘) «LAST_NAME»

  951. FROM employees;

  952. Или

  953. SELECT RPAD (last_name, LENGTH(last_name)*LENGTH(last_name)+(2*(LENGTH(last_name)-1)), ‘, ‘||last_name) «LAST_NAME»

  954. FROM employees;

  955. ———————————————————————————————————————————

  956. Banda, Banda, Banda, Banda, Banda

  957. Практическое занятие 5

  958. • Соединение таблиц с использованием эквисоединения.

  959. • Выполнение внешних соединений и соединений таблицы с собой

  960. • Включение дополнительных условий.

  961. 1. Напишите запрос для вывода названия отдела, местоположения отдела, количества служащих и среднего оклада по этому отделу. Назовите столбцы Name, Location, Number of People и Salary. Округлите средний оклад до ближайшего целого значения.

  962. SELECT d.department_name «Name», d.location_id «Location», COUNT (employee_id) «Number of People», ROUND (AVG (salary), 0) «Salary»

  963. FROM departments d

  964. JOIN employees e

  965. USING (department_id)

  966. GROUP BY d.department_name, d.location_id;

  967. Name Location Number of People Salary

  968. —————————— ———- —————- ———-

  969. Administration 1700 1 4400

  970. Marketing 1800 2 9500

  971. Sales 2500 34 8956

  972. Purchasing 1700 6 4150

  973. Finance 1700 6 8600

  974. IT 1400 5 5760

  975. Executive 1700 3 19333

  976. Name Location Number of People Salary

  977. Accounting 1700 2 10150

  978. Administration 1700 1 4400

  979. Executive 1700 3 19333.33

  980. IT 1400 3 6400

  981. Marketing 1800 2 9500

  982. Sales 2500 3 10033.33

  983. Shipping 1500 5 3500

  984. 2. Напишите запрос для вывода фамилии, номера отдела и названия отдела для всех служащих.

  985. SELECT e.last_name, department_id, d.department_name

  986. FROM departments d

  987. RIGHT OUTER JOIN employees e

  988. USING (department_id);

  989. 107 rows selected

  990. LAST_NAME DEPARTMENT_ID DEPARTMENT_NAME

  991. ————————- ———————- ——————————

  992. Whalen 10 Administration

  993. Fay 20 Marketing

  994. Hartstein 20 Marketing

  995. Colmenares 30 Purchasing

  996. Himuro 30 Purchasing

  997. Tobias 30 Purchasing

  998. LAST_NAME DEPARTMENT_ID DEPARTMENT_NAME

  999. Whalen 10 Administration

  1000. Hartstein 20 Marketing

  1001. Fay 20 Marketing

  1002. Mourgos 50 Shipping

  1003. Rajs 50 Shipping

  1004. Davies 50 Shipping

  1005. Matos 50 Shipping

  1006. Vargas 50 Shipping

  1007. ……………..

  1008. 19 rows selected

  1009. 3. Выведите список всех должностей в отделе 80 (должности в списке не должны повторяться) и местоположение отдела. (в примере правильное выполнение запроса – 2 должности должно быть!)

  1010. SELECT e.job_id, d.location_id

  1011. FROM departments d

  1012. JOIN employees e

  1013. USING (department_id)

  1014. WHERE department_id = 80

  1015. GROUP BY e.job_id, d.location_id;

  1016. JOB_ID LOCATION_ID

  1017. ———- ———————-

  1018. SA_REP 2500

  1019. SA_MAN 2500

  1020. JOB_ID LOCATION_ID

  1021. SA_MAN 2500

  1022. SA_REP 2500

  1023. 4. Выведите фамилии всех служащих, содержащих букву «а» (в строчном регистре), с названиями отделов. Сохраните свою команду SQL в файле lab4_4.sql.

  1024. SELECT e.last_name, d.department_name

  1025. FROM departments d

  1026. JOIN employees e

  1027. USING (department_id)

  1028. WHERE e.last_name LIKE ‘%a%’;

  1029. LAST_NAME DEPARTMENT_NAME

  1030. ————————- ——————————

  1031. Whalen Administration

  1032. Fay Marketing

  1033. Hartstein Marketing

  1034. Baida Purchasing

  1035. Raphaely Purchasing

  1036. Tobias Purchasing

  1037. Colmenares Purchasing

  1038. Mavris Human Resources

  1039. Davies Shipping

  1040. Cabrio Shipping

  1041. LAST_NAME DEPARTMENT_NAME

  1042. Whalen Administration

  1043. Hartstein Marketing

  1044. Fay Marketing

  1045. Rajs Shipping

  1046. Davies Shipping

  1047. Matos Shipping

  1048. Vargas Shipping

  1049. Taylor Sales

  1050. Kochhar Executive

  1051. De Haan Executive

  1052. 10 rows selected.

  1053. 5. Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto.

  1054. SELECT e.last_name, e.job_id, d.department_id, d.department_name

  1055. FROM employees e

  1056. JOIN departments d

  1057. ON e.department_id = d.department_id

  1058. JOIN locations l

  1059. ON d.location_id = l.location_id

  1060. WHERE l.city IN ‘Toronto’;

  1061. LAST_NAME JOB_ID DEPARTMENT_ID DEPARTMENT_NAME

  1062. ————————- ———- ————- ——————————

  1063. Hartstein MK_MAN 20 Marketing

  1064. Fay MK_REP 20 Marketing

  1065. LAST_NAME JOB_ID DEPARTMENT_ID DEPARTMENT_NAME

  1066. Hartstein MK_MAN 20 Marketing

  1067. Fay MK_REP 20 Marketing

  1068. 6. Выведите фамилии и номера всех служащих вместе с фамилиями и номерами их менеджеров. Назовите столбцы EMPLOYEE, Emp#, Manager и Mgr#. Сохраните свою команду SQL в файле lab4_6.sql.

  1069. SELECT e.last_name «Employee», e.employee_id «Emp#», m.last_name «Manager», m.manager_id «Mgr#»

  1070. FROM employees e

  1071. JOIN employees m

  1072. ON (e.manager_id = m.employee_id);

  1073. Employee Emp# Manager Mgr#

  1074. ————————- ———- ————————- ———-

  1075. Fay 202 Hartstein 100

  1076. Gietz 206 Higgins 101

  1077. Zlotkey 149 King

  1078. Cambrault 148 King

  1079. Errazuriz 147 King

  1080. Employee Emp# Manager Mgr#

  1081. Kochhar 101 King 100

  1082. De Haan 102 King 100

  1083. Mourgos 124 King 100

  1084. Zlotkey 149 King 100

  1085. …………….

  1086. 7. Измените файл lab4_6.sql так, чтобы получить фамилии всех служащих, включая Кинга, который не имеют менеджера. Упорядочьте результат по возрастанию номера служащего. Сохраните изменённый запрос в текстовом файле lab4_7.sql. Выполните запрос.

  1087. SELECT e.last_name «Employee», e.employee_id «Emp#», m.last_name «Manager», m.manager_id «Mgr#»

  1088. FROM employees e

  1089. LEFT OUTER JOIN employees m

  1090. ON (e.manager_id = m.employee_id)

  1091. ORDER BY «Emp#»;

  1092. Employee Emp# Manager Mgr#

  1093. ————————- ———- ————————- ———-

  1094. King 100

  1095. Kochhar 101 King

  1096. De Haan 102 King

  1097. Hunold 103 De Haan 100

  1098. Ernst 104 Hunold 102

  1099. Austin 105 Hunold 102

  1100. Pataballa 106 Hunold 102

  1101. Employee Emp# Manager Mgr#

  1102. King 100

  1103. Kochhar 101 King 100

  1104. De Haan 102 King 100

  1105. Hunolds 103 De Haan 102

  1106. Ernst 104 Hunold 103

  1107. Lorentz 107 Hunold 103

  1108. …………………………….

  1109. 8. Создайте запрос для вывода номера отдела, фамилии служащего и фамилий всех служащих, работающих в одном отделе с данным служащим. Дайте столбцам соответствующие имена.

  1110. SELECT e.department_id AS department, e.last_name AS employee, col.last_name AS colleague

  1111. FROM employees col JOIN employees e

  1112. ON (e.department_id = col.department_id)

  1113. ORDER BY e.department_id, e.last_name, col.last_name;

  1114. DEPARTMENT EMPLOYEE COLLEAGUE

  1115. ———- ————————- ————————-

  1116. 10 Whalen Whalen

  1117. 20 Fay Fay

  1118. 20 Fay Hartstein

  1119. 20 Hartstein Fay

  1120. 20 Hartstein Hartstein

  1121. 30 Baida Baida

  1122. 30 Baida Colmenares

  1123. 30 Baida Himuro

  1124. 30 Baida Khoo

  1125. 30 Baida Raphaely

  1126. 30 Baida Tobias

  1127. 30 Colmenares Baida

  1128. DEPARTMENT EMPLOYEE COLLEAGUE

  1129. 20 Fay Hartstein

  1130. 20 Hartstein Fay

  1131. 50 Davies Matos

  1132. 50 Davies Mourgos

  1133. 50 Davies Rajs

  1134. 50 Davies Vargas

  1135. …………………

  1136. 9. Покажите структуру таблицы JOB_GRADES. Создайте запрос для вывода фамилии, должности, названия отдела, оклада и категории (GRADE_LEVEL) всех служащих.

  1137. DESCRIBE job_grades

  1138. Name Null Type

  1139. ———— —- ————

  1140. GRADE_LEVEL VARCHAR2(3)

  1141. LOWEST_SAL NUMBER

  1142. HIGHEST_SAL NUMBER

  1143. Name Null? Type

  1144. GRADE_LEVEL VARCHAR2(3)

  1145. LOWEST_SAL NUMBER

  1146. HIGHEST_SAL NUMBER

  1147. SELECT e.last_name, e.job_id, d.department_name, e.salary, j.grade_level AS gra

  1148. FROM departments d

  1149. JOIN employees e

  1150. ON d.department_id = e.department_id

  1151. JOIN job_grades j

  1152. ON e.salary

  1153. BETWEEN j.lowest_sal AND j.highest_sal;

  1154. LAST_NAME JOB_ID DEPARTMENT_NAME SALARY GRA

  1155. ————————- ———- —————————— ———- —

  1156. King AD_PRES Executive 24000 E

  1157. Kochhar AD_VP Executive 17000 E

  1158. De Haan AD_VP Executive 17000 E

  1159. Russell SA_MAN Sales 14000 D

  1160. Partners SA_MAN Sales 13500 D

  1161. Hartstein MK_MAN Marketing 13000 D

  1162. LAST_NAME JOB_ID DEPARTMENT_NAME SALARY GRA

  1163. Matos ST_CLERK Shipping 2600 A

  1164. Vargas ST_CLERK Shipping 2500 A

  1165. Lorentz IT_PROG IT 4200 B

  1166. Mourgos ST_MAN Shipping 5800 B

  1167. Rajs ST_CLERK Shipping 3500 B

  1168. Davies ST_CLERK Shipping 3100 B

  1169. Whalen AD_ASST Administration 4400 B

  1170. 10. Создайте запрос для вывода фамилий и дат найма всех служащих, нанятых после Davies.

  1171. SELECT e.last_name, TO_CHAR (e.hire_date, ‘fmDD-MON-YYYY’, ‘NLS_Date_Language = american’) AS hire_date

  1172. FROM employees e

  1173. CROSS JOIN employees s

  1174. WHERE s.last_name = ‘Davies’

  1175. AND s.hire_date < e.hire_date;

  1176. Или

  1177. SELECT e.last_name, TO_CHAR (e.hire_date, ‘fmDD-MON-YYYY’, ‘NLS_Date_Language = american’) AS hire_date

  1178. FROM employees e

  1179. JOIN employees s

  1180. ON (s.last_name = ‘Davies’)

  1181. WHERE s.hire_date < e.hire_date;

  1182. LAST_NAME HIRE_DATE

  1183. ————————- ————

  1184. OConnell 21-JUN-2007

  1185. Grant 13-JAN-2008

  1186. Fay 17-AUG-2005

  1187. Kochhar 21-SEP-2005

  1188. Hunold 3-JAN-2006

  1189. Ernst 21-MAY-2007

  1190. LAST_NAME HIRE_DATE

  1191. Lorentz 07-FEB-99

  1192. Mourgos 16-NOV-99

  1193. Matos 15_MAR-98

  1194. Vargas 09-JUL-98

  1195. Zlotkey 29-JAN-00

  1196. Taylor 24-MAR-98

  1197. Grant 24-MAY-99

  1198. Fay 17-AUG-97

  1199. 11. По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Emp Hired, Manager и Manager Hired.

  1200. SELECT e.last_name «Employee», TO_CHAR (e.hire_date, ‘DD-MON-YYYY’, ‘NLS_Date_Language = american’) «Emp Hired»,

  1201. m.last_name «Manager», TO_CHAR (m.hire_date, ‘DD-MON-YYYY’, ‘NLS_Date_Language = american’) «Mgr hired»

  1202. FROM employees e

  1203. CROSS JOIN employees m

  1204. WHERE e.manager_id = m.employee_id

  1205. AND m.hire_date > e.hire_date;

  1206. Или

  1207. SELECT e.last_name «Employee», TO_CHAR (e.hire_date, ‘fmDD-MON-YYYY’, ‘NLS_Date_Language = american’) «Emp Hired»,

  1208. m.last_name «Manager», TO_CHAR (m.hire_date, ‘fmDD-MON-YYYY’, ‘NLS_Date_Language = american’) «Mgr hired»

  1209. FROM employees e

  1210. JOIN employees m

  1211. ON (e.manager_id = m.employee_id)

  1212. WHERE m.hire_date > e.hire_date;

  1213. Employee Emp Hired Manager Mgr hired

  1214. ————————- ———— ————————- ————

  1215. Kaufling 1-MAY-2003 King 17-JUN-2003

  1216. Raphaely 7-DEC-2002 King 17-JUN-2003

  1217. De Haan 13-JAN-2001 King 17-JUN-2003

  1218. Greenberg 17-AUG-2002 Kochhar 21-SEP-2005

  1219. Higgins 7-JUN-2002 Kochhar 21-SEP-2005

  1220. Baer 7-JUN-2002 Kochhar 21-SEP-2005

  1221. Mavris 7-JUN-2002 Kochhar 21-SEP-2005

  1222. Whalen 17-SEP-2003 Kochhar 21-SEP-2005

  1223. Austin 25-JUN-2005 Hunold 3-JAN-2006

  1224. Faviet 16-AUG-2002 Greenberg 17-AUG-2002

  1225. Bull 20-FEB-2005 Fripp 10-APR-2005

  1226. Sarchand 27-JAN-2004 Fripp 10-APR-2005

  1227. Marlow 16-FEB-2005 Fripp 10-APR-2005

  1228. Everett 3-MAR-2005 Vollman 10-OCT-2005

  1229. Bell 4-FEB-2004 Vollman 10-OCT-2005

  1230. Employee Emp Hired Manager Mgr hired

  1231. Whalen 17-SEP-87 Kochhar 21-SEP-89

  1232. Hunold 03-JAN-90 De Haan 13-JAN-93

  1233. Rajs 17-OCT-95 Mourgos 16-NOV-99

  1234. Davies 29-JAN-97 Mourgos 16-NOV-99

  1235. Matos 15-MAR-98 Mourgos 16-NOV-99

  1236. Vargas 09-JUL-98 Mourgos 16-NOV-99

  1237. Abel 11-MAY-96 Zlotkey 29-JAN-00

  1238. Taylor 24-MAR-98 Zlotkey 29-JAN-00

  1239. Grant 24-MAY-99 Zlotkey 29-JAN-00

  1240. 12. Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьте вывод отделов, в которых нет сотрудников.

  1241. SELECT d.department_id, d.department_name, d.location_id, COUNT (e.employee_id)

  1242. FROM departments d

  1243. LEFT JOIN employees e

  1244. ON (d.department_id = e.department_id)

  1245. GROUP BY d.department_id, d.department_name, d.location_id

  1246. ORDER BY 1;

  1247. DEPARTMENT_ID DEPARTMENT_NAME LOCATION_ID COUNT(E.EMPLOYEE_ID)

  1248. ————- —————————— ———— ———————

  1249. 10 Administration 1700 1

  1250. 20 Marketing 1800 2

  1251. 30 Purchasing 1700 6

  1252. 40 Human Resources 2400 1

  1253. 50 Shipping 1500 45

  1254. 60 IT 1400 5

  1255. 70 Public Relations 2700 1

  1256. 80 Sales 2500 34

  1257. 90 Executive 1700 3

  1258. 100 Finance 1700 6

  1259. 110 Accounting 1700 2

  1260. 120 Treasury 1700 0

  1261. 130 Corporate Tax 1700 0

  1262. 140 Control And Credit 1700 0

  1263. DEPARTMENT_ID DEPARTMENT_NAME LOCATION_ID COUNT(E.EMPLOYEE_ID)

  1264. 10 Administration 1700 1

  1265. 20 Marketing 1800 2

  1266. 50 Shipping 1500 5

  1267. 60 IT 1400 3

  1268. 80 Sales 2500 3

  1269. 90 Executive 1700 3

  1270. 110 Accounting 1700 2

  1271. 190 Contracting 1700 0

  1272. 13. Какие должности имеются в отделах Administration и Executive, а также сколько сотрудников занимают эти должности? Выведите первыми наиболее часто встречаемые должности.

  1273. SELECT e.job_id, COUNT (e.job_id) AS frequency

  1274. FROM employees e

  1275. LEFT JOIN departments d

  1276. ON e.department_id = d.department_id

  1277. WHERE d.department_name = ‘Administration’

  1278. OR d.department_name = ‘Executive’

  1279. GROUP BY e.job_id

  1280. ORDER BY 2 DESC;

  1281. JOB_ID FREQUENCY

  1282. ———- ———-

  1283. AD_VP 2

  1284. AD_PRES 1

  1285. AD_ASST 1

  1286. JOB_ID FREQUENCY

  1287. AD_VP 2

  1288. AD_ASST 1

  1289. AD_PRES 1

  1290. 14. Покажите сотрудников, менеджеры которых имеют оклад выше $15000. выведите следующие сведения: фамилию сотрудника, фамилию менеджера, его оклад и уровень оклада (GRADE_LEVEL).

  1291. SELECT one.last_name, two.last_name AS manager, two.salary, j.grade_level

  1292. FROM employees one

  1293. CROSS JOIN employees two

  1294. JOIN job_grades j

  1295. ON two.salary

  1296. BETWEEN j.lowest_sal AND j.highest_sal

  1297. WHERE one.manager_id = two.employee_id

  1298. AND two.salary > 15000;

  1299. (убрать CROSS)

  1300. SELECT one.last_name, two.last_name AS manager, two.salary, j.grade_level

  1301. FROM employees one

  1302. JOIN employees two

  1303. ON (one.manager_id = two.employee_id)

  1304. JOIN job_grades j

  1305. ON two.salary

  1306. BETWEEN j.lowest_sal AND j.highest_sal

  1307. AND two.salary > 15000;

  1308. LAST_NAME MANAGER SALARY GRADE_LEVEL

  1309. ————————- ————————- ———- ————

  1310. Hartstein King 24000 E

  1311. Kochhar King 24000 E

  1312. Zlotkey King 24000 E

  1313. Cambrault King 24000 E

  1314. Errazuriz King 24000 E

  1315. Partners King 24000 E

  1316. Russell King 24000 E

  1317. De Haan King 24000 E

  1318. 20 rows selected

  1319. LAST_NAME MANAGER SALARY GRADE_LEVEL

  1320. Kochhar King 24000 E

  1321. De Haan King 24000 E

  1322. Mourgos King 24000 E

  1323. Zlotkey King 24000 E

  1324. Hartstein King 24000 E

  1325. Whalen Kochhar 17000 E

  1326. Higgins Kochhar 17000 E

  1327. Hunold De Haan 17000 E

  1328. 15. Напишите запрос для вывода фамилий, названия отдела, идентификатора местоположения отдела и города, в котором он находится, для всех служащих, зарабатывающих комиссионные.

  1329. SELECT e.last_name, d.department_name, d.location_id, l.city

  1330. FROM (employees e

  1331. LEFT JOIN departments d

  1332. ON e.department_id = d.department_id)

  1333. LEFT JOIN locations l

  1334. ON d.location_id = l.location_id

  1335. WHERE e.salary IS NOT NULL;

  1336. LAST_NAME DEPARTMENT_NAME LOCATION_ID CITY

  1337. ————————- —————————— ———— ——————————

  1338. Hunold IT 1400 Southlake

  1339. Ernst IT 1400 Southlake

  1340. Austin IT 1400 Southlake

  1341. Pataballa IT 1400 Southlake

  1342. Lorentz IT 1400 Southlake

  1343. OConnell Shipping 1500 South San Francisco

  1344. Grant Shipping 1500 South San Francisco

  1345. LAST_NAME DEPARTMENT_NAME LOCATION_ID CITY

  1346. Zlotkey Sales 2500 Oxford

  1347. Abel Sales 2500 Oxford

  1348. Taylor Sales 2500 Oxford

  1349. Практическое занятие 6

  1350. • Создание подзапросов для выборки данных по неизвестным критериям

  1351. • Использование подзапросов для выявления значений, существующих в одном наборе данных и отсутствующих в другом

  1352. 1. Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с Zlotkey. Исключите Zlotkey из выходных данных.

  1353. SELECT last_name, TO_CHAR (hire_date, ‘fmDD-MON-YY’, ‘NLS_Date_Language = american’) hire_date

  1354. FROM employees

  1355. WHERE department_id =

  1356. (SELECT department_id

  1357. FROM employees

  1358. WHERE last_name = ‘Zlotkey’)

  1359. AND last_name <> ‘Zlotkey’;

  1360. LAST_NAME HIRE_DATE

  1361. ————————- ———

  1362. Russell 1-OCT-4

  1363. Partners 5-JAN-5

  1364. Errazuriz 10-MAR-5

  1365. Cambrault 15-OCT-7

  1366. Tucker 30-JAN-5

  1367. Bernstein 24-MAR-5

  1368. Hall 20-AUG-5

  1369. Olsen 30-MAR-6

  1370. Cambrault 9-DEC-6

  1371. ИЛИ

  1372. SELECT last_name, TO_CHAR (hire_date, ‘DD-MON-YY’, ‘NLS_Date_Language = american’) hire_date

  1373. FROM employees

  1374. WHERE department_id =

  1375. (SELECT department_id

  1376. FROM employees

  1377. WHERE last_name = ‘Zlotkey’)

  1378. AND last_name <> ‘Zlotkey’;

  1379. LAST_NAME HIRE_DATE

  1380. ————————- ———

  1381. Russell 01-OCT-04

  1382. Partners 05-JAN-05

  1383. Errazuriz 10-MAR-05

  1384. Cambrault 15-OCT-07

  1385. Tucker 30-JAN-05

  1386. 2. Создайте запрос для вывода номеров и фамилий всех служащих, оклад которых выше среднего. Отсортируйте данные в порядке увеличения окладов.

  1387. SELECT employee_id, last_name, salary

  1388. FROM employees

  1389. WHERE salary >

  1390. (SELECT AVG(salary)

  1391. FROM employees)

  1392. ORDER BY salary ASC;

  1393. EMPLOYEE_ID LAST_NAME SALARY

  1394. ———— ————————- ———-

  1395. 203 Mavris 6500

  1396. 123 Vollman 6500

  1397. 165 Lee 6800

  1398. 113 Popp 6900

  1399. 155 Tuvault 7000

  1400. 178 Grant 7000

  1401. 161 Sewall 7000

  1402. 164 Marvins 7200

  1403. 172 Bates 7300

  1404. 171 Smith 7400

  1405. 154 Cambrault 7500

  1406. 3. Создайте запрос для вывода номеров и фамилий всех служащих, работающих в одном отделе с любым служащим, фамилия которого содержит букву «u». Сохраните свой запрос в тестовом файле lab6_3.sql. Выполните запрос.

  1407. SELECT employee_id, last_name

  1408. FROM employees

  1409. WHERE department_id IN

  1410. (SELECT department_id

  1411. FROM employees

  1412. WHERE last_name LIKE ‘%u%’);

  1413. EMPLOYEE_ID LAST_NAME

  1414. ———— ————————-

  1415. 107 Lorentz

  1416. 106 Pataballa

  1417. 105 Austin

  1418. 104 Ernst

  1419. 103 Hunold

  1420. 197 Feeney

  1421. 196 Walsh

  1422. 195 Jones

  1423. 194 McCain

  1424. 4. Создайте запрос для вывода фамилии, номера отдела и должности каждого служащего, идентификатор местоположения отдела которого равен 1700.

  1425. SELECT last_name, department_id, job_id

  1426. FROM employees

  1427. WHERE department_id IN

  1428. (SELECT department_id

  1429. FROM departments

  1430. WHERE location_id = 1700);

  1431. LAST_NAME DEPARTMENT_ID JOB_ID

  1432. ————————- ————- ———-

  1433. Whalen 10 AD_ASST

  1434. Raphaely 30 PU_MAN

  1435. Colmenares 30 PU_CLERK

  1436. Khoo 30 PU_CLERK

  1437. Baida 30 PU_CLERK

  1438. Tobias 30 PU_CLERK

  1439. Himuro 30 PU_CLERK

  1440. 5. Получите список фамилий и окладов всех служащих, подчинённых Кингу.

  1441. SELECT last_name, salary

  1442. FROM employees

  1443. WHERE manager_id IN

  1444. (SELECT employee_id

  1445. FROM employees

  1446. WHERE last_name = ‘King’);

  1447. LAST_NAME SALARY

  1448. ————————- ———-

  1449. Hartstein 13000

  1450. Kochhar 17000

  1451. De Haan 17000

  1452. Raphaely 11000

  1453. Weiss 8000

  1454. 6. Получите номер отдела, фамилию и должность для каждого служащего, работающего в администрации (department_name = ‘Executive’).

  1455. SELECT department_id, last_name, job_id

  1456. FROM employees

  1457. WHERE department_id IN

  1458. (SELECT department_id

  1459. FROM departments

  1460. WHERE department_name = ‘Executive’);

  1461. DEPARTMENT_ID LAST_NAME JOB_ID

  1462. ————- ————————- ———-

  1463. 90 King AD_PRES

  1464. 90 Kochhar AD_VP

  1465. 90 De Haan AD_VP

  1466. 7. Измените lab6_3.sql для вывода номеров, фамилий и окладов всех служащих, которые работают в одном отделе с любым служащим с буквой «u» в фамилии и оклады которых превышают средний. Сохраните новый запрос в файле lab6_7.sql. Выполните его.

  1467. SELECT employee_id, last_name, salary

  1468. FROM employees

  1469. WHERE department_id IN

  1470. (SELECT department_id

  1471. FROM employees

  1472. WHERE last_name LIKE ‘%u%’)

  1473. AND salary > (SELECT AVG(salary)

  1474. FROM employees);

  1475. Или

  1476. SELECT employee_id, last_name, salary

  1477. FROM employees

  1478. WHERE department_id IN

  1479. (SELECT department_id

  1480. FROM employees

  1481. WHERE last_name LIKE ‘%u%’)

  1482. AND salary > ALL (SELECT AVG(salary)

  1483. FROM employees);

  1484. EMPLOYEE_ID LAST_NAME SALARY

  1485. ———— ————————- ———-

  1486. 103 Hunold 9000

  1487. 123 Vollman 6500

  1488. 122 Kaufling 7900

  1489. 121 Fripp 8200

  1490. 120 Weiss 8000

  1491. 177 Livingston 8400

  1492. 176 Taylor 8600

  1493. 175 Hutton 8800

  1494. 174 Abel 11000

  1495. 8. Покажите номер отдела с наивысшей средней заработной платой и наименьший оклад работающего в нём сотрудника.

  1496. SELECT department_id, MIN(salary)

  1497. FROM employees

  1498. WHERE department_id IN

  1499. (SELECT department_id

  1500. FROM employees

  1501. WHERE salary =

  1502. (SELECT MAX(AVG(salary))

  1503. FROM employees

  1504. GROUP BY salary))

  1505. GROUP BY department_id;

  1506. DEPARTMENT_ID MIN(SALARY)

  1507. ————- ————

  1508. 90 17000

  1509. 9. Выведите номера, наименования и местоположения отделов, в которых не работают торговые представители (job_id = ‘SA_REP’).

  1510. SELECT department_id, department_name, manager_id, location_id

  1511. FROM departments

  1512. WHERE department_id <> ALL

  1513. (SELECT NVL(department_id, 0)

  1514. FROM employees

  1515. WHERE job_id = ‘SA_REP’);

  1516. .

  1517. (а если в отделе работает SA_REP и еще кто-то)

  1518. 1.Вычисляем, какие отделы с job_id SA_REP, 2. Составляем список тех значений отделов, с которыми будем проверять равенство 3. Сравниваем номер любого департамента со всеми полученными в подзапросе значениями.

  1519. DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

  1520. ————- —————————— ———- ————

  1521. 10 Administration 200 1700

  1522. 20 Marketing 201 1800

  1523. 30 Purchasing 114 1700

  1524. 40 Human Resources 203 2400

  1525. 140 Control And Credit 1700

  1526. 150 Shareholder Services 1700

  1527. 160 Benefits 1700

  1528. 170 Manufacturing 1700

  1529. 180 Construction 1700

  1530. 26 rows selected

  1531. Практическое занятие 7

  1532. • Создание запросов, в которых используются операторы SET.

  1533. • Альтернативные методы соединения.

  1534. 1. Используя оператор SET, выведите номера отделов (department_id), в которых нет служащих с идентификатором должности (job_id) ST_CLERK.

  1535. SELECT department_id

  1536. FROM departments

  1537. MINUS

  1538. SELECT department_id

  1539. FROM employees

  1540. WHERE job_id LIKE ‘ST_CLERK’;

  1541. DEPARTMENT_ID

  1542. ————-

  1543. 10

  1544. 20

  1545. 30

  1546. 40

  1547. 60

  1548. 70

  1549. 2. Используя оператор SET, выведите идентификаторы и наименования стран, в которых не располагаются отделы компании. (учесть отделы!)

  1550. SELECT country_id «CO», country_name

  1551. FROM countries

  1552. MINUS

  1553. SELECT l.country_id, con.country_name

  1554. FROM locations l JOIN countries con

  1555. ON l.country_id = con.country_id

  1556. JOIN departments d

  1557. ON d.location_id = l.location_id;

  1558. Чтобы не забыть: 1. Нахожу локайшнс, где есть отделы 2. Вычитаю их из общего списка

  1559. 21 строчка должна выводиться!

  1560. CO COUNTRY_NAME

  1561. — —————————————-

  1562. AR Argentina

  1563. AU Australia

  1564. BE Belgium

  1565. BR Brazil

  1566. CH Switzerland

  1567. 21 rows selected

  1568. 3. Используя оператор SET, выведите список должностей отделов 10, 50 и 20 в таком же порядке отделов. Выведите столбцы job_id и department_id.

  1569. SELECT job_id, department_id

  1570. FROM (SELECT job_id, department_id

  1571. FROM employees

  1572. WHERE department_id IN (10, 20, 50)

  1573. INTERSECT

  1574. SELECT job_id, department_id

  1575. FROM employees)

  1576. ORDER BY decode (department_id, 10,1, 20,3, 50,2);

  1577. COLUMN a_dummy NOPRINT

  1578. SELECT job_id, department_id, 1 a_dummy

  1579. FROM employees

  1580. WHERE department_id = 10

  1581. UNION

  1582. SELECT job_id, department_id, 3 a_dummy

  1583. FROM employees

  1584. WHERE department_id = 20

  1585. UNION

  1586. SELECT job_id, department_id, 2 a_dummy

  1587. FROM employees

  1588. WHERE department_id = 50

  1589. ORDER BY 3;

  1590. (будет доп вопрос про SET и подзапрос!)

  1591. JOB_ID DEPARTMENT_ID

  1592. ———- ———————-

  1593. AD_ASST 10

  1594. ST_CLERK 50

  1595. SH_CLERK 50

  1596. SH_CLERK 50

  1597. SH_CLERK 50

  1598. ST_MAN 50

  1599. ST_MAN 50

  1600. ST_MAN 50

  1601. ST_MAN 50

  1602. ST_MAN 50

  1603. ST_CLERK 50

  1604. 48 rows selected

  1605. 4. Выведите номер сотрудника и идентификатор его должности, если его текущая должность совпадает с той, которую он уже занимал, работая в компании.

  1606. SELECT employee_id, job_id

  1607. FROM employees

  1608. INTERSECT

  1609. SELECT employee_id, job_id

  1610. FROM job_history;

  1611. EMPLOYEE_ID JOB_ID

  1612. ———— ———-

  1613. 176 SA_REP

  1614. 200 AD_ASST

  1615. 5. Напишите составной запрос, который выводит следующее:

  1616. • Номера и отделы всех сотрудников из таблицы EMPLOYEES, независимо от того, относятся ли они к какому-то отделу или нет;

  1617. • Номера и наименования всех отделов из таблицы DEPARTMENTS, независимо от того, есть ли в них сотрудники или нет.

  1618. SELECT employee_id, department_id, TO_CHAR (NULL) department_name

  1619. FROM employees

  1620. UNION

  1621. SELECT TO_NUMBER (NULL), department_id, department_name

  1622. FROM departments;

  1623. EMPLOYEE_ID DEPARTMENT_ID DEPARTMENT_NAME

  1624. ———— ————- ——————————

  1625. 100 90

  1626. 101 90

  1627. 102 90

  1628. 103 60

  1629. 104 60

  1630. Практическое занятие 8

  1631. 11 Вставка строк в таблицы

  1632. 12 Обновление строк в таблице

  1633. 13 Удаление строк из таблицы

  1634. 14 Управление транзакциями

  1635. Вставка данных в таблицу.

  1636. 1. Выполните скрипт lab8_1.sql для создания таблицы MY_EMPLOYEE, которая будет использоваться для упражнений.

  1637. 2. Выведите структуру таблицы MY_EMPLOYEE для выяснения имён столбцов.

  1638. DESCRIBE my_employee

  1639. Name Null Type

  1640. ———- ——— ————

  1641. ID NOT NULL NUMBER(4)

  1642. LAST_NAME VARCHAR2(25)

  1643. FIRST_NAME VARCHAR2(25)

  1644. USERID VARCHAR2(8)

  1645. SALARY NUMBER(9,2)

  1646. 3. Вставьте в таблицу MY_EMPLOYEE первую строку из нижеприведённых образцов. Не указывайте столбцы в предложении INSERT.

  1647. INSERT INTO my_employee

  1648. VALUES (1, ‘Patel’, ‘Ralph’, ‘rpatel’, 895);

  1649. 1 rows inserted.

  1650. ID LAST_NAME FIRST_NAME USERID SALARY

  1651. 1 Patel Ralph rpatel 895

  1652. 2 Dancs Betty bdancs 860

  1653. 3 Biri Ben bbiri 1100

  1654. 4 Newman Chad cnewman 750

  1655. 5 Ropeburn Andrey Aropebur 1550

  1656. 4. Вставьте в таблицу MY_EMPLOYEE вторую строку из вышеуказанных образцов. На этот раз укажите столбцы явно в предложении INSERT.

  1657. INSERT INTO my_employee(id, last_name, first_name, userid, salary)

  1658. VALUES (2, ‘Dancs’, ‘Betty’, ‘bdancs’, 860);

  1659. 1 rows inserted.

  1660. 5. Убедитесь в том, что данные вставлены в таблицу.

  1661. SELECT *

  1662. FROM my_employee;

  1663. ID LAST_NAME FIRST_NAME USERID SALARY

  1664. ———- ————————- ————————- ——— ———-

  1665. 1 Patel Ralph rpatel 895

  1666. 2 Dancs Betty bdancs 860

  1667. 6. Создайте скрипт-файл loademp.sql для интерактивной загрузки строк в таблицу MY_EMPLOYEE. Выдайте приглашение пользователю ввести номер, фамилию имя и оклад служащего. Соедините первую букву имени с семью первыми буквами фамилии для получения идентификатора пользователя данного служащего.

  1668. SET VERIFY OFF

  1669. INSERT INTO my_employee(id, last_name, first_name, userid, salary)

  1670. VALUES (‘&write_id’, INITCAP (‘&&write_last_name’), INITCAP (‘&&write_first_name’),

  1671. LOWER(SUBSTR (‘&write_first_name’, 1, 1) || SUBSTR (‘&write_last_name’, 1, 7)),

  1672. ‘&write_salary’);

  1673. UNDEFINE write_last_name

  1674. UNDEFINE write_first_name

  1675. 1 rows inserted.

  1676. 1 rows inserted.

  1677. 7. С помощью созданного скрипта вставьте в таблицу две следующие строки данных из приведённых образцов.

  1678. 8. Убедитесь в том, что строки вставлены в таблицу.

  1679. SELECT *

  1680. FROM my_employee;

  1681. ID LAST_NAME FIRST_NAME USERID SALARY

  1682. ———- ————————- ————————- ——— ———-

  1683. 1 Patel Ralph rpatel 895

  1684. 2 Dancs Betty bdancs 860

  1685. 3 Biri Ben bbiri 1100

  1686. 4 Newman Chad cnewman 750

  1687. 9. Сделайте изменения постоянными.

  1688. COMMIT;

  1689. committed.

  1690. Обновление и удаление данных из таблицы MY_EMPLOYEE.

  1691. 10. Смените фамилию служащего номер 3 на «Drexler».

  1692. UPDATE my_employee

  1693. SET last_name = ‘Drexler’

  1694. WHERE id = 3;

  1695. 1 rows updated.

  1696. 11. Сделайте оклад равным 1000 для всех служащих, имеющих оклад ниже 900.

  1697. UPDATE my_employee

  1698. SET salary = 1000

  1699. WHERE salary < 900;

  1700. 3 rows updated.

  1701. 12. Проверьте изменения в таблице.

  1702. SELECT *

  1703. FROM my_employee;

  1704. ID LAST_NAME FIRST_NAME USERID SALARY

  1705. ———- ————————- ————————- ——— ———-

  1706. 1 Patel Ralph rpatel 1000

  1707. 2 Dancs Betty bdancs 1000

  1708. 3 Drexler Ben bbiri 1100

  1709. 4 Newman Chad cnewman 1000

  1710. 13. Удалите из таблицы MY_EMPLOYEE строку для служащей Betty Dancs.

  1711. DELETE my_employee

  1712. WHERE last_name = ‘Dancs’

  1713. AND first_name = ‘Betty’;

  1714. 1 rows deleted.

  1715. 14. Проверьте изменения в таблице.

  1716. SELECT *

  1717. FROM my_employee;

  1718. ID LAST_NAME FIRST_NAME USERID SALARY

  1719. ———- ————————- ————————- ——— ———-

  1720. 1 Patel Ralph rpatel 1000

  1721. 3 Drexler Ben bbiri 1100

  1722. 4 Newman Chad cnewman 1000

  1723. 15. Зафиксируйте все незафиксированные изменения.

  1724. COMMIT;

  1725. committed.

  1726. Управление данными при помощи транзакций

  1727. 16. Вставьте в таблицу последнюю строку из образца данных путём выполнения скрипта, созданного в пункте 6.

  1728. 1 rows inserted.

  1729. 17. Проверьте изменения в таблице.

  1730. SELECT *

  1731. FROM my_employee;

  1732. ID LAST_NAME FIRST_NAME USERID SALARY

  1733. ———- ————————- ————————- ——— ———-

  1734. 1 Patel Ralph rpatel 1000

  1735. 3 Drexler Ben bbiri 1100

  1736. 4 Newman Chad cnewman 1000

  1737. 5 Ropeburn Audrey aropebur 1550

  1738. 18. Создайте точку сохранения в ходе транзакции.

  1739. SAVEPOINT A;

  1740. 19. Удалите все данные из таблицы.

  1741. DELETE FROM my_employee;

  1742. 4 rows deleted.

  1743. 20. Убедитесь в том, что таблица пуста.

  1744. SELECT *

  1745. FROM my_employee;

  1746. no rows selected

  1747. 21. Отмените последнюю операцию DELETE, не отменяя предыдущую операцию INSERT.

  1748. ROLLBACK to SAVEPOINT A;

  1749. rollback complete.

  1750. 22. Убедитесь в том, что вставленная строка присутствует в таблице.

  1751. SELECT *

  1752. FROM my_employee;

  1753. ID LAST_NAME FIRST_NAME USERID SALARY

  1754. ———- ————————- ————————- ——— ———-

  1755. 1 Patel Ralph rpatel 1000

  1756. 3 Drexler Ben bbiri 1100

  1757. 4 Newman Chad cnewman 1000

  1758. 5 Ropeburn Audrey aropebur 1550

  1759. 23. Сделайте добавление данных постоянным.

  1760. COMMIT;

  1761. committed.

  1762. Практическое занятие 9

  1763. 15 Создание новых таблиц

  1764. 16 Создание новой таблицы с помощью синтаксиса CREATE TABLE AS

  1765. 17 Проверка существования таблицы

  1766. 18 Удаление таблиц

  1767. 1. Создайте таблицу DEPT на основе приведенного ниже описания. Сохраните команду в файле lab9_1.sql, а затем выполните файл для создания таблицы. Убедитесь в том, что таблица создана.

  1768. CREATE TABLE DEPT

  1769. (id number(7),

  1770. name varchar2(25));

  1771. Имя столбца ID Name

  1772. Тип ключа

  1773. Nulls/Unique

  1774. Таблица FK

  1775. Столбец FK

  1776. Тип данных NUMBER VARCHAR2

  1777. Длина 7 25

  1778. 2. Заполните таблицу DEPT данными из таблицы Departments. Включите только нужные столбцы.

  1779. INSERT INTO dept

  1780. SELECT department_id, department_name

  1781. FROM departments;

  1782. SELECT *

  1783. FROM dept;

  1784. ID NAME

  1785. ———- ————————-

  1786. 10 Administration

  1787. 20 Marketing

  1788. 30 Purchasing

  1789. 40 Human Resources

  1790. 50 Shipping

  1791. 60 IT

  1792. 70 Public Relations

  1793. 80 Sales

  1794. 27 rows selected

  1795. 3. Создайте таблицу EMP на основе приведенного ниже описания. Сохраните команду в скрипт-файле lab9_3.sql, а затем выполните его, чтобы создать таблицу. Убедитесь в том, что таблица создана.

  1796. CREATE TABLE emp

  1797. (id NUMBER(7),

  1798. last_name VARCHAR2(25),

  1799. first_name VARCHAR2(25),

  1800. dept_id NUMBER(7));

  1801. table EMP created.

  1802. DESCRIBE emp

  1803. Name Null Type

  1804. ———- —- ————

  1805. ID NUMBER(7)

  1806. LAST_NAME VARCHAR2(25)

  1807. FIRST_NAME VARCHAR2(25)

  1808. DEPT_ID NUMBER(7)

  1809. Имя столбца ID Last_name FIRST_NAME DEPT_ID

  1810. Тип ключа

  1811. Nulls/Unique

  1812. Таблица FK

  1813. Столбец FK

  1814. Тип данных NUMBER VARCHAR2 VARCHAR2 NUMBER

  1815. Длина 7 25 25 7

  1816. 4. Создайте таблицу EMPLOYEES2, основанную на структуре таблицы EMPLOYEES, включив только столбцы EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY и DEPARTMENT_ID. Имена колонок в новой таблице должны быть ID, FIRST_NAME, LAST_NAME, SALARY и DEPT_ID соответственно.

  1817. CREATE TABLE employees2 AS

  1818. SELECT employee_id id, first_name, last_name, salary, department_id dept_id

  1819. FROM employees;

  1820. table EMPLOYEES2 created.

  1821. 5. Удалите таблицу EMP.

  1822. DROP TABLE emp;

  1823. table EMP dropped.

  1824. Практическое занятие 10, Часть 1

  1825. • Создание простого представления

  1826. • Создание сложного представления

  1827. • Создание представления с ограничением CHECK

  1828. • Попытки изменить данные в представлении

  1829. • Вывод определений представлений

  1830. • Удаление представлений

  1831. 1. Создайте представление EMPLOYEES_VU. Включите номер служащего, фамилию служащего и номер отдела из таблицы EMPLOYEES. Смените заголовок столбца с фамилией служащего на EMPLOYEE.

  1832. CREATE VIEW employees_vu AS

  1833. SELECT employee_id, last_name employee, department_id

  1834. FROM employees;

  1835. view EMPLOYEES_VU created.

  1836. 2. Выведите содержимое представления EMPLOYEE_VU.

  1837. SELECT *

  1838. FROM employees_vu;

  1839. EMPLOYEE_ID EMPLOYEE DEPARTMENT_ID

  1840. ———— ————————- ————-

  1841. 198 OConnell 50

  1842. 199 Grant 50

  1843. 200 Whalen 10

  1844. 201 Hartstein 20

  1845. 202 Fay 20

  1846. 203 Mavris 40

  1847. 107 rows selected

  1848. 3. Используя своё представление EMPLOYEES_VU, создайте запрос для вывода всех фамилий и номеров отделов служащих.

  1849. SELECT employee, department_id

  1850. FROM employees_vu;

  1851. EMPLOYEE DEPARTMENT_ID

  1852. ————————- ————-

  1853. OConnell 50

  1854. Grant 50

  1855. Whalen 10

  1856. Hartstein 20

  1857. 107 rows selected

  1858. ……

  1859. 4. Создайте представление DEPT50, содержащее номер служащего и номер отдела для всех служащих отдела 50. Назовите столбцы представления EMPNO, EMPLOYEE и DEPTNO. Запретите операцию перевода служащего в другой отдел через представление.

  1860. DROP VIEW dept50;

  1861. CREATE VIEW dept50 AS

  1862. SELECT employee_id empno, last_name employee, department_id deptno

  1863. FROM employees

  1864. WHERE department_id = 50

  1865. WITH CHECK OPTION;

  1866. Какое имя будет. БУДЕТ ИМЯ ТАКОЕ: SYS_C00162842

  1867. view DEPT50 created.

  1868. 5. Выведите содержимое представления DEPT50.

  1869. SELECT *

  1870. FROM dept50_1;

  1871. EMPNO EMPLOYEE DEPTNO

  1872. ———- ————————- ———-

  1873. 198 OConnell 50

  1874. 199 Grant 50

  1875. 120 Weiss 50

  1876. 121 Fripp 50

  1877. 44 rows selected

  1878. 6. Попробуйте сменить номер отдела служащего по фамилии Matos на 80.

  1879. UPDATE dept50

  1880. SET deptno = 80

  1881. WHERE employee = ‘Matos’;

  1882. QL Error: ORA-01402: представление WITH CHECK OPTION не соответствует фразе WHERE

  1883. 01402. 00000 — «view WITH CHECK OPTION where-clause violation»

  1884. *Cause:

  1885. *Action:

  1886. Дополнительное задание

  1887. 7. Создайте представление SALARY_VU, включающее фамилию служащего, название отдела, оклад и категорию оклада для всех служащих. Используйте таблицы EMPLOYEES, DEPARTMENTS и JOB_GRADES. Соответственно назовите столбцы Employee, Department, Salary и Grade.

  1888. CREATE VIEW salary_vu AS

  1889. SELECT d.department_name, e.salary, j.grade_level

  1890. FROM employees e

  1891. JOIN departments d

  1892. ON e.department_id = d.department_id

  1893. JOIN job_grades j

  1894. ON e.salary BETWEEN j.lowest_sal AND j.highest_sal;

  1895. DROP VIEW salary_vu;

  1896. CREATE VIEW salary_vu AS

  1897. SELECT d.department_name, e.salary, j.grade_level

  1898. FROM employees e

  1899. LEFT OUTER JOIN departments d

  1900. ON e.department_id = d.department_id

  1901. JOIN job_grades j

  1902. ON e.salary BETWEEN j.lowest_sal AND j.highest_sal;

  1903. DEPARTMENT_NAME SALARY GRADE_LEVEL

  1904. —————————— ———- ————

  1905. Executive 24000 E

  1906. Executive 17000 E

  1907. 107 rows selected

  1908. Практическое занятие 10, Часть 2

  1909. • Создание последовательностей

  1910. • Использование последовательностей

  1911. • Создание неуникальных индексов

  1912. 1. Создайте последовательность для столбца главного ключа таблицы DEPT. Последовательность должна начинаться с 200 и иметь максимальное значение 1000. шаг приращения значений – 10. Назовите последовательность DEPT_ID_SEQ.

  1913. CREATE SEQUENCE dept_id_seq

  1914. START WITH 200

  1915. MAXVALUE 1000

  1916. INCREMENT BY 10;

  1917. sequence DEPT_ID_SEQ_1 created.

  1918. 2. Создайте скрипт lab12_3.sql для вставки строки в таблицу DEPT. Обязательно используйте последовательность, созданную Вами для столбца ID. Добавьте в таблицу два отдела: Education и Administration. Выполните файл, проверьте успешное выполнение вставки.

  1919. INSERT INTO dept

  1920. VALUES (dept_id_seq.nextval, ‘Education’);

  1921. INSERT INTO dept

  1922. VALUES (dept_id_seq.nextval, ‘Administration’);

  1923. 1 rows inserted.

  1924. 1 rows inserted.

  1925. ID NAME

  1926. ———- ————————-

  1927. 10 Administration

  1928. 20 Marketing

  1929. 30 Purchasing

  1930. 40 Human Resources

  1931. 240 Government Sales

  1932. 250 Retail Sales

  1933. 260 Recruiting

  1934. 270 Payroll

  1935. 400 Education

  1936. 410 Administration

  1937. 29 rows selected

  1938. 3. Создайте в таблице EMP неуникальный индекс для столбца таблицы DEPT_ID, имеющего ограничение FOREIGN KEY.

  1939. УДАЛИЛИ Ж ТАБЛИЦУ!

  1940. CREATE TABLE emp

  1941. (id NUMBER(7),

  1942. last_name VARCHAR2(25),

  1943. first_name VARCHAR2(25),

  1944. dept_id NUMBER(7)

  1945. CONSTRAINT emp_dept_id_fk REFERENCES departments (department_id));

  1946. CREATE INDEX dept_name_index ON emp (dept_id);

  1947. index DEPT_NAME_INDEX created.

  1948. DROP TABLE emp;

  1949. 4. Создайте синоним для таблицы EMPLOYEES. Назовите его EMP.

  1950. CREATE SYNONYM emp FOR employees;

  1951. Практическое занятие 11

  1952. • Создайте скрипт, который позволит получать информацию об именах колонок, типах данных, допустимых объемах ячеек, а также о допустимости пустых ячеек. Пользователь должен иметь возможность вводить имя таблицы. Задайте псевдонимы для столбцов DATA_PECISION и DATA_SCALE. Сохраните скрипт в файле.

  1953. SELECT column_name, data_type, data_length, data_precision «PRECISION», data_scale «SCALE», nullable

  1954. FROM user_tab_columns

  1955. WHERE table_name = UPPER (‘&table_name’);

  1956. COLUMN_NAME DATA_TYPE DATA_LENGTH PRECISION SCALE NULLABLE

  1957. —————————— ———————————————————————————————————- ———— ———- ———- ———

  1958. DEPARTMENT_ID NUMBER 22 4 0 N

  1959. DEPARTMENT_NAME VARCHAR2 30 N

  1960. MANAGER_ID NUMBER 22 6 0 Y

  1961. LOCATION_ID NUMBER 22 4 0 Y

  1962. Например, если пользователь ввел DEPARTMENTS, он должен получить следующий результат:

  1963. COLUMN_NAME DATA_TYPE DATA_LENGTH PRECISION SCALE N

  1964. DEPARTMENT_ID NUMBER 22 4 0 N

  1965. DEPARTMENT_NAME VARCHAR2 30 N

  1966. MANAGER_ID NUMBER 22 6 0 Y

  1967. LOCATION_ID NUMBER 22 4 0 Y

  1968. • Создайте скрипт для получения информации об именах колонок, именах ограничений, условиях поиска и статусе таблицы. Для получения необходимой информации Вы должны соединить таблицы USER_CONSTRAINTS и USER_CONS_COLUMNS. Пользователь должен иметь возможность вводить имя таблицы. Сохраните скрипт в файле.

  1969. SELECT ucol.column_name, ucol.constraint_name,

  1970. uconstr.constraint_type «C», uconstr.search_condition, uconstr.status

  1971. FROM user_cons_columns ucol

  1972. JOIN user_constraints uconstr

  1973. ON ucol.constraint_name = uconstr.constraint_name

  1974. AND ucol.table_name = UPPER (‘&write_table_name’);

  1975. CONSTRAINT_NAME C SEARCH_CONDITION STATUS

  1976. ———————————————————————————————————————————- —————————— — ——————————————————————————— ———

  1977. SYS_C00140066 C «DEPARTMENT_NAME» IS NOT NULL ENABLED

  1978. DEPT_ID_PK P ENABLED

  1979. DEPT_MGR_FK R ENABLED

  1980. DEPT_LOC_FK R ENABLED

  1981. Например, если пользователь ввел DEPARTMENTS, он должен получить следующий результат:

  1982. COLUMN_NAME CONSTRAINT_NAME C SEARCH_CONDITION STATUS

  1983. DEPARTMENT_ID DEPT_ID_PK P ENABLED

  1984. LOCATION_ID DEPT_LOC_FK R ENABLED

  1985. MANAGER_ID DEPT_MGR_FK R ENABLED

  1986. DEPARTMENT_NAME DEPT_NAME_NN C «DEPARTMENT_NAME» IS NOT NULL ENABLED

  1987. • Добавьте комментарий к таблице DEPARTMENTS. Затем обратитесь с запросом к представлению USER_TAB_COMMENTS, для проверки факта создания комментария.

  1988. COMMENT ON TABLE departments IS ‘Bla-bla-bla’;

  1989. SELECT comments

  1990. FROM user_tab_comments

  1991. WHERE table_name = ‘DEPARTMENTS’;

  1992. ———————————————————————————————————————-

  1993. COMMENTS

  1994. Company department information including name, code and location

  1995. • Найдите имена всех синонимов в вашей схеме

  1996. SELECT *

  1997. FROM user_synonyms;

  1998. SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK

  1999. ————— —————— ————————————————————————

  2000. EMP ANNLUS EMPLOYEES

  2001. SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK

  2002. EMP HR EMPLOYEES

  2003. • Из представления словаря данных USER_VIEWS выберите столбцы VIEW_NAME и TEXT.

  2004. Примечание: для просмотра содержимого столбца типа LONG выполните команду SET LONG n, где n – число выводимых запросом символов из столбца типа LONG.

  2005. SET LONG 50

  2006. SELECT view_name, text

  2007. FROM user_views;

  2008. VIEW_NAME TEXT

  2009. —————————— —————————————————

  2010. СПЕЦ SELECT Врач.ФИО_Врача, Список_спец.Специальность,

  2011. ПРЕДСТАВЛЕНИЕ SELECT Автор.ФИО, Книга.Назв_е, Изд_во.Назв_изд

  2012. БОЛЬН_УЧАСТК SELECT Пациент.ФИО, Врач.ФИО_Врача, Расписание_на_

  2013. SALARY_VU SELECT e.last_name, d.department_name, e.salary, j

  2014. EMPLOYEES_VU SELECT employee_id, last_name employee, department

  2015. DEPT50 SELECT employee_id empno, last_name employee, depa

  2016. 6 rows selected

  2017. 5. Найдите имена всех ваших последовательностей. Напишите запрос для получения следующей информации о ваших последовательностях: имя последовательности, максимальное значение, величина приращения, последнее значение. Сохраните скрипт в файле. Выполните скрипт.

  2018. SELECT sequence_name, max_value, increment_by, last_number

  2019. FROM user_sequences;

  2020. SEQUENCE_NAME MAX_VALUE INCREMENT_BY LAST_NUMBER

  2021. —————————— ———- ———— ————

  2022. DEPT_ID_SEQ 1000 10 600

  2023. SEQUENCE_NAME MAX_VALUE INCREMENT_BY LAST_NUMBER

  2024. DEPARTMENTS_SEQ 9990 10 280

  2025. EMPLOYEES_SEQ 1,0000E+27 1 207

  2026. LOCATIONS_SEQ 9900 100 3300

  2027. ОГЛАВЛЕНИЕ

  2028. Практическое занятие 1 1

  2029. Практическое занятие 2 5

  2030. Практическое занятие 3, часть 1 8

  2031. Практическое занятие 3, часть 2 10

  2032. Практическое занятие 4 13

  2033. Практическое занятие 5 15

  2034. Практическое занятие 6 19

  2035. Практическое занятие 7 22

  2036. Практическое занятие 8 23

  2037. Практическое занятие 9 25

  2038. Практическое занятие 10, Часть 1 26

  2039. Практическое занятие 10, Часть 2 27

  2040. Практическое занятие 11 28

Автор:   •  Май 28, 2019  •  Анализ учебного пособия  •  124,246 Слов (497 Страниц)  •  493 Просмотры

Страница 1 из 497

ПРАКТИЧЕСКИЕ ЗАНЯТИЯ ПО КУРСУ

ВВЕДЕНИЕ В ORACLE 10g:  SQL (Часть 1)

Без ORDER BY как (в каком порядке) выводятся значения в таблице? (см. книгу)

Практическое занятие 1

  • Выборка данных из разных таблиц
  • Описание структуры таблиц
  • Выполнение арифметических вычислений и задание имён столбцов
  • Использование iSQL*Plus
  1. Будет ли успешна эта команда SELECT?
    SELECT  last_name, job_id, salary As sal

FROM employees;


Да/Нет

  1. Будет ли успешна эта команда SELECT?
    SELECT *
    FROM job_grades;
    Да/Нет
  2. Команда SELECT содержит 4 ошибки. Укажите их.
    SELECT employee_id, last_name
    sal x 12 ANNUAL SALARY
    FROM employees;


Верно:

SELECT employee_id, last_name, (salary*12) «ANNUAL SALARY»

FROM employees;

EMPLOYEE_ID            LAST_NAME                 ANNUAL SALARY          

———————- ————————- ———————-

198                    OConnell                  31200                  

199                    Grant                     31200                  

200                    Whalen                    52800                  

201                    Hartstein                 156000        

  1. Покажите структуру таблицы DEPARTMENTS. Выберите данные из неё.

    DESCRIBE departments

SELECT *

FROM departments;

Name                           Null     Type                                                                                                                                                                                          

—————————— ——— ———————————————————————————————————————————————————————————————

DEPARTMENT_ID                  NOT NULL NUMBER(4)                                                                                                                                                                                    

DEPARTMENT_NAME                NOT NULL VARCHAR2(30)                                                                                                                                                                                  

MANAGER_ID                              NUMBER(6)                                                                                                                                                                                    

LOCATION_ID                             NUMBER(4)

DEPARTMENT_ID          DEPARTMENT_NAME                MANAGER_ID             LOCATION_ID            

———————- —————————— ———————- ———————-

10                     Administration                 200                    1700                  

20                     Marketing                      201                    1800                  

30                     Purchasing                     114                    1700                  

40                     Human Resources                203                    2400                  

50                     Shipping                       121                    1500                  

60                     IT                             103                    1400

Name

Null?

Type

DEPARTMENT_ID

NOT NULL

NUMBER(4)

DEPARTMENT_NAME

NOT NULL

VARCHAR(2)

MANAGER_ID

NUMBER(6)

LOCATION_ID

NUMBER(4)

DEPARTMENT_ID

DEPARTMENT_NAME

MANAGER_ID

LOCATION_ID

10

Administration

200

1700

20

Marketing

201

1800

50

Shipping

124

1500

60

IT

103

1400

80

Sales

149

2500

90

Executive

100

1700

110

Accounting

205

1700

190

Contracting

1700


8 row selected

Доступно только на Essays.club

Скачай Конспект решений курса SQL Базы данных ч.1 и еще Конспекты лекций в формате PDF Базы данных только на Docsity! ПРАКТИЧЕСКИЕ ЗАНЯТИЯ ПО КУРСУ ПРОГРАММИРОВАНИЕ БАЗ ДАННЫХ: SQL (Часть 1) ОГЛАВЛЕНИЕ Практическое занятие 1. Выбор данных с использованием команды SELECT……………………………….2 Практическое занятие 2. Ограничение и сортировка выходных данных……………………………………..10 Практическое занятие 3. Использование однострочных функций (часть 1)……………………………….18 Практическое занятие 3. Использование однострочных функций (часть 2)……………………………….22 Практическое занятие 4. Агрегирование данных с помощью групповых функций………………………..29 Практическое занятие 5. Выборка данных из нескольких таблиц……………………………………………….34 Практическое занятие 6. Использование некоррелированных подзапросов………………………………….45 SELECT DISTINCT……………………………………………………………………………………………………………………..56 NVL(TO_CHAR(employee_id), ‘ ‘) AS employee_id,……………………………………………………………………….56 NVL(TO_CHAR(department_id), ‘ ‘) AS department_id,………………………………………………………………….56 ‘ ‘ AS department_name……………………………………………………………………………………………………………….56 FROM employees………………………………………………………………………………………………………………………..56 UNION ALL………………………………………………………………………………………………………………………………..56 SELECT DISTINCT…………………………………………………………………………………………………………………….56 ‘ ‘,……………………………………………………………………………………………………………………………………………..56 TO_CHAR(department_id),………………………………………………………………………………………………………….56 department_name……………………………………………………………………………………………………………………….56 FROM departments;……………………………………………………………………………………………………………………56 Практическое занятие 9. Использование команд DDL для создания и изменения таблиц…………….61 Практическое занятие 10. Создание других объектов схем (часть 1)………………………………………..63 Практическое занятие 10. Создание других объектов схем (часть 2)…………………………………………67 Практическое занятие 11. Управление объектами с помощью представлений словаря данных…..69 1 Практическое занятие 1. Выбор данных с использованием команды SELECT  Выборка данных из разных таблиц  Описание структуры таблиц  Выполнение арифметических вычислений и задание имён столбцов  Использование оператора конкатенации символьных значений. 1. Будет ли успешна эта команда SELECT? [ДА] SELECT last_name, job_id, salary As sal FROM employees; ` Да/Нет 2. Будет ли успешна эта команда SELECT? [ДА] SELECT * FROM job_grades; Да/Нет 3. Команда SELECT содержит 4 ошибки. Укажите их. SELECT employee_id, last_name sal x 12 ANNUAL SALARY FROM employees; Нет запятой после last_name, sal вместо salary, x вместо *, пропущены кавычки в псевдониме ANNUAL SALARY. Правильный вариант выглядит следующим образом: SELECT employee_id, last_name, salary * 12 “ANNUAL SALARY” FROM employees; 4. Покажите структуру таблицы DEPARTMENTS. Выберите данные из неё. Name Null? Type DEPARTMENT_ID NOT NULL NUMBER(4) DEPARTMENT_NAME NOT NULL VARCHAR(2) MANAGER_ID NUMBER(6) LOCATION_ID NUMBER(4) DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID 10 Administration 200 1700 20 Marketing 201 1800 50 Shipping 124 1500 60 IT 103 1400 80 Sales 149 2500 90 Executive 100 1700 110 Accounting 205 1700 190 Contracting 1700 8 row selected 2 ЕМРТОЗЕЕ ТО МОТ МОТ, МОМВЕВ (6)

ЕТАЗТ МАМЕ УАИСНАР? (20)

ТАЗТ_ МАМЕ НОТ МОТ, УАВСНАЕ2 {25}

ЕМАТЬ НОТ МЛ. УАВСНАЕ2 (25)

РНОНЕ_МОМВЕВ УАВСНАЮ2 (20)

НТВЕ_РАТЕ НОТ МОЛ, РАТЕ

вто МОТ НЫ. УАВСНАВ2 {10}

ЗАТАВУ ВПМВЕВ (8,2)

СОММТ55ТОН_РСТ МОМВЕВ (2,2)

МАНАСЕВ_ТР ЗМВЕВ (5)

РЕРАВТМЕНТ_ТО МОМВЕВ (4)

ЕМРТОТЕЕ ТО ГАЗТ_МАМЕ зов то Этаетрасе
100 Ета АР РВЕЗ — 17-Л71-03
101 Коспваг АО УР 21-ЗЕР-05
102 ре Наап АО УР 13-ТАМ-01
103 Нипола ТТ_РРОб — 03-ТАН-06
104 Етпзе ТТ_РВОб 21-НМАУ-07
105 АизЕза ТТ_2Р806 — 25-Л-05
106 Ратаьа11а ТТ_Р80б — 05-РЕВ-06
107 Тогерех ТТ_РРОб — 07-РЕВ-07
108 бхеельего ЕТ МСК 17-106-02
109 Еаулев ЕТ АССОПМТ 16-А06-02
110 Сев ЕТ АССОПМТ 28-5ЕР-05

107 гонз зе1естеа.

6. Проверьте выполнение запроса из файла 1аБ1_5.54, чтобы убедиться, что он выполняется
правильно.
7. Составьте запрос для вывода неповторяющихся идентификаторов должностей из таблицы EMPLOYEES. JOB_ID AC_ACCOUNT AC_MGR AD_ASST AD_PRES AD_VP IT_PROG MK_MAN MK_REP SA_MAN SA_REP ST_CLERK ST_MAN SELECT DISTINCT job_id FROM employees; 8. Скопируйте команды из файла lab1_5.sql в окно редактирования SQL*Developer. Назовите столбцы Emp #, Employee, Job, Hire Date. Выполните запрос ещё раз. Emp # Employee Job Hire Date 100 King AD_PRES 17-JUN-87 101 Kochhar AD_VP 21-SEP-89 102 De Haan AD_VP 13-JAN-93 103 Hunold IT_PROG 03-JAN-90 104 Ernst IT_PROG 21-MAY-91 107 Lorentz IT_PROG 07-FEB-99 6 124 Mourgos ST_MAN 16-NOV-99 141 Rajs ST_CLERK 17-OCT-95 142 Davies ST_CLERK 90-JAN-97 143 Matos ST_CLERK 15-MAR-98 144 Vargas ST_CLERK 09-JUL-98 SELECT employee_id AS «Emp #», last_name AS «Employee», job_id AS «Job», TO_CHAR(hire_date, ‘DD-MON-YY’, ‘NLS_Date_Language=English’) AS «Hire Date» FROM employees; 9. Выведите на экран фамилию сотрудника, соединённую с идентификатором его должности через запятую и пробел. Назовите новый столбец Employee and Title. Employee and Title King, AD_PRES Kochhar, AD_VP De Haan, AD_VP Hunold, IT_PROG Ernst, IT_PROG Lorentz, IT_PROG Mourgos, ST_MAN Rajs, ST_CLERK Davies, ST_CLERK Matos, ST_CLERK SELECT last_name ||’, ‘||job_id as «Employee and Title» FROM employees; 7 Практическое занятие 2. Ограничение и сортировка выходных данных  Выборка данных и изменение последовательности вывода строк  Ограничение количества возвращаемых строк с помощью предложения WHERE  Сортировка строк с помощью предложения ORDER BY  Использование при составлении запросов подстановочных переменных 1. Создайте запрос для вывода фамилии и заработной платы служащих, зарабатывающих более $12000. Сохраните команду SQL в файле lab2_1.sql. Выполните запрос. LAST_NAME SALARY King 24000 Kochhar 17000 De Haan 17000 Hartstein 13000 SELECT last_name, salary FROM employees WHERE salary > 12000; 2. Создайте запрос для вывода фамилии и номера отдела служащего под номером 176. LAST_NAME DEPARTMENT_ID Taylor 80 SELECT last_name, department_id FROM employees WHERE employee_id = 176; 3. Измените файл lab2_1.sql и выведите фамилии и оклады всех служащих, чей оклад не входит в диапазон от $5000 до $12000. Сохраните команду SQL в файле lab2_3.sql. LAST_NAME SALARY King 24000 Kochhar 17000 10 De Haan 17000 Lorentz 4200 Rajs 3500 Davies 3100 Matos 2600 Vargas 2500 Whalen 4400 Hartstein 13000 SELECT last_name, salary FROM employees WHERE salary < 5000 OR salary > 12000; 4. Выведите фамилию, идентификатор должности и дату начала работы всех служащих, нанятых в период с 20 февраля 2008 по 1 мая 2008 г. Отсортируйте данные в порядке возрастания даты найма. LAST_NAME JOB_ID HIRE_DATE Matos ST_CLERK 15-MAR-98 Taylor SA_REP 24-MAR-98 SELECT last_name, job_id, TO_CHAR(hire_date, ‘DD-MON-YY’, ‘NLS_Date_Language=English’) AS «HIRE_DATE» FROM employees WHERE hire_date > ‘20.02.2008’ AND hire_date < ‘1.05.2008’ ORDER BY hire_date; 11 5. Выведите фамилию и номер отдела всех служащих из отделов 20 и 50. Отсортируйте данные по фамилиям в алфавитном порядке. 7 row selected SELECT last_name, department_id FROM employees WHERE department_id = 20 OR department_id = 50 ORDER BY last_name; 6. Измените файл lab2_3.sql для вывода фамилий и окладов служащих отделов 20 и 50, зарабатывающих от $5000 до $12000. Назовите столбцы Employee и Monthly Salary, соответственно. Вновь сохраните команду SQL в файле lab2_6.sql. Выполните запрос. Employee Monthly Salary Mourgos 5800 Fay 6000 SELECT last_name AS Employee, salary AS «Monthly Salary» FROM employees WHERE salary > 5000 AND salary < 12000 AND (department_id = 20 OR department_id = 50); 7. Выведите фамилию и дату найма всех служащих, нанятых в 2004 г. LAST_NAME HIRE_DATE 12 12. Выведите все фамилии служащих, в которых третья буква – а. LAST_NAME Grant Whalen SELECT last_name FROM employees WHERE SUBSTR(last_name, 3, 1) = ‘a’; 13. Выведите фамилии всех служащих, в которых есть буквы «а» и «е». LAST_NAME De Haan Davies Whalen Hartstein SELECT last_name FROM employees WHERE last_name LIKE ‘%a%’ AND last_name LIKE ‘%e%’; 15 14. Запросите фамилии, должности и оклады всех служащих, работающих торговыми представителями (SA_REP) или клерками на складе (ST_CLERK) и с окладом, не равным $2500, $3500 и $7000. LAST_NAME JOB_ID SALARY Davies ST_CLERK 3100 Matos ST_CLERK 2600 Abel SA_REP 11000 Taylor SA_REP 8600 SELECT last_name, job_id, salary FROM employees WHERE (job_id = ‘SA_REP’ OR job_id = ‘ST_CLERK’) AND (salary != ANY(2500, 3500, 7000)); 15. Измените lab2_6.sql так, чтобы получить фамилии оклады и комиссионные всех служащих, у которых сумма комиссионных составляет 20%. Выполните запрос ещё раз. Сохраните запрос в файле lab2_15.sql. Employee Monthly Salary COMMISSION_PCT 16 Zlotkey 10500 .2 Taylor 8600 .2 SELECT last_name AS Employee, salary AS «Monthly Salary», commission_pct FROM employees WHERE commission_pct = 0.2; 17 6. Перепишите запрос таким образом, чтобы пользователь мог при выполнении запроса вводить букву, с которой начинается фамилия сотрудника. При вводе пользователем нескольких букв выбор фамилий должен осуществляться по первой букве. SELECT UPPER(SUBSTR(last_name, 1, 1))||LOWER(SUBSTR(last_name, 2)) AS «Name», LENGTH(last_name) AS «Length» FROM employees WHERE UPPER(SUBSTR(last_name, 1, 1)) = UPPER(SUBSTR(‘&init’, 1, 1)); 7. Создайте запрос для определения срока работы сотрудников в месяцах до текущей даты. Назовите столбец MONTHS_WORKED. Отсортируйте результат в порядке возрастания числа проработанных месяцев. Округлите результат до целого числа. LAST_NAME MONTH_WORKED Zlotkey 13 Mourgos 16 Grant 22 Lorentz 25 Vargas 32 Taylor 36 Matos 36 Fay 43 …………….. 20 rows selected SELECT last_name, TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date)) AS “MONTH WORKED” FROM employees ORDER BY 2; Практическое занятие 3. Использование однострочных функций (часть 2)  Составление запросов, требующих использования числовых, символьных функций и функций для работы с датами.  Составление запросов, нечувствительных к регистру символов.  Использование функций NVL, LPAD, RPAD.  Составление запросов с функцией DECODE и выражением CASE. 1. Получите по каждому служащему отчёт в следующем виде: <фамилия> earns <оклад с указанием символа валюты, дробная часть должна содержать два разряда и быть отделена от целой части точкой, группы разрядов целой части должны быть разделены запятыми> monthly, but wants <утроенный оклад в том же формате>. Между словами должно быть ровно по одному пробелу. Назовите столбец Dream Salaries. Dream Salaries King earns $24,000.00 monthly, but wants $72,000.00 Kochhar earns $17,000.00 monthly, but wants $51,000.00 De Haan earns $17,000.00 monthly, but wants $51,000.00 Hunold earns $9,000.00 monthly, but wants $27,000.00 Ernst earns $6,000.00 monthly, but wants $18,000.00 Lorentz earns $4,200.00 monthly, but wants $12,600.00 Mourgos earns $5,800.00 monthly, but wants $17,400.00 Rajs earns $3,500.00 monthly, but wants $10,500.00 Davies earns $3,100.00 monthly, but wants $9,300.00 …………… 20 rows selected SELECT last_name || ‘ earns ‘ || TRIM(LEADING ‘ ‘ FROM TO_CHAR(salary,’$99,999.00’)) || ‘ monthly, but wants ‘ || TRIM(LEADING ‘ ‘ FROM TO_CHAR(salary * 3,’$99,999.00′)) AS «Dream Salaries» FROM employees; 4. По каждому служащему выведите фамилию, дату найма и день недели, когда он был нанят на работу. Назовите последний столбец DAY. Отсортируйте результаты по дням недели. LAST_NAME HIRE_DATE DAY Grant 24-MAY-99 MONDAY Ernst 21-MAY-91 TUESDAY Mourgos 16-NOV-99 TUESDAY Taylor 24-MAR-98 TUESDAY Rajs 17-OCT-95 TUESDAY Gietz 07-JUN-94 TUESDAY Higgins 07-JUN-94 TUESDAY King 17-JUN-87 WEDNESDAY De Haan 13-JAN-93 WEDNESDAY ……………… 20 rows selected SELECT last_name, TO_CHAR(hire_date,’DD-MON-YY’,’NLS_Date_Language=English’) AS HIRE_DATE, TO_CHAR(hire_date,’DAY’,’NLS_Date_Language=English’) AS DAY FROM employees ORDER BY TO_CHAR(employees.hire_date,’D’); 5. Напишите запрос для вывода фамилии и суммы комиссионных каждого служащего. Если служащий не зарабатывает комиссионных, укажите в столбце «No Commission». Назовите столбец COMM. LAST_NAME COMM King No Commission Kochhar No Commission De Haan No Commission Hunold No Commission Ernst No Commission Lorentz No Commission Mourgos No Commission Rajs No Commission Davies No Commission Matos No Commission Vargas No Commission Zlotkey .2 Abel .3 ……………. 20 rows selected SELECT last_name, NVL(TO_CHAR(commission_pct, ‘.9′),’No Commission’) AS COMM FROM employees; 6. Напишите запрос для отображения фамилий сотрудников и их заработной платы в виде гистограммы, состоящей из звёздочек. Каждая звёздочка означает 1000$. Строки должны быть отсортированы по заработной плате в убывающем порядке. Результат должен быть выведен одним столбцом, озаглавленным как EMPLOYEES AND THEIR SALARIES. EMPLOYEES AND THEIR SALARIES King************************ Kochhar***************** De Haan***************** Hartstein************* Higgins************ Abel*********** …………………. 20 rows selected 7. Используя функцию DECODE, напишите запрос для отображения должности сотрудника и её разряда (grade). Разряд каждого типа должности JOB_ID приведён в таблице. Должность Разряд AD_PRES A ST_MAN B IT_PROG C SA_REP D ST_CLERK E Другая 0 JOB_ID G AD_PRES A AD_VP 0 AD_VP 0 IT_PROG C IT_PROG C IT_PROG C ST_MAN B ST_CLERK E ………………….. 20 rows selected SELECT DISTINCT job_id, DECODE(job_id, ‘AD_PRES’, ‘A’, ‘ST_MAN’, ‘B’, ‘IT_PROG’, ‘C’, ‘SA_REP’, ‘D’, ‘ST_CLERK’, ‘E’, ‘0’) AS G FROM employees; ……………. 3. Напишите запрос для вывода должности и количества служащих, занимающих каждую должность. JOB_ID CNT AD_ACCOUNT 1 AC_MGR 1 AD_ASST 1 AD_PRES 1 AD_VP 2 IT_PROG 3 MK_MAN 1 MK_REP 1 SA_MAN 1 SA_REP 3 ST_CLERK 4 ST_MAN 1 SELECT job_id, COUNT(employee_id) AS CNT FROM employees GROUP BY job_id; 4. Получите количество служащих, имеющих подчинённых, без их перечисления. Назовите столбец Number of Managers. Используйте столбец MANAGER_ID для определения числа менеджеров. Number of Managers 8 SELECT COUNT(DISTINCT manager_id) AS «Number of Managers» FROM employees; 5. Напишите запрос для вывода разности между самым высоким и самым низким окладами. Назовите столбец DIFFERENCE DIFFERENCE 21500 SELECT MAX(salary) — MIN(salary) AS DIFFERENCE FROM employees; 6. Напишите запрос для вывода номера каждого менеджера, имеющего подчинённых, и заработную плату самого низкооплачиваемого из его подчинённых. Исключите сотрудников, для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $6000. Отсортируйте выходные строки в порядке убывания минимального оклада. MANAGER_ID MIN_SALARY 102 9000 205 8300 149 7000 SELECT DISTINCT manager_id, MIN(salary) AS MIN_SALARY FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary) >= 6000 ORDER BY MIN_SALARY DESC; 7. Напишите запрос для вывода общего количества служащих и количества служащих, нанятых в 2005, 2006, 2007 и 2008 годах. Дайте соответствующие заголовки столбцам. TOTAL 1995 1996 1997 1998 20 1 2 2 3 SELECT COUNT(employee_id) AS TOTAL, COUNT(DECODE(TO_CHAR(hire_date,’YYYY’), ‘2005’, 1, null)) AS «2005», COUNT(DECODE(TO_CHAR(hire_date,’YYYY’), ‘2006’, 1, null)) AS «2006», COUNT(DECODE(TO_CHAR(hire_date,’YYYY’), ‘2007’, 1, null)) AS «2007», COUNT(DECODE(TO_CHAR(hire_date,’YYYY’), ‘2008’, 1, null)) AS «2008» FROM employees; 8. Напишите матричный запрос для вывода всех должностей и суммы заработной платы служащих, работающих в этой должности в отделах 20, 50, 80 и 90. Последний столбец должен содержать сумму заработной платы служащих этих отделов, занимающих каждую конкретную должность. Дайте столбцам соответствующие заголовки. Job Dept20 Dept50 Dept80 Dept90 Total AC_ACCOUNT 8300 8300 AC_MGR 7000 5000 12000 AD_ASST 4400 4400 AD_PRES 24000 24000 AD_VP 34000 34000 IT_PROG 14000 5200 19200 SELECT DISTINCT job_id AS JOB, NVL(TO_CHAR(SUM(DECODE( department_id, 20, salary, null))), ‘ ‘) AS «Dept20», 2. Напишите запрос для вывода фамилии, номера отдела и названия отдела для всех служащих. LAST_NAME DEPARTMENT_ID DEPARTMENT_NAME Whalen 10 Administration Hartstein 20 Marketing Fay 20 Marketing Mourgos 50 Shipping Rajs 50 Shipping Davies 50 Shipping Matos 50 Shipping Vargas 50 Shipping …………….. 19 rows selected Задачу решить в синтаксисе ANSI SQL-99 и в специфической для Oracle форме записи. ANSI: SELECT e.last_name, department_id, d.department_name FROM employees e LEFT JOIN departments d USING(department_id); ORACLE: SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id(+); 3. Выведите список всех должностей в отделе 80 (должности в списке не должны повторяться) и местоположение отдела. JOB_ID LOCATION_ID SA_MAN 2500 SA_REP 2500 SELECT DISTINCT e.job_id, d.location_id FROM employees e LEFT JOIN departments d USING(department_id) WHERE department_id=80; 4. Выведите фамилии всех служащих, содержащих букву «а» (в строчном регистре), с названиями отделов. Сохраните свою команду SQL в файле lab5_4.sql. LAST_NAME DEPARTMENT_NAME Whalen Administration Hartstein Marketing Fay Marketing Rajs Shipping Davies Shipping Matos Shipping Vargas Shipping Taylor Sales Kochhar Executive De Haan Executive 10 rows selected. Задачу решить в синтаксисе ANSI SQL-99 и в специфической для Oracle форме записи. ANSI: SELECT e.last_name, d.department_name FROM employees e LEFT JOIN departments d USING(department_id) WHERE e.last_name LIKE ‘%a%’; Oracle: SELECT e.last_name, d.department_name FROM employees e, departments d WHERE (e.last_name LIKE ‘%a%’) AND (e.department_id = d.department_id(+)); 5. Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto. LAST_NAME JOB_ID DEPARTMENT_ID DEPARTMENT_NAME Hartstein MK_MAN 20 Marketing Fay MK_REP 20 Marketing SELECT e.last_name, e.job_id, department_id, d.department_name FROM employees e JOIN departments d USING(department_id) JOIN locations l USING (location_id) WHERE INITCAP(l.city) = ‘Toronto’; 6. Выведите фамилии и номера всех служащих вместе с фамилиями и номерами их менеджеров. Назовите столбцы Employee, Emp#, Manager и Mgr#. Сохраните свою команду SQL в файле lab5_6.sql. Employee Emp# Manager Mgr# Kochhar 101 King 100 De Haan 102 King 100 HIGHEST_SAL NUMBER DESCRIBE JOB_GRADES; LAST_NAME JOB_ID DEPARTMENT_NAME SALARY GRA Matos ST_CLERK Shipping 2600 A Vargas ST_CLERK Shipping 2500 A Lorentz IT_PROG IT 4200 B Mourgos ST_MAN Shipping 5800 B Rajs ST_CLERK Shipping 3500 B Davies ST_CLERK Shipping 3100 B Whalen AD_ASST Administration 4400 B SELECT last_name, job_id, department_name, salary, grade_level AS «GRA» FROM employees e JOIN departments d USING(department_id) JOIN job_grades jg ON(e.salary <= jg.highest_sal AND e.salary >= jg.lowest_sal); 10. Создайте запрос для вывода фамилий и дат найма всех служащих, нанятых после Davies. LAST_NAME HIRE_DATE Lorentz 07-FEB-99 Mourgos 16-NOV-99 Matos 15_MAR-98 Vargas 09-JUL-98 Zlotkey 29-JAN-00 Taylor 24-MAR-98 Grant 24-MAY-99 Fay 17-AUG-97 SELECT e.last_name, TO_CHAR(e.hire_date, ‘DD-MON-YY’, ‘NLS_Date_Language=English’) FROM employees e JOIN employees davies ON(e.hire_date > davies.hire_date AND davies.last_name = ‘Davies’); 11. По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Emp Hired, Manager и Manager Hired. Employee Emp Hired Manager Mgr Hired Whalen 17-SEP-87 Kochhar 21-SEP-89 Hunold 03-JAN-90 De Haan 13-JAN-93 Rajs 17-OCT-95 Mourgos 16-NOV-99 Davies 29-JAN-97 Mourgos 16-NOV-99 Matos 15-MAR-98 Mourgos 16-NOV-99 Vargas 09-JUL-98 Mourgos 16-NOV-99 Abel 11-MAY-96 Zlotkey 29-JAN-00 Taylor 24-MAR-98 Zlotkey 29-JAN-00 Grant 24-MAY-99 Zlotkey 29-JAN-00 SELECT e.last_name AS «Employee», TO_CHAR(e.hire_date, ‘DD-MON-YY’, ‘NLS_Date_Language=English’) AS «Emp Hired», m.last_name AS «Manager», TO_CHAR(m.hire_date, ‘DD-MON-YY’, ‘NLS_Date_Language=English’) AS «Mgr Hired» FROM employees e JOIN employees m ON(e.manager_id = m.employee_id AND e.hire_date < m.hire_date); 12. Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьте вывод отделов, в которых нет сотрудников. DEPARTMENT_ID DEPARTMENT_NAME LOCATION_ID COUNT 10 Administration 1700 1 20 Marketing 1800 2 50 Shipping 1500 5 60 IT 1400 3 80 Sales 2500 3 90 Executive 1700 3 110 Accounting 1700 2 190 Contracting 1700 0 Задачу решить в синтаксисе ANSI SQL-99 и в специфической для Oracle форме записи. ANSI: SELECT department_id, department_name, location_id, COUNT(employee_id) AS «COUNT» FROM departments LEFT JOIN employees USING (department_id) GROUP BY department_id, department_name, location_id; Oracle: SELECT d.department_id, department_name, location_id, COUNT(e.employee_id) AS «COUNT» FROM departments d, employees e WHERE d.department_id = e.department_id(+) GROUP BY d.department_id, department_name, location_id; Практическое занятие 6. Использование некоррелированных подзапросов  Создание некоррелированных подзапросов для выборки данных по неизвестным критериям  Использование некоррелированных подзапросов для выявления значений, существующих в одном наборе данных и отсутствующих в другом 1. Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с Zlotkey. Исключите Zlotkey из выходных данных. SELECT last_name, TO_CHAR(hire_date, ‘DD-MON-YY’, ‘NLS_Date_Language=English’) AS HIRE_DATE FROM employees WHERE last_name != ‘Zlotkey’ AND department_id IN ( SELECT department_id FROM employees WHERE last_name = ‘Zlotkey’ ); 2. Создайте запрос для вывода номеров и фамилий всех служащих, оклад которых выше среднего. Отсортируйте данные в порядке увеличения окладов. SELECT employee_id, last_name, salary FROM employees WHERE salary > ( SELECT AVG(salary) FROM employees ) ORDER BY salary; 3. Создайте запрос для вывода номеров и фамилий всех служащих, работающих в одном отделе с любым служащим, фамилия которого содержит букву «u». Сохраните свой запрос в тестовом файле lab6_3.sql. Выполните запрос. SELECT employee_id, last_name FROM employees WHERE department_id IN ( SELECT department_id FROM ( SELECT department_id FROM employees WHERE last_name LIKE ‘%u%’ ) d JOIN employees e USING (department_id) GROUP BY department_id HAVING COUNT(e.employee_id) > 1 ); 4. Создайте запрос для вывода фамилии, номера отдела и должности каждого служащего, идентификатор местоположения отдела которого равен 1700. SELECT last_name, department_id, job_id FROM employees WHERE department_id IN ( SELECT department_id FROM departments WHERE location_id = 1700 ); 120 Ме1 33 8000
121 Ег1рр 8200
123 Уо1 пап 5500
125 Мауег 3200
126 №1111 пел: 2700
127 Гапагу 2400
128 Магк1е 2200
129 813305 3300
130 АсЕ1пзоп 2800
131 Маг1ом 2500
132 01301 2100

8. Покажите номер отдела с наивысшей средней заработной платой и наименьший оклад
работающего в нём сотрудника.

| РЕРАВТМЕНТ 10 [ МИМАГАВУ)
[ 90 || 17000

SELECT department_id, MIN(SALARY) FROM employees WHERE department_id IN ( SELECT department_id FROM employees GROUP BY department_id HAVING AVG(salary)=( SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id ) ) GROUP BY department_id; 9. Выведите номера, наименования и местоположения отделов, в которых не работают торговые представители (job_id = ‘SA_REP’). ). SELECT department_id, department_name, manager_id, location_id FROM departments WHERE manager_id NOT IN ( SELECT employee_id FROM employees WHERE job_id = ‘SA_REP’ ); Практическое занятие 7. Использование операторов над множествами  Создание запросов с использованием операторов UNION, MINUS, INTERSECT.  Управление порядком вывода строк. 1. Используя оператор SET, выведите номера отделов (department_id), в которых нет служащих с идентификатором должности (job_id) ST_CLERK. SELECT department_id FROM departments MINUS SELECT department_id FROM employees WHERE job_id = ‘ST_CLERK’; 2. Используя оператор SET, выведите идентификаторы и наименования стран, в которых не располагаются отделы компании. SELECT country_id AS «CO», country_name FROM countries MINUS SELECT country_id AS «CO», c.country_name FROM countries c JOIN locations l USING(country_id) JOIN departments USING(location_id); SELECT job_id, department_id FROM employees INTERSECT SELECT job_id, department_id FROM employees WHERE department_id = 20 ); 4. Выведите номер сотрудника и идентификатор его должности, если его текущая должность совпадает с той, которую он уже занимал, работая в компании. SELECT employee_id, job_id FROM employees INTERSECT SELECT employee_id, job_id FROM job_history; 5. Напишите составной запрос, который выводит следующее:  Номера и отделы всех сотрудников из таблицы EMPLOYEES, независимо от того, относятся ли они к какому-то отделу или нет;  Номера и наименования всех отделов из таблицы DEPARTMENTS, независимо от того, есть ли в них сотрудники или нет. EMPLOYEE_ID DEPARTMENT_ID DEPARTMENT_NAME 100 90 101 90 102 90 103 60 104 60 205 110 206 110 10 Administration 20 Marketing 30 Purchasing 40 Human Resources 50 Shipping SELECT DISTINCT NVL(TO_CHAR(employee_id), ‘ ‘) AS employee_id, NVL(TO_CHAR(department_id), ‘ ‘) AS department_id, ‘ ‘ AS department_name FROM employees UNION ALL SELECT DISTINCT ‘ ‘, TO_CHAR(department_id), department_name FROM departments; Практическое занятие 8. Манипулирование данными  Вставка строк в таблицы  Обновление строк в таблице  Удаление строк из таблицы  Управление транзакциями Вставка данных в таблицу 1. Выполните скрипт lab8_1.sql для создания таблицы MY_EMPLOYEE, которая будет использоваться для упражнений. CREATE TABLE my_employee ( ID NUMBER(4) CONSTRAINT MY_EMPLOYEE_ID_NN NOT NULL, LAST_NAME VARCHAR2(25), FIRST_NAME VARCHAR2(25), USERID VARCHAR2(8), SALARY NUMBER(9,2) ); 2. Выведите структуру таблицы MY_EMPLOYEE для выяснения имён столбцов. 3. Вставьте в таблицу MY_EMPLOYEE первую строку из нижеприведённых образцов. Не указывайте столбцы в предложении INSERT. ID LAST_NAME FIRST_NAME USERID SALARY 1 Patel Ralph rpatel 895 2 Dancs Betty bdancs 860 3 Biri Ben bbiri 1100 4 Newman Chad cnewman 750 5 Ropeburn Andrey Aropebur 1550 INSERT INTO MY_EMPLOYEE VALUES(1, ‘Patel’, ‘Ralph’, ‘rpatel’, 895); 4. Вставьте в таблицу MY_EMPLOYEE вторую строку из вышеуказанных образцов. На этот раз укажите столбцы явно в предложении INSERT. INSERT INTO MY_EMPLOYEE(ID, LAST_NAME, FIRST_NAME, USERID, SALARY) VALUES(2, ‘Dancs’, ‘Betty’, ‘bdancs’, 860); 18. Создайте точку сохранения в ходе транзакции. SAVEPOINT save; 19. Удалите все данные из таблицы. DELETE FROM my_employee; 20. Убедитесь в том, что таблица пуста. 21. Отмените последнюю операцию DELETE, не отменяя предыдущую операцию INSERT. ROLLBACK TO SAVEPOINT save; 22. Убедитесь в том, что вставленная строка присутствует в таблице. 23. Сделайте добавление данных постоянным. Практическое занятие 9. Использование команд DDL для создания и изменения таблиц  Создание новых таблиц  Создание новой таблицы с помощью синтаксиса CREATE TABLE AS  Проверка существования таблицы  Удаление таблиц 1. Создайте таблицу DEPT на основе приведенного ниже описания. Сохраните команду в файле lab9_1.sql, а затем выполните файл для создания таблицы. Убедитесь в том, что таблица создана. Имя столбца ID Name Тип ключа Primary Key Nulls/Unique Таблица FK Столбец FK Тип данных NUMBER VARCHAR2 Длина 7 25 CREATE TABLE DEPT ( ID NUMBER(7) CONSTRAINT DEPT_ID_PRIMARY PRIMARY KEY, NAME VARCHAR2(25) ); 2. Заполните таблицу DEPT данными из таблицы Departments. Включите только нужные столбцы. INSERT INTO DEPT ( SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM DEPARTMENTS ); 3. Создайте таблицу EMP на основе приведенного ниже описания. Сохраните команду в скрипт- файле lab9_3.sql, а затем выполните его, чтобы создать таблицу. Убедитесь в том, что таблица создана. Имя столбца ID Last_name FIRST_NAME DEPT_ID Тип ключа Primary Key Foreign Key Nulls/Unique Таблица PK DEPT Столбец PK ID Тип данных NUMBER VARCHAR2 VARCHAR2 NUMBER Длина 7 25 25 7 CREATE TABLE EMP ( ID NUMBER(7) CONSTRAINT EMP_ID_PRIMARY PRIMARY KEY, LAST_NAME VARCHAR2(25), FIRST_NAME VARCHAR2(25), DEPT_ID NUMBER(7), CONSTRAINT EMP_DEPT_FOREIGN FOREIGN KEY (DEPT_ID) REFERENCES DEPT(ID) ); 4. Создайте таблицу EMPLOYEES2, на основе структуры таблицы EMPLOYEES, включив только столбцы EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY и DEPARTMENT_ID. Имена колонок в новой таблице должны быть ID, FIRST_NAME, LAST_NAME, SALARY и DEPT_ID соответственно. CREATE TABLE EMPLOYEES2 AS SELECT EMPLOYEE_ID AS «ID», FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID AS «DEPT_ID» FROM EMPLOYEES; 5. Удалите таблицу EMP. DROP TABLE EMP; 6. Попробуйте сменить номер отдела служащего по фамилии Matos на 80. UPDATE DEPT50 SET DEPTNO = 80 WHERE EMPLOYEE = ‘Matos’; 7. Создайте представление SALARY_VU, включающее фамилию служащего, название отдела, оклад и категорию оклада для всех служащих. Используйте таблицы EMPLOYEES, DEPARTMENTS и JOB_GRADES. Соответственно назовите столбцы Employee, Department, Salary и Grade. CREATE VIEW SALARY_VU AS SELECT E.LAST_NAME AS «EMPLOYEE», D.DEPARTMENT_NAME AS «DEPARTMENT», E.SALARY AS «SALARY», JG.GRADE_LEVEL AS «GRADE» FROM EMPLOYEES E LEFT OUTER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID JOIN JOB_GRADES JG ON E.SALARY >= JG.LOWEST_SAL AND E.SALARY <= HIGHEST_SAL; 8. Покажите структуру представления SALARY_VU. DESCRIBE SALARY_VU; 9. Удалите представление SALARY_VU DROP VIEW SALARY_VU; 10. Восстановите представление SALARY_VU, воспользовавшись опцией SQL History. 11. Проверьте работоспособность представления. SELECT * FROM SALARY_VU; Практическое занятие 10. Создание других объектов схем (часть 2)  Создание последовательностей  Использование последовательностей  Создание неуникальных индексов и синонимов 1. Создайте последовательность для столбца главного ключа таблицы DEPT. Последовательность должна начинаться с 200 и иметь максимальное значение 1000. Шаг приращения значений – 10. Назовите последовательность DEPT_ID_SEQ. CREATE SEQUENCE DEPT_ID_SEQ INCREMENT BY 10 START WITH 200 MAXVALUE 1000; 2. Создайте скрипт lab10_2_2.sql для вставки строки в таблицу DEPT. Обязательно используйте последовательность, созданную Вами для столбца ID. Добавьте в таблицу два отдела: Education и Administration. Выполните файл, проверьте успешное выполнение вставки. INSERT INTO DEPT VALUES (DEPT_ID_SEQ.NEXTVAL, ‘&DEPT_NAME’); 3. Измените созданную Вами последовательность, установив шаг приращения 20. Добавьте отдел Publication с использованием последовательности. Проверьте выполнение вставки. ALTER SEQUENCE DEPT_ID_SEQ INCREMENT BY 20; 4. Измените созданную Вами последовательность, установив начальное значение, равным 300.. Добавьте отдел Distribution с использованием последовательности. Проверьте выполнение вставки. DROP SEQUENCE DEPT_ID_SEQ; CREATE SEQUENCE DEPT_ID_SEQ INCREMENT BY 10 START WITH 300 MAXVALUE 1000; 5. Создайте последовательность SEQ_CYCLE. Последовательность должна генерировать числа: 0 1 -1 0 1 -1…….. Проверьте правильность работы последовательности. COMMENT ON TABLE DEPARTMENTS IS ‘Company department information including name, code and location’; SELECT COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_NAME = ‘DEPARTMENTS’; 4. Добавьте комментарий к столбцу LAST_NAME таблицы EMPLOYEES. Проверьте факт создания комментария к столбцу. COMMENT ON COLUMN EMPLOYEES.LAST_NAME IS ‘LAST_NAME COMMENT’; SELECT COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME = ‘EMPLOYEES’ AND COLUMN_NAME = ‘LAST_NAME’; 5. Найдите имена всех синонимов в вашей схеме SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK EMP HR EMPLOYEES SELECT SYNONYM_NAME, TABLE_OWNER, TABLE_NAME, NVL(DB_LINK, ‘ ‘) AS «DB_LINK» FROM USER_SYNONYMS; 6. Из представления словаря данных USER_VIEWS выберите столбцы VIEW_NAME и TEXT. SELECT VIEW_NAME, TEXT FROM USER_VIEWS; 7. Найдите имена всех ваших последовательностей. Напишите запрос для получения следующей информации о ваших последовательностях: имя последовательности, максимальное значение, величина приращения, последнее значение. Сохраните скрипт в файле lab11_7.sql. Выполните скрипт. SEQUENCE_NAME MAX_VALUE INCREMENT_BY LAST_NUMBER DEPARTMENTS_SEQ 9990 10 280 EMPLOYEES_SEQ 1,0000E+27 1 207 LOCATIONS_SEQ 9900 100 3300 SELECT SEQUENCE_NAME, CASE WHEN MAX_VALUE > POWER(10,25) THEN TO_CHAR(MAX_VALUE, ‘9D9999EEEE’) ELSE TO_CHAR(MAX_VALUE) END AS «MAX_VALUE», INCREMENT_BY, LAST_NUMBER FROM USER_SEQUENCES;

I appologize if something like this has already been posted or is just a simple fix but I’ve been looking around all over and can’t seem to find a solution to this problem. I’m using vba: ms access, and I’m trying to comapre two identical tables in diffrent databases by running a query. I’ve been trying to make the script so it can be run on diffrent databases requiring only user input. However throught this process I seem to keep getting an error that reads:

The select statement includes a reserved word or an argument name that
is misspelled or missing.

The LinkUserTable function basically creates a linked table from another DB based off user input. Below is the subroutine:

Sub LinkTables()
        Dim sTable1 As String
        Dim sTable2 As String
    sTable1 = LinkUserTable
    sTable2 = LinkUserTable

    vars_sql = "SELECT " & sTable1 & ".[f_ptid]," & sTable1 & ".[f_flag]," & sTable1 & ".[f_user]," & sTable1 & ".[f_brief]," & sTable1 & ".[f_gid]," & sTable1 & ".[f_vco]," & sTable1 & ".[f_dtype]," & sTable1 & ".[f_precs]," & sTable1 & ".[f_addr]," & sTable1 & ".[f_ndim]," & sTable1 & ".[f_sys]," & sTable1 & ".[f_unit]," & sTable1 & ".[f_value]," & sTable1 & ".[f_pred]," & sTable1 & ".[f_bflag]," & sTable1 & ".[f_dim1]," & sTable1 & ".[f_dim2]," & sTable1 & ".[f_dim3]," & sTable1 & ".[f_bound]," & sTable1 & ".[f_size]," & sTable1 & ".[f_updat]," & sTable1 & ".[f_time]," & sTable1 & ".[f_ldes]," & sTable1 & ".[f_sflag]," & sTable1 & ".[f_tflag]," & sTable1 & ".[rid]" + _
                    "FROM" + sTable1 + " AS LEFT JOIN " + sTable2 + " AS ON sTable1.[f_ptid] = sTable2.[f_ptid]" + _
                    "WHERE (((" & sTable2 & ".[f_ptid]) Is Null))" 


If CheckQuery("new_old") = "Yes" Then
            DoCmd.DeleteObject acQuery, "new_old"
        End If

Set qdf = CurrentDb.CreateQueryDef("new_old", vars_sql)

End Sub

I was just wondering based off of this what the possible problems could be that would cause this error? All of the fields are in both databases, all with the same properties(just diffrent data). I appologize if there is a lack of information I can supply more if needed.

Возможно, вам также будет интересно:

  • Команда retr не выполнена ошибка получения сообщения почтовый сервер
  • Команда python выбрать интерпретатор привела к ошибке
  • Команда opkg update завершилась с кодом ошибки 6
  • Команда opkg remove завершилась с кодом ошибки 255
  • Команда opkg install завершилась с кодом ошибки 255

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии