Oracle найти таблицу по столбцу

Обновлено: 07.07.2024

Выбор данных выполняется командой SELECT.
Ниже приведен примерный список используемых ею конструкций и ключевых слов, полный же список зависит от реализации СУБД:

Это наверно самая сложная команда, поэтому ее изучение лучше разбить на несколько частей. Здесь рассмотрим эту команду в общем, а соединения, группировку данных и подобное более детально чуть позже. Пусть имеется следующая таблица с указанными данными.

выборка констант

Для выбора констант может указываться любой источник. Однако, если мы хотим просто
подсчитать значение какого-то выражения, то указывать источник имеющий сотню тысяч записей затратно по ресурсам. Поэтому многие СУБД позволяют выбрать константы без указания источника. Oracle не поддерживает синтаксис SELECT без FROM, а для выбора констант используется специальная системная таблица dual.

выборка по столбцам таблиц

Если источники данных указаны, то кроме констант можно выбирать столбцы или строить выражения с их использованием. Столбец определяется как имя_источника.имя_столбца. Если источник данных один, то его имя можно опустить. Для выбора всех столбцов всех источников используется символ *. Аналогично можно выбрать все столбцы указанного источника: имя_источника.*. Ниже приведен пример выборки всех записей нашей таблицы.

синонимы (алиасы)

При выборе данных можно назначать временные синонимы источникам данных и используемым столбцам. А в некоторых случаях необходимо. Например, когда источник подзапрос соединяется с другим источником, именование подзапроса обязательно. Другой пример, это объединение нескольких выборок, имена столбцов которых должны совпадать. Ключевое слово AS как правило необязательно, а в Oracle разрешено только для столбцов.

уникальные записи

Записи выборки считаются одинаковыми, если значения соответствующих полей одинаковы. Поэтому для демонстрации distinct на нашей таблице нужно исключить первичный ключ (поле id) из выборки.

Конструкция ORDER BY позволяет последовательно отсортировать сразу по нескольким столбцам. Столбцы, по которым происходит сортировка, желательно проиндексировать.

выборка по условию

Конструкция WHERE позволяет ограничить множество выбираемых записей. Ниже приведено несколько примеров.

выборка по группам

И напоследок пару примеров группировки данных.

Соединения (Join)

Этот раздел написан на основе материалов сайта Javenue.

Ключевое слово join в SQL используется при построении select выражений. Инструкция Join позволяет объединить колонки из нескольких таблиц в одну. Объединение происходит временное и целостность таблиц не нарушается. Существует три типа join-выражений:

  • inner join;
  • outer join;
  • cross join;

В свою очередь, outer join может быть left, right и full (слово outer обычно опускается).

В качестве примера (DBMS Oracle) создадим две простые таблицы и сконструируем для них SQL-выражения с использованием join .

Содержимое таблиц пусть будет таким:

Конструкция join выглядит так:

. join_type join table_name on condition .

Кострукция join располагается сразу после select-выражения. Можно использовать несколько таких конструкций подряд для объединения соответствующего кол-ва таблиц. Логичнее всего использовать join в том случае, когда таблица имеет внешний ключ ( foreign key ).

Inner join необходим для получения только тех строк, для которых существует соответствие записей главной таблицы и присоединяемой. Иными словами условие condition должно выполняться всегда. Пример:

Результат будет таким:

В случае с left join из главной таблицы будут выбраны все записи, даже если в присоединяемой таблице нет совпадений, то есть условие condition не учитывает присоединяемую (правую) таблицу. Пример:

Результат выполнения запроса:

Результат показывает все ресурсы и их администраторов, вне зависимотсти от того есть они или нет.

Right join отображает все строки удовлетворяющие правой части условия condition , даже если они не имеют соответствия в главной (левой) таблице:

А результат будет следующим:

Результирующая таблица показывает ресурсы и их администраторов. Если адмнистратор не задействован, эта запись тоже будет отображена. Такое может случиться, например, если ресурс был удален.

Full outer join (ключевое слово outer можно опустить) необходим для отображения всех возможных комбинаций строк из нескольких таблиц. Иными словами, это объединение результатов left и right join .

А результат будет таким:

