Тест №2:Введение в язык SQL. "Типы таблиц SQL. Транзакции                                            

     Вариант 1.

 

1. Нам потребуются транзакции. В этом случае следует использовать

а)   ISAM;

б)  MyISAM;

в)  InnoDB;

г)  BDB.

2. Необходимо создать временную таблицу для быстрого поиска. В этом случае следует использовать

а)   ISAM;

б)   MyISAM;

в)   MERGE;

г)   HEAP.

3. Нам потребуются очень большие таблицы. В этом случае не следует использовать

а)    ISAM;

б)   MERGE;

в)   InnoDB;

г)   ни один из вышеперечисленных вариантов.

4.  Нам потребуется блокировка на уровне строк. В этом случае следует использовать

а)   MyISAM;

б)  InnoDB;

в)  BDB;

г)  HEAP.

5. В каких случаях изменения будут фиксироваться автоматически, независимо от  режима autocommit

а)       при использовании таблиц, не обеспечивающих безопасность транзакций;

б)      при использовании таблиц MyIsam;

в)      ни при одном из вышеуказанных условий;

г)      при выполнении условий пп. а) и б).

6. Атомарность означает, что

а)      либо выполняется все содержимое транзакции, либо не выполняется ничего;

б)      операции преобразуют базу данных из одного согласованного состоя­ния в другое;

в)      транзакции не влияют одна на другую;

г)      результаты зафиксированной транзакции должны быть перманентными.

 

7. Изолированность означает, что

а)     либо выполняется все содержимое транзакции, либо не выполняется ничего;

б)    операции преобразуют базу данных из одного согласованного состояния в другое;

в)    транзакции не влияют одна на другую;

г)    результаты зафиксированной транзакции должны быть перманентными.

8. Устойчивость означает, что

а)    либо выполняется все содержимое транзакции, либо не выполняется ничего;

б)    операции преобразуют базу данных из одного согласованного состояния в другое;

в)    транзакции не влияют одна на другую;

г)     результаты зафиксированной транзакции должны быть постоянными.

9. В режиме повторяемого чтения

а)       возможно "грязное" чтение;

б)      возможно неповторяемое чтение;

в)      возможно фантомное чтение;

г)      невозможно ничего из указанного в пп. а)-в).

 

 

Вариант 2.

 

1. Нам потребуются транзакции и таблицы, которые можно легко перенести из одной системы в другую. В этом случае следует использовать

а)   ISAM;

б)  MyISAM;

в)  InnoDB;

г)  BDB.

2. В каких таблицах используются блокировки?

а)   ISAM;

б)   BDB;

в)   MERGE;

г)   InnoDB.

3. Нам потребуются очень большие таблицы. В этом случае следует использовать

а)    ISAM;

б)   MERGE;

в)   HEAP;

г)   ни один из вышеперечисленных вариантов.

4. MySQL работает в режиме автоматической фиксации транзакций

а)   по умолчанию;

б)  после выполнения команды setautocommit=0;

в)  после выполнения команды setautocommit=1;

г) после добавление команд STARTTRANSACTION и COMMIT к каждому из запросов.

5. При выключенном режиме autocommit транзакции будут фиксироваться

а)       при вызове COMMIT;

б)      при вызове STARTTRANSACTION;

в)      при выполнении условий пп. а) и б);

г)      ни при одном из вышеуказанных условий.

6. Целостность означает, что

а)      либо выполняется все содержимое транзакции, либо не выполняется ничего;

б)      транзакции не влияют одна на другую;

в)      операции преобразуют базу данных из одного согласованного состоя­ния в другое;

г)      результаты зафиксированной транзакции должны быть постоянными.

7. Изолированность означает, что

а)     либо выполняется все содержимое транзакции, либо не выполняется ничего;

б)    каждая транзакция должна иметь возможность считать себя единственным объектом, наделенным полномочиями читать и изменять данные;

в)    транзакции влияют одна на другую;

г)    результаты зафиксированной транзакции должны быть постоянными.

8. Устойчивость предполагает, что

а)       либо выполняется все содержимое транзакции, либо не выполняется ничего;

б)       возможность восстановления текущего состояния базы данных в случае отказа системы;

в)      транзакции не влияют одна на другую;

г)       результаты зафиксированной транзакции не должны быть постоянными.

9. В режиме подтвержденного чтения

а)       возможно "грязное" чтение;

б)      возможно неповторяемое чтение;

в)      невозможно фантомное чтение;

г)      невозможно ничего из указанного в пп. а)-в).

 

Критерии оценки

Предлагаемый пакет контрольно-измерительных материалов включает два равнозначных комплекта, состоящих из семи заданий.

Все задания репродуктивного характера, предполагают воспроизведение теоретического материала.

 

Процент правильных ответов

Оценка

Количество правильных ответов

90% – 100%

«Отлично»

9-8

75% – 89%

«Хорошо»

8-7

50% – 74%

«Удовлетворительно»

6-5

Менее 50%

«Плохо»

Менее 5

 

Задания 1

 

1. Напишите оператор SQL для создания новой базы данных с именем addressbook

2. Какой оператор используется для получения информации о таблице? Как используется этот оператор?

