Часто задаваемые вопросы на собеседовании с СУБД | Комплект 2

Опубликовано: 19 Августа, 2021

Эта статья является расширением часто задаваемых вопросов собеседования по СУБД | Установить 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 использует динамическое распределение памяти.

Вам также может понравиться:

  • Практические тесты по СУБД
  • Последние заметки - СУБД
  • Статьи о СУБД

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.