Некоторые СУБД не поддерживают такую функциональность (например, MySQL), в таких случаях обычно используют объединение двух запросов:

Агрегатные функции, группировка данных

Для группировки данных в запросе select используется конструкция group by,
в которой должны быть перечислены те же столбцы, что и после select. Ниже приведен
пример вывода данных по группам для таблицы bills.

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

Ключевое слово DISTINCT позволяет игнорировать повторные значения в столбце, ALL
обрабатывает все значения в столбце (по умолчанию), * позволяет включить в обработку поля с null значением.
В MySQL между именем функции и скобкой не должно быть пробелов.
Ниже приведен пример использования агрегатных функций в качестве выбираемых данных. Если
агрегатная функция используется в выборке без group by, то она применяется ко всем записям
выборки, иначе для каждой группы в отдельности. И в любом случае в перечислении select нельзя
смешивать групповые столбцы с не групповыми.

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

Операции над выборками

Так как выборка по сути является множеством, то и доступные операции над ними
соответствующие:

Запросы участвующие в таких операциях должны следовать нескольким условиям.
Иметь одинаковое число столбцов, соответствующие столбцы должны быть одного типа.
Тип данных столбца должен быть простым, т.е. не разрешаются типы подобные blob.
MySQL 5 поддерживает только UNION, в Oracle EXCEPT для других целей,
а для исключения используется MINUS.

По умолчанию в результирующую выборку попадают только уникальные записи.
Для включения всех записей используется ключевое слово ALL после имени операции.
Например, в следующем примере будет две записи со значением 2.

Добавление итогов в SQL

Еще раз рассмотрим таблицу bills созданную в пункте об агрегатных функциях.
Предположим мы хотим вывести все суммы, а в конце выборки добавить итоговую сумму.
Наиболее универсальным способом является объединение двух запросов.

Для решения подобных задач в стандарте введена конструкция ROLLUP генерирующая
дополнительную строку. Если в определении столбца агрегатная функция не используется,
то соответствующее поле в этой строке заполняется значением null. В противном случае
заполняется значением выражения столбца, причем агрегатная функция выполняется ко
всем записям основной выборки.

А теперь предположим мы хотим вывести все суммы с итогами по каждой группе и в конце выборки
общий итог. Ниже приведен пример с использованием объединений. Чтобы общий итог был точно в
конце выборки, задаем в поле d максимальню дату. В Oracle и Postgre можно оставить значение
null.

Подобную задачу можно решить с помощью стандартной конструкции CUBE, если она уже
реализована в СУБД. Куб генерирует не только общий итог, но и все возможные под итоги.
Ниже приведен пример использования куба. Для упрощения кода пустые значения не заменяются.

Нумерация записей

В стандарт SQL2003 уже добавлена функция row_number(), если она еще не реализована
в вашей версии БД, используйте следующие методы.

Oracle

В Oracle для нумерации записей введен псевдостолбец rownum.

MySQL

В MySQL для этого надо воспользоваться переменной. Чтобы увидеть результат следующего
примера в MySQLQueryBrowser, необходимо начать транзакцию (на панели кнопка после слова
Transaction). Далее выполняем приведенные в примере команды и затем завершаем транзакцию
(соседняя кнопка с галочкой).

PostgreSQL

В PostgreSQL для этих целей можно выделить последовательность и сбрасывать ее перед новой
выборкой.

Если вы больше используете сторонние инструменты, там есть много вариантов, таких как:

Это очень удобно, если ваша база данных содержит зашифрованные объекты (представления, процедуры, функции), потому что вы не можете легко найти их с помощью системных таблиц.

Ответ 6

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

Вы можете добавить другие условия, я также добавил столбцы в предложении select по вертикали, чтобы было легко переупорядочивать, удалять, переименовывать или добавлять другие в зависимости от ваших потребностей. С другой стороны, вы можете искать только таблицы с помощью T.Name. Его очень настраиваемый.

Ответ 7

Я не знаю, почему многие из вас предлагают присоединиться к sys.table with sys.columns вы можете просто использовать ниже код:

Select object_name(object_id) as TableName,* from SYS.columns where name LIKE '%MyName%'

Если вы хотите также имя схемы:

Ответ 8