3. Как получить список всех баз данных, доступных в системе?

4. Напишите оператор для записи следующих данных в таблицу employee_data

   Имя: Рудольф

   Фамилия: Курочкин

   Должность: Программист

   Возраст: 34

   Стаж работы в компании: 2

   Зарплата: 95000

   Надбавки: 17000

email: rudolf@yandex.ru

 

5. Приведите две формы оператора SELECT, которые будут выводить все данные из таблицы employee_data.

6. Как извлечь данные столбцов f_name, email из таблицы employee_data?

7. Напишите оператор для вывода данных из столбцов salary, perks и yos таблицы employee_data.

8. Как узнать число строк в таблице с помощью оператора SELECT?

9. Как извлечь данные столбцов salary, l_name из таблицы employee_data?

 

Возможныерешения

 

1. create database addressbook;

или

CREATE DATABASE addressbook;

 

Примечание: Операторы SQL не различают регистр символов, однако имена таблиц и имена баз данных могут различать регистр символов, в зависимости от используемой операционной системы.

 

2. ОператорDESCRIBE, например:

DESCRIBE employee_data;

 

3. SHOW DATABASES; (в приглашении mysql)

4. INSERT INTO employee_data

(f_name, l_name, title, age, yos, salary, perks, email)

values

("Рудольф", "Курочкин", "программист", 34, 2, 95000, 17000, "rudolf@yandex.ru");

Примечание: Текстовые строки заключаются в кавычки.

 

5. SELECT emp_id, f_name, l_name, title, age, yos, salary, perks, email from employee_data;

или

SELECT * from employee_data;

Вторая форма лучше. Ее легче использовать и труднее ошибиться.

 

6. Чтобы вывести данные столбцов f_name и email, используем следующий оператор.

selectf_name, email from employee_data;

 

7. SELECT salary, perks, yos from employee_data;

 

8. Последняя строка вывода любого оператора SELECT содержит число полученных строк. Поэтому при выводе всех данных в любом столбце (или всех столбцах), последняя строка будет указывать число строк в таблице.

 

9. select salary, l_name from employee_data;

 

Задания 2

 

1. Напишите оператор SELECT для извлечения идентификационного номера сотрудников, которые старше 30 лет.

2. Напишите оператор SELECT для извлечения имен и фамилий всех Web-разработчиков.

3. Что выведет следующий оператор SELECT:

SELECT * from employee_data where salary <=100000;

4. Как вывести зарплаты и надбавки сотрудников, которые получают в качестве надбавок более 16000?

5. Перечислите имена всех сотрудников (фамилия, а затем имя), которые занимают должность бухгалтера.

 

Возможные решения

 

1. selectemp_id from employee_data where age > 30;

 

2. selectf_name, l_name from employee_data where title='web designer';

 

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

SELECT * from employee_data where salary <=100000;

 

4. select salary, perks from employee_data where perks > 16000;

 

5. selectl_name, f_name from employee_data where title = 'бухгалтер';

Задания 3

 

1. Перечислить всех сотрудников, фамилии которых начинаются с буквы P.

2. Вывести имена всех сотрудников в отделе продаж.

3. Чтовыведетследующийоператор

SELECT f_name, l_name, salary from

employee_data where f_name like '%к%';

4. Перечислить фамилии и должности всех программистов

 

Возможныерешения

 

1. selectl_name, f_name from employee_data where l_name like 'P%';

 

2. selectf_name, l_name from employee_data where title like '%продавец%';

 

3. Этот оператор выводит имена, фамилии и заплаты всех сотрудников, у которых имя содержит букву 'к'.

SELECT f_name, l_name, salary from employee_data where f_name like '%к%';

 

4. SELECT l_name, title from employee_data where title like '%программист%';

 

Задание 4

 

Вывести подразделения и средний возраст, где средний возраст больше 30.

Возможноерешение

mysql> select title, AVG(age)

    ->fromemployee_data

    -> GROUP BY title

-> HAVING AVG(age) > 30;.

 

 

 Самостоятельная работа. Логические операторы

 

Задания 1

1. Вывести имена и фамилии всех сотрудников, которые получают зарплату не более 90000 и не являются программистами, старшими программистами или программистами мультимедиа.

 

2. Чтоделаетследующийоператор?

SELECT l_name, f_name from employee_data

where title NOT LIKE '%продавец%'

AND age< 30;

 

3. Вывести все идентификационные номера и имена сотрудников в возрасте от 32 до 40 лет.

 

4. Выберите имена всех сотрудников в возрасте 32 лет, которые не являются программистами.

 

Возможныерешения

 

mysql> select f_name, l_name from employee_data

  ->where salary <= 90000

  -> AND title NOT LIKE '%программист%';

Команда выводит имена (фамилию за которой следует имя) сотрудников, которые не работают в отделе продаж и моложе 30 лет.

mysql> SELECT l_name, f_name from employee_data

    ->where title NOT LIKE '%продавец%'

    -> AND age < 30;

mysql> select emp_id, f_name, l_name from

 ->employee_data where age > 32

 ->and age < 40;

