Часто задаваемые вопросы на собеседовании с СУБД | Комплект 2
Эта статья является расширением часто задаваемых вопросов собеседования по СУБД | Установить 1.
В. Есть таблица, в которой полностью повторяется только одна строка. Напишите запрос, чтобы найти повторяющуюся строку
Имя | Раздел |
abc | CS1 |
bcd | CS2 |
abc | CS1 |
В приведенной выше таблице мы можем найти повторяющуюся строку, используя приведенный ниже запрос.
ВЫБЕРИТЕ имя, раздел ИЗ таблицы ГРУППА ПО имени, раздел ИМЕЕТ СЧЕТ (*)> 1
В. Запрос, чтобы найти вторую по величине зарплату сотрудника?
ВЫБЕРИТЕ максимальную зарплату ОТ СОТРУДНИКОВ, ГДЕ ЗП (ВЫБЕРИТЕ зарплату ИЗ СОТРУДНИКОВ МИНУС ВЫБРАТЬ макс. (Зарплата) ОТ СОТРУДНИКОВ);
ИЛИ ЖЕ
ВЫБЕРИТЕ максимальную зарплату ОТ СОТРУДНИКОВ, ГДЕ зарплата <> (ВЫБЕРИТЕ макс (зарплата) ОТ СОТРУДНИКОВ);
В. Рассмотрите следующую таблицу сотрудников. Сколько строк получится в результате следующего запроса?
ID зарплаты DeptName
1 10000 ЭК
2 40000 EC
3 30000 CS
4 40000 ME
5 50000 ME
6 60000 ME
7 70000 CS
Сколько строк получится в результате следующего запроса?
ВЫБЕРИТЕ E.ID ОТ Сотрудника E ГДЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ E2.salary ОТ Сотрудника E2 ГДЕ E2.DeptName = 'CS' AND E.salary> E2.salary)
Следующие 5 строк будут результатом запроса, поскольку 3000 - это минимальная зарплата сотрудников CS, а все эти строки больше 30000.
2
4
5
6
7
В. Напишите триггер для обновления таблицы Emp таким образом, чтобы, если обновление выполняется в таблице Dep, зарплата всех сотрудников этого отдела должна быть увеличена на некоторую сумму (обновление)
Предполагая, что имя таблицы - Dept и Emp, триггер можно записать как -
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ТРИГГЕР update_trig ПОСЛЕ ОБНОВЛЕНИЯ НА Департаменте ДЛЯ КАЖДОЙ РЯДЫ ЗАЯВИТЬ КУРСОР emp_cur ВЫБРАН * ИЗ Emp; НАЧИНАТЬ FOR i IN emp_cur LOOP ЕСЛИ i.dept_no =: NEW.dept_no ТО DBMS_OUTPUT.PUT_LINE (iemp_no); - для печати тех ОБНОВЛЕНИЕ Emp - число emp, которые SET sal = i.sal + 100 - обновлено ГДЕ emp_no = iemp_no; КОНЕЦ ЕСЛИ; КОНЕЦ ПЕТЛИ; КОНЕЦ;
В. Существует таблица, которая содержит два столбца «Студент» и «Оценки», вам нужно найти всех студентов, чьи оценки выше средних, т.е. список студентов выше среднего.
ВЫБРАТЬ ученика, отметки ИЗ таблицы ГДЕ отметки> ВЫБРАТЬ СРЕДНЕЕ (отметки) из таблицы;
В. Назовите учащегося, получившего третье место, используя подзапросы.
ВЫБЕРИТЕ Emp1.Name ОТ Сотрудника Emp1 ГДЕ 2 = (ВЫБРАТЬ СЧЕТЧИК (ОТЛИЧИТЬ (Emp2.Salary)) ОТ Сотрудника Emp2 ГДЕ Emp2.Salary> Emp1.Salary )
* ЛОГИКА - Количество людей с зарплатой выше, чем у этого человека, будет 2.
В. Почему мы не можем использовать предложение WHERE с агрегатными функциями, такими как HAVING?
Разница между предложениями Have и where в SQL заключается в том, что предложение where НЕ МОЖЕТ использоваться с агрегатами, но предложение Have может. Обратите внимание: это не предопределенное правило, но в целом вы увидите, что в большом количестве запросов SQL мы используем WHERE до GROUP BY и HAVING после GROUP BY.
Предложение Where действует как предварительный фильтр, а предложение Have - как пост-фильтр.
Предложение where работает с данными строки, а не с агрегированными данными.
Рассмотрим ниже таблицу «Марки».
Оценка студента за курс
а с1 40
а с2 50
б с3 60
d c1 70
e c2 80
Рассмотрим запрос
ВЫБРАТЬ Студент, сумма (балл) КАК общий ОТ Марок
Это позволит выбрать данные построчно. Предложение Have работает с агрегированными данными.
Например, вывод запроса ниже
ВЫБРАТЬ Учащийся, сумма (балл) КАК ИТОГО ИЗ оценок
Всего студентов
90
б 60
d 70
e 80
Когда мы применяем имеющийся в приведенном выше запросе, мы получаем
ВЫБРАТЬ Студент, сумма (балл) КАК общий ОТ Знаков общим количеством> 70
Всего студентов
90
e 80
В. Разница между первичным ключом и уникальным ключом и почему следует использовать уникальный ключ, если он допускает только одно значение null?
Первичный ключ:
- Только один подряд (кортеж).
- Никогда не допускает нулевого значения (только ключевое поле).
- Уникальный идентификатор ключа, не может быть нулевым и должен быть уникальным.
Уникальный ключ:
- В одной строке может быть несколько уникальных ключей.
- Уникальный ключ может иметь нулевые значения (допускается только одно значение NULL).
- Это может быть ключ-кандидат.
- Уникальный ключ может быть нулевым или не уникальным.
В. В чем разница между материализованным и динамическим представлением?
Материализованные представления
- Дисковые и периодически обновляются в зависимости от определения запроса.
- Материализованная таблица создается или обновляется нечасто, и ее необходимо синхронизировать с соответствующими базовыми таблицами.
Динамические просмотры
- Только виртуальные и запускайте определение запроса каждый раз, когда к ним обращаются.
- Динамическое представление может создаваться каждый раз, когда пользователь запрашивает конкретное представление.
В. Что такое встроенный и динамический SQL?
Статический или встроенный SQL
- Операторы SQL в приложении, которые не изменяются во время выполнения и, следовательно, могут быть жестко закодированы в приложении.
Динамический SQL
- Операторы SQL, которые создаются во время выполнения; например, приложение может позволять пользователям вводить свои собственные запросы.
- Динамический SQL - это метод программирования, который позволяет динамически строить операторы SQL во время выполнения. Вы можете создавать более универсальные гибкие приложения, используя динамический SQL, потому что полный текст SQL-оператора может быть неизвестен при компиляции.
S.No. | Статический (встроенный) SQL | Динамический (интерактивный) SQL |
1. | В статическом SQL способ доступа к базе данных предопределен во встроенном операторе SQL. | В динамическом SQL способ доступа к базе данных определяется во время выполнения. |
2. | Это быстрее и эффективнее. | Это менее быстро и эффективно. |
3. | Операторы SQL компилируются во время компиляции. | Операторы SQL компилируются во время выполнения. |
4. | Анализ, проверка, оптимизация и создание плана приложения выполняются во время компиляции. | Анализ, проверка, оптимизация и создание плана приложения выполняются во время выполнения. |
5. | Обычно он используется в ситуациях, когда данные распределяются равномерно. | Обычно он используется в ситуациях, когда данные распределяются неравномерно. |
6. | Операторы EXECUTE IMMEDIATE, EXECUTE и PREPARE не используются. | Используются операторы EXECUTE IMMEDIATE, EXECUTE и PREPARE. |
7. | Он менее гибкий. | Он более гибкий. |
http://docs.oracle.com/cd/A87860_01/doc/appdev.817/a76939/adg09dyn.htm
В. В чем разница между CHAR и VARCHAR?
- CHAR и VARCHAR отличаются хранением и извлечением.
- Длина столбца CHAR является фиксированной, а длина VARCHAR - переменной.
- Максимум нет. Символьный тип данных CHAR может содержать 255 символов, в то время как VARCHAR может содержать до 4000 символов.
- CHAR на 50% быстрее, чем VARCHAR.
- CHAR использует статическое распределение памяти, а VARCHAR использует динамическое распределение памяти.
Вам также может понравиться:
- Практические тесты по СУБД
- Последние заметки - СУБД
- Статьи о СУБД
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.