Если вы просто хотите, чтобы имя таблицы можно было запустить:

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

и, наконец, если вы хотите его в более удобном формате (хотя здесь код (по-моему) становится слишком сложным для удобного написания):

Заметьте, что вы также можете создать функцию, основанную на том, что у меня есть:

Стоит отметить, что функция concat была добавлена ​​в 2012 году. Для 2008r2 и более ранних версий используйте + для конкатенации строк.

Я немного переформатировал proc, так как я разместил это. Он немного более продвинутый, но выглядит намного более грязным (но это в proc, поэтому вы никогда его не увидите), и он отформатирован лучше.

Эта версия позволяет вам иметь ее в административной базе данных, а затем искать через любую базу данных. Измените отклонение @db с 'master' на то, что вы хотите, чтобы база данных по умолчанию была (ПРИМЕЧАНИЕ. Использование функции CONCAT() будет работать только с 2012+, если вы не измените конкатенацию строк для использования операторов + ).

Ответ 9

Это из журнала Pinal Sir

Ответ 10

Вы можете найти его из INFORMATION_SCHEMA.COLUMNS с помощью фильтра column_name

Ответ 11

Ответ 12

Ответ 13

Следующий запрос даст вам точные имена таблиц базы данных с именем поля, например '% myName'.

Ответ 14

Получить полную информацию: имя столбца, имя таблицы, а также схему таблицы.

Ответ 15

Я только что попробовал, и это отлично работает

Измените имя YourDatbaseName на свою базу данных и имя вашего столбца на имя столбца, которое вы ищете, оставите его как есть.

Надеюсь, это помогло

Ответ 16

Ответ 17

Я использовал это для той же цели, и он работал:

Ответ 18

Надеюсь, это не дубликат ответа, но я хотел бы сгенерировать инструкцию sql в инструкции sql, которая позволит мне искать значения, которые я ищу (а не только таблицы с именами полей ( как обычно для меня, чтобы удалить любую информацию, связанную с идентификатором имени столбца, которое я ищу):

Затем я могу скопировать и вставить запустить мой 1-й столбец "SQLToRun". затем я заменю "Выбрать * из" на "Удалить из", и он позволяет мне удалять любые ссылки на этот идентификатор! файл, чтобы вы имели их на всякий случай.

ПРИМЕЧАНИЕ **** Убедитесь, что вы удалили все таблицы bakup до запуска своего оператора delete.

Ответ 19

Ответ 20

Как и оракул, вы можете найти таблицы и столбцы с этим:

Ответ 21

Для Oracle, с обычными разрешениями пользователя:

Ответ 22

Чтобы улучшить ответы выше, я включил Views, а также объединил схему и таблицу/просмотр, сделав результаты более очевидными.

Ответ 23

Вы можете использовать таблицу [INFORMATION_SCHEMA].[COLUMNS] для поиска столбцов Например,

Ответ 24

Вы можете попробовать этот запрос:

Ответ 25

Ответ 26

Ответ 27

Ответ 28

Вот рабочее решение для базы данных Sybase

Ответ 29

Поиск по именам столбцов базы данных SQL возможен с помощью SQL Server Management Studio следующими способами, с помощью поиска объектов SSMS: подробности об объектном обозревателе или сценарии T-SQL, как описано ниже:

Ответ 30

Вот решение, которое я нашел.

Я думаю, что это лучший ответ для вас. если есть вопросы, пожалуйста, спросите у меня.

Как запросить базу данных Oracle, чтобы отобразить имена всех таблиц в ней?

@MartinThoma Нету. попробовал сначала, прежде чем прибегнуть к Google

Это предполагает, что у вас есть доступ к представлению DBA_TABLES словаря данных. Если у вас нет этих привилегий, но они нужны, вы можете запросить, чтобы администратор БД явно предоставил вам привилегии для этой таблицы, или чтобы администратор БД предоставил вам SELECT ANY DICTIONARY привилегию или SELECT_CATALOG_ROLE роль (любая из которых позволит вам запросить любую таблицу словаря данных). ). Конечно, вы можете захотеть исключить определенные схемы, такие как SYS и SYSTEM имеющие большое количество таблиц Oracle, которые вам, вероятно, не нужны .