mysql> select f_name, l_name from employee_data

 ->where age = 32 AND

 ->title NOT LIKE '%программист%';

 

Задания 2

1. Найдите всех сотрудников, которые занимают должность "старший программист" и "программист мультимедиа".

2. Выведите список имен сотрудников, зарплата которых составляет от 70000 до 90000.

3. Что делает следующий оператор?

SELECT f_name, l_name, titlefrom

employee_data where title NOT IN

('программист', 'старший программист',

'программист мультимедиа');

4. Вот более сложный оператор, который объединяет BETWEEN и IN. Чтоонделает?

SELECT f_name, l_name, title, age

fromemployee_data where

title NOT IN

('программист', 'старший программист',

'программист мультимедиа') AND age

NOT BETWEEN 28 and 32;

 

Возможныерешения

 

mysql> select l_name, f_name, title

 ->fromemployee_data where

 ->title IN

 -> ('старшийпрограммист',

 -> 'программистмультимедиа');

2. mysql> select f_name, l_name, salary from

    ->employee_data where salary BETWEEN

    -> 70000 AND 90000;

Выводятся имена и должности всех, кто не является программистом.

mysql> SELECT f_name, l_name, title from

    ->employee_data where title NOT IN

-> ('программист', 'старший программист',

    -> 'программист мультимедиа');

Этот оператор выводит список тех, кто не является программистом, и которые младше 28 или старше 32 лет.

mysql> SELECT f_name, l_name, title, age from

    ->employee_data where title NOT IN

-> ('программист', 'старший программист',

    -> 'программист мультимедиа') AND

->age NOT BETWEEN 28 AND 32;

 

Задания 3

1. Вывести список сотрудников в порядке, определяемом зарплатой, которую они получают.

2. Выведите список сотрудников в убывающем порядке их стажа работы в компании.

3. Что делает следующий оператор?

SELECT emp_id, l_name, title, age

fromemployee_data ORDER BY

title DESC, age ASC;

4. Вывести список сотрудников (фамилию и имя), которые занимают должность "программист" или "разработчик Web" и отсортировать их фамилии по алфавиту.

 

Возможные решения

mysql> SELECT f_name, l_name, salary

    ->fromemployee_data

    -> ORDER BY salary;

mysql> SELECT f_name, l_name, yos

    ->fromemployee_data

    -> ORDER by yos;

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

mysql> SELECT emp_id, l_name, title, age

    ->fromemployee_data ORDER BY

    ->title DESC, age ASC;

Примечание: Сначала сортируются должности в убывающем порядке. Затем для каждой должности сортируется возраст сотрудников в возрастающем порядке.

mysql> SELECT l_name, f_name from employee_data

    ->where title IN ('программист',

    -> 'разработчик Web') ORDER BY l_name;

 

Задания 4

1.      Найдите имена 5 самых молодых сотрудников компании.

2.      Извлеките 5 записей, начиная с 10 строки.

3.      Выведите имена и зарплату сотрудников, которые получают самую большую зарплату.

4.      Что делает следующий оператор?

SELECT emp_id, age, perks

fromemployee_data ORDER BY

perks DESC LIMIT 10;

 

Возможныерешения

1.      mysql> SELECT f_name, l_name, age from

    ->employee_data ORDER BY age

    -> LIMIT 5;

2.      mysql> SELECT * from employee_data

    -> LIMIT 10, 5;

3.      mysql> select f_name, l_name, salary

    ->fromemployee_data

    -> ORDER BY salary DESC

-> LIMIT 1;

4.      Этот оператор выводит идентификационный номер, возраст и надбавки 10 сотрудников, которые получают наибольшие надбавки.

mysql> SELECT emp_id, age, perks

    ->fromemployee_data ORDER BY

    -> perks DESC LIMIT 10;

 

Задания 5

1.      Сколько уникальных вариантов зарплаты имеется в компании? Представьте их в убывающем порядке.

2.      Сколько различных имен имеется в базе данных?

 

Возможныерешения

1.      select distinct salary from

employee_data order by salary DESC;

2.      mysql> select distinct f_name from employee_data;

Задания 6

1.      Измените фамилию Чащина на Петрова. Внесите соответствующие изменения в базу данных.

2.      Название должности "программист мультимедиа" необходимо изменить на "специалист по мультимедиа".

3.      Увеличьте зарплату всем сотрудниками (кроме директора) на 10000.

 

Возможныерешения

1. mysql> update employee_data SET

    ->l_name = 'Петрова'

->WHEREl_name = 'Чашина';

Примечание: Если бы были еще сотрудники с фамилией Чащина, то эти записи также были бы изменены. В таком случае может помочь столбец emp_id, так как он содержит уникальные значения. Лучше использовать значение emp_id вместо l_name, как в следующем примере:

2. mysql> update employee_data SET

    ->l_name = 'Петрова'

    -> WHERE emp_id = 4;

mysql> update employee_data set

    ->title = 'специалистпомультимедиа'

->wheretitle = 'программист мультимедиа';

mysql> update employee_data set

    ->salary = salary + 10000

->wheretitle != 'директор';

Сайт создан по технологии «Конструктор сайтов e-Publish»