- Что такое таблица DUAL? DUAL — это специальная таблица с одной строкой и одним столбцом, присутствующая по умолчанию во всех базах данных Oracle. Владельцем DUAL является SYS (SYS владеет словарем данных, поэтому DUAL является частью словаря данных.), Но DUAL может быть доступен каждому пользователю. В таблице есть единственный столбец VARCHAR2 (1) с именем DUMMY, который имеет значение «X». MySQL позволяет указывать DUAL в виде таблицы в запросах, которым не нужны данные из каких-либо таблиц. В SQL Server таблица DUAL не существует, но вы можете ее создать. Таблица DUAL была создана Чарльзом Вайсом из корпорации Oracle, чтобы предоставить таблицу для объединения во внутренних представлениях. См. Следующие команды: Следующая команда отображает структуру таблицы DUAL: DESC DUAL; Вывод: Name Null? Введите --------------------------- ------ DUMMY VARCHAR2 (1) Следующая команда отображает содержимое таблицы DUAL: SELECT * FROM DUAL; Вывод: DUMMY ---------- X Следующая команда отображает количество строк таблицы DUAL: ВЫБРАТЬ СЧЕТЧИК (*) ИЗ ДВОЙНОГО; Вывод: COUNT (*) ---------- 1 Следующая команда отображает строковое значение из таблицы DUAL: ВЫБРАТЬ 'ABCDEF12345' ИЗ ДВОЙНОГО; Вывод: 'ABCDEF1234 --------- --ABCDEF12345 Следующая команда отображает числовое значение из таблицы DUAL: ВЫБРАТЬ 123792.52 ИЗ ДВОЙНОЙ; Вывод: 123792.52 ---------- 123792.52 Следующая команда пытается удалить все строки из таблицы DUAL: УДАЛИТЬ ИЗ DU AL; Вывод: УДАЛИТЬ ИЗ ДВОЙНОЙ * ОШИБКА в строке 1: ORA-01031: недостаточно прав Следующая команда пытается удалить все строки из таблицы DUAL: TRUNCATE TABLE DUAL; Примечание. Команда DELETE используется для удаления строк из таблицы. После выполнения операции DELETE вам необходимо выполнить COMMIT или ROLLBACK транзакцию, чтобы сделать изменение постоянным или отменить его. TRUNCATE удаляет все строки из таблицы. Невозможно откатить операцию. Вывод: ОБРЕЗАТЬ ТАБЛИЦУ ДВОЙНОЙ * ОШИБКА в строке 1: ORA-00942: таблица или представление не существует Следующая команда выбирает две строки из двойного: ВЫБРАТЬ пустышку ИЗ ДВОЙНОГО СОЕДИНЕНИЯ ВСЕ ВЫБРАТЬ фиктивную ИЗ ДВОЙНОЙ; Вывод DUMMY ---------- XX Пример — 1 Вы также можете проверить системную дату из таблицы DUAL, используя следующий оператор: SELECT sysdate FROM DUAL; Вывод: SYSDATE --------- 11-DEC-10 Пример — 2 Вы также можете проверить арифметические вычисления из таблицы DUAL, используя следующий оператор: SELECT 15 + 10-5 * 5/5 FROM DUAL; Вывод: 15 + 10-5 * 5/5 ----------- 20 Пример — 3 Следующий код отображает числа 1..10 из DUAL: ВЫБРАТЬ уровень ИЗ ДВОЙНОГО СОЕДИНЕНИЯ ПО уровню Вывод: LEVEL ---------- 1 2 3 4 5 6 7 8 9 10 Пример — 4 В следующем коде DUAL включает использование декодирования с NULL. SELECT decode (null, null, 1,0) FROM DUAL; Вывод: DECODE (NULL, NULL, 1,0) --------------------- 1 Таблица DUAL: Oracle против MySQL Мы уже узнали, что DUAL — это особая таблица с одной строкой и одним столбцом. Для Oracle это полезно, потому что Oracle не допускает таких операторов, как: SELECT 15 + 10-5 * 5/5; Вывод: SELECT 15 + 10-5 * 5/5 * ERROR в строке 1: ORA-00923: ключевое слово FROM не найдено там, где ожидалось Но следующая команда выполнится (см. вывод из предыдущего примера): SELECT 15 + 10-5 * 5/5 FROM DUAL; В случае MySQL будет выполнена следующая команда: SELECT 15 + 10-5 * 5/5; Вывод: В следующей таблице показано использование фиктивной таблицы в стандартной СУБД. СУБД Концепция фиктивной таблицы MSSQL Нет концепции фиктивных таблиц. MySQL Отсутствие концепции фиктивных таблиц. Oracle Dummy-table: DUAL. Informix Начиная с версии 11.10, добавлена фиктивная таблица: sysmaster: sysdual PostgreSQL Нет концепции фиктивной таблицы. DB2 Фиктивная таблица: SYSIBM. SYSDUMMY1 Практические упражнения SQL Упражнения по SQL, практика, решение SQL Получение данных из таблиц [33 упражнения] Логические операторы SQL и реляционные операторы [12 упражнений] Подстановочные знаки SQL и специальные операторы [22 упражнения] Агрегатные функции SQL [25 упражнений] Вывод запроса форматирования SQL [10 упражнений] SQL-запросы к нескольким таблицам [7 упражнений] ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений] SQL JOINS SQL JOINS [29 упражнений] SQL JOINS в базе данных HR [27 упражнений] SQL ПОДзапросы ПОДзапросы SQL [39 упражнений] ПОДПРОСЫ SQL в базе данных HR [55 упражнений] SQL Union [9 упражнений] SQL View [16 упражнений] Управление учетными записями пользователей SQL [16 упражнений] Фильм База данных BASIC запросы к базе данных фильмов [10 упражнений] ПОДПРОСЫ в базе данных фильмов [16 упражнений] ПОДКЛЮЧАЕТСЯ к базе данных фильмов [24 упражнения] Soccer Database Введение БАЗОВЫЕ запросы к базе данных футбола [29 упражнений] ПОДзапросы к базе данных футбола [33 упражнения] ПРИСОЕДИНЯЕТСЯ к запросам в базе данных футбола [61 упражнения] База данных больниц Введение BASIC, SUBQUERIES и JOINS [39 упражнений] База данных сотрудников БАЗОВЫЕ запросы к базе данных сотрудников [115 упражнений] ПОДзапросы к базе данных сотрудников [77 упражнений] Еще не все! Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.
- Таблица DUAL: Oracle против MySQL
Что такое таблица DUAL?
DUAL — это специальная таблица с одной строкой и одним столбцом, присутствующая по умолчанию во всех базах данных Oracle. Владельцем DUAL является SYS (SYS владеет словарем данных, поэтому DUAL является частью словаря данных.), Но DUAL может быть доступен каждому пользователю. В таблице есть единственный столбец VARCHAR2 (1) с именем DUMMY, который имеет значение «X». MySQL позволяет указывать DUAL в виде таблицы в запросах, которым не нужны данные из каких-либо таблиц. В SQL Server таблица DUAL не существует, но вы можете ее создать.
Таблица DUAL была создана Чарльзом Вайсом из корпорации Oracle, чтобы предоставить таблицу для объединения во внутренних представлениях.
См. Следующие команды:
Следующая команда отображает структуру таблицы DUAL:
DESC DUAL;
Вывод:
Name Null? Введите --------------------------- ------ DUMMY VARCHAR2 (1)
Следующая команда отображает содержимое таблицы DUAL:
SELECT * FROM DUAL;
Вывод:
DUMMY ---------- X
Следующая команда отображает количество строк таблицы DUAL:
ВЫБРАТЬ СЧЕТЧИК (*) ИЗ ДВОЙНОГО;
Вывод:
COUNT (*) ---------- 1
Следующая команда отображает строковое значение из таблицы DUAL:
ВЫБРАТЬ 'ABCDEF12345' ИЗ ДВОЙНОГО;
Вывод:
'ABCDEF1234 --------- --ABCDEF12345
Следующая команда отображает числовое значение из таблицы DUAL:
ВЫБРАТЬ 123792.52 ИЗ ДВОЙНОЙ;
Вывод:
123792.52 ---------- 123792.52
Следующая команда пытается удалить все строки из таблицы DUAL:
УДАЛИТЬ ИЗ DU AL;
Вывод:
УДАЛИТЬ ИЗ ДВОЙНОЙ * ОШИБКА в строке 1: ORA-01031: недостаточно прав
Следующая команда пытается удалить все строки из таблицы DUAL:
TRUNCATE TABLE DUAL;
Примечание. Команда DELETE используется для удаления строк из таблицы. После выполнения операции DELETE вам необходимо выполнить COMMIT или ROLLBACK транзакцию, чтобы сделать изменение постоянным или отменить его. TRUNCATE удаляет все строки из таблицы. Невозможно откатить операцию.
Вывод:
ОБРЕЗАТЬ ТАБЛИЦУ ДВОЙНОЙ * ОШИБКА в строке 1: ORA-00942: таблица или представление не существует
Следующая команда выбирает две строки из двойного:
ВЫБРАТЬ пустышку ИЗ ДВОЙНОГО СОЕДИНЕНИЯ ВСЕ ВЫБРАТЬ фиктивную ИЗ ДВОЙНОЙ;
Вывод
DUMMY ---------- XX
Пример — 1
Вы также можете проверить системную дату из таблицы DUAL, используя следующий оператор:
SELECT sysdate FROM DUAL;
Вывод:
SYSDATE --------- 11-DEC-10
Пример — 2
Вы также можете проверить арифметические вычисления из таблицы DUAL, используя следующий оператор:
SELECT 15 + 10-5 * 5/5 FROM DUAL;
Вывод:
15 + 10-5 * 5/5 ----------- 20
Пример — 3
Следующий код отображает числа 1..10 из DUAL:
ВЫБРАТЬ уровень ИЗ ДВОЙНОГО СОЕДИНЕНИЯ ПО уровню
Вывод:
LEVEL ---------- 1 2 3 4 5 6 7 8 9 10
Пример — 4
В следующем коде DUAL включает использование декодирования с NULL.
SELECT decode (null, null, 1,0) FROM DUAL;
Вывод:
DECODE (NULL, NULL, 1,0) --------------------- 1
Таблица DUAL: Oracle против MySQL
Мы уже узнали, что DUAL — это особая таблица с одной строкой и одним столбцом. Для Oracle это полезно, потому что Oracle не допускает таких операторов, как:
SELECT 15 + 10-5 * 5/5;
Вывод:
SELECT 15 + 10-5 * 5/5 * ERROR в строке 1: ORA-00923: ключевое слово FROM не найдено там, где ожидалось
Но следующая команда выполнится (см. вывод из предыдущего примера):
SELECT 15 + 10-5 * 5/5 FROM DUAL;
В случае MySQL будет выполнена следующая команда:
SELECT 15 + 10-5 * 5/5;
Вывод:
В следующей таблице показано использование фиктивной таблицы в стандартной СУБД.
СУБД | Концепция фиктивной таблицы |
---|---|
MSSQL | Нет концепции фиктивных таблиц. |
MySQL | Отсутствие концепции фиктивных таблиц. |
Oracle | Dummy-table: DUAL. |
Informix | Начиная с версии 11.10, добавлена фиктивная таблица: sysmaster: sysdual |
PostgreSQL | Нет концепции фиктивной таблицы. |
DB2 | Фиктивная таблица: SYSIBM. SYSDUMMY1 |
Практические упражнения SQL
- Упражнения по SQL, практика, решение
- SQL Получение данных из таблиц [33 упражнения]
- Логические операторы SQL и реляционные операторы [12 упражнений]
- Подстановочные знаки SQL и специальные операторы [22 упражнения]
- Агрегатные функции SQL [25 упражнений]
- Вывод запроса форматирования SQL [10 упражнений]
- SQL-запросы к нескольким таблицам [7 упражнений]
- ФИЛЬТРАЦИЯ и СОРТИРОВКА в базе данных HR [38 упражнений]
- SQL JOINS
- SQL JOINS [29 упражнений]
- SQL JOINS в базе данных HR [27 упражнений]
- SQL ПОДзапросы
- ПОДзапросы SQL [39 упражнений]
- ПОДПРОСЫ SQL в базе данных HR [55 упражнений]
- SQL Union [9 упражнений]
- SQL View [16 упражнений]
- Управление учетными записями пользователей SQL [16 упражнений]
- Фильм База данных
- BASIC запросы к базе данных фильмов [10 упражнений]
- ПОДПРОСЫ в базе данных фильмов [16 упражнений]
- ПОДКЛЮЧАЕТСЯ к базе данных фильмов [24 упражнения]
- Soccer Database
- Введение
- БАЗОВЫЕ запросы к базе данных футбола [29 упражнений]
- ПОДзапросы к базе данных футбола [33 упражнения]
- ПРИСОЕДИНЯЕТСЯ к запросам в базе данных футбола [61 упражнения]
- База данных больниц
- Введение
- BASIC, SUBQUERIES и JOINS [39 упражнений]
- База данных сотрудников
- БАЗОВЫЕ запросы к базе данных сотрудников [115 упражнений]
- ПОДзапросы к базе данных сотрудников [77 упражнений]
- Еще не все!
Хотите улучшить статью выше? Публикуйте свои заметки/комментарии/примеры через Disqus.