Кроме того, если у вас нет доступа DBA_TABLES , вы можете просмотреть все таблицы, к которым у вашей учетной записи есть доступ, через ALL_TABLES представление:

Хотя это может быть подмножеством таблиц, доступных в базе данных ( ALL_TABLES показывает информацию обо всех таблицах, к которым у вашего пользователя есть доступ).

Если вас интересуют только те таблицы, которыми вы владеете, а не те, к которым у вас есть доступ, вы можете использовать USER_TABLES :

Поскольку он USER_TABLES содержит информацию только о тех таблицах, которыми вы владеете, у него нет OWNER столбца - владельцем по определению является вы.

Oracle также имеет ряд устаревших данных словаря views-- TAB , DICT , TABS и CAT для example-- , которые можно было бы использовать. В целом, я бы не советовал использовать эти устаревшие представления, если вам абсолютно не нужно перенести свои сценарии в Oracle 6. Oracle не изменяла эти представления в течение длительного времени, поэтому у них часто возникают проблемы с объектами более новых типов. Например, TAB и CAT представления, и представления показывают информацию о таблицах, которые находятся в корзине пользователя, в то время как [DBA|ALL|USER]_TABLES все представления отфильтровывают их. CAT также показывает информацию о материализованных журналах представлений с TABLE_TYPE «TABLE», что вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не говорит вам, кто владеет объектом.

Можно ли найти в каждом поле каждой таблицы определенное значение в Oracle?

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

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

Нет абсолютно никакой документации по этой базе данных, и я понятия не имею, откуда берется это поле.

Возможный Дубликат : MySQL - поиск по всем полям из каждой таблицы базы данных Я ищу какой-то графический инструмент MySQL, который ищет строку во всех полях databases/ tables/. Я пробовал Toad, MySQL Workbench и HeidiSQL, похоже, ни один из них не имеет этой функции. Заранее спасибо.

Я попытался использовать это утверждение ниже , чтобы найти подходящий столбец, основанный на том, как, по моему мнению, он должен быть назван, но он не дал никаких результатов.*

Колонна-это не объект. Если вы имеете в виду, что ожидаете, что имя столбца будет похоже на '%DTN%',, то вам нужен следующий запрос:

Но если строка 'DTN' - это просто предположение с вашей стороны, это, вероятно, не поможет.

Кстати, насколько вы уверены, что " 1/22/2008P09RR8 " - это значение, выбранное непосредственно из одного столбца? Если вы вообще не знаете, откуда он берется, это может быть объединение нескольких столбцов, или результат какой-то функции, или значение, находящееся во вложенном объекте таблицы. Таким образом, вы можете быть в погоне за диким гусем, пытаясь проверить каждый столбец на наличие этого значения. Не можете ли вы начать с любого клиентского приложения, отображающего это значение, и попытаться выяснить, какой запрос он использует для его получения?

Во всяком случае, ответ diciu дает один метод генерации SQL запросов для проверки каждого столбца каждой таблицы на наличие значения. Вы также можете делать подобные вещи полностью в одном сеансе SQL, используя блок PL/SQL и динамический SQL. Вот какой-то наспех написанный код для этого:

Есть несколько способов сделать его более эффективным.

В этом случае, учитывая искомое значение, вы можете четко исключить любой столбец типа NUMBER или DATE, что уменьшит количество запросов. Может быть, даже ограничить его столбцами, где тип похож на '%CHAR%'.

Вместо одного запроса на столбец вы можете построить один запрос на таблицу следующим образом:

Я сделал некоторые изменения в приведенном выше коде, чтобы он работал быстрее, если вы ищете только одного владельца. Вам просто нужно изменить 3 переменные v_owner, v_data_type и v_search_string, чтобы они соответствовали тому, что вы ищете.

Я знаю, что это старая тема. Но я вижу комментарий к вопросу о том, можно ли это сделать в SQL , а не с помощью PL/SQL . Вот и подумал выложить решение.

Приведенная ниже демонстрация заключается в поиске VALUE во всех COLUMNS из всех TABLES во всем SCHEMA :

Давайте поищем значение KING в схеме SCOTT .

Давайте поищем значение 20 в схеме SCOTT .

Недавно я работал с Elasticsearch 2 и хотел бы запросить запрос по всем текстовым полям. GET myindex/mydata/_search < query: < simple_query_string: < query: Raketenfahrrad >>, highlight: < fields: [ < *: <>> ] > > Запрос возвращает ожидаемые результаты, но без какого-либо выделения. Я испытал.

Я создал столбец CREATED_BY во всех моих таблицах базы данных. Я хочу удалить строки во всех таблицах, марширующих по значению столбца CREATED_BY='xyz'. Вместо того чтобы писать отдельный запрос DELETE, есть ли простой способ получить эту базу данных oracle?

Вот еще одна модифицированная версия, которая будет сравнивать более низкое совпадение подстрок. Это работает в Oracle 11g.

Да, вы можете, и ваш DBA будет ненавидеть вас и найдет вас, чтобы прибить ваши ботинки к полу, потому что это вызовет много операций ввода-вывода и действительно снизит производительность базы данных по мере очистки кэша.

Я бы начал с запущенных запросов, используя v$session и v$sqlarea . Это изменение основано на версии oracle. Это сузит пространство и не ударит по всему.

Я изменил сценарий Flood, чтобы он выполнялся один раз для каждой таблицы, а не для каждого столбца каждой таблицы для более быстрого выполнения. Для этого требуется Oracle 11g или больше.

Я бы сделал что-то вроде этого (генерирует все нужные вам выборки). Позже вы можете скормить их sqlplus:

И вот что он делает - для каждого table_name из user_tables получить каждое поле (из desc) и создать select * из таблицы, где поле равно 'val'.

У меня были следующие проблемы для ответа @Lalit Кумаров,

если мы знаем имена таблиц и столбцов, но хотим узнать, сколько раз строка появляется для каждой схемы:

Процедура поиска по всей базе данных:

Вам понадобится драйвер Oracle ODBC и DSN, чтобы использовать этот инструмент.

У меня нет простого решения на SQL promprt. Однако существует довольно много инструментов, таких как toad и PL/SQL Developer, которые имеют GUI, где пользователь может ввести строку для поиска, и она вернет table/procedure/object, где она будет найдена.

Изменение кода для поиска без учета регистра с использованием запроса LIKE вместо поиска точных совпадений.

--запуск завершен - ошибки нет

Похожие вопросы:

Мне нужно найти в нашей базе данных oracle строку во всех таблицах и столбцах. У меня есть следующий запрос, который я нашел в интернете, но когда я его выполняю, я получаю следующую ошибку Любая.

В данный момент я использую Oracle 10g. Я хочу найти во всех таблицах определенное слово или фразу. Как я буду искать во всех таблицах слово фразы? Овации

Можно ли запросить все поля всех таблиц для определенного значения в db2? Мы можем сделать это в SqlServer и Oracle годах, я много искал, но не смог найти способ сделать это в db2.

Возможный Дубликат : MySQL - поиск по всем полям из каждой таблицы базы данных Я ищу какой-то графический инструмент MySQL, который ищет строку во всех полях databases/ tables/. Я пробовал Toad.

Я работаю над пользовательским интерфейсом (HTML + JavaScript), который запрашивает ElasticSearch 1.4 Прямо сейчас поиск выполняется по нескольким индексам с использованием следующего URL.

Недавно я работал с Elasticsearch 2 и хотел бы запросить запрос по всем текстовым полям. GET myindex/mydata/_search < query: < simple_query_string: < query: Raketenfahrrad >>, highlight: < fields.

Я создал столбец CREATED_BY во всех моих таблицах базы данных. Я хочу удалить строки во всех таблицах, марширующих по значению столбца CREATED_BY='xyz'. Вместо того чтобы писать отдельный запрос.

У меня есть база данных Oracle со многими схемами. Я хотел бы найти строку xyz во всех таблицах в одной конкретной схеме. Я попытался сделать это, как в принятом ответе здесь ( поиск всех полей во.

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

Теперь я использую loopback в качестве бэкэнда и хочу иметь возможность поиска по всем полям таблицы Например, возьмем следующие поля таблицы: id, name, title, created, updated Теперь предположим.

Читайте также: