Содержание

Access SQL. Основные понятия, лексика и синтаксис

Для извлечения данных из базы данных используется язык SQL. SQL — это язык программирования, который очень напоминает английский, но предназначен для программ управления базами данных. SQL используется в каждом запросе в Access.

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

Это статья из цикла статей о языке SQL для Access. В ней описаны основы использования SQL для выборки данных и приведены примеры синтаксиса SQL.

В этой статье

Что такое SQL?

SQL — это язык программирования, предназначенный для работы с наборами фактов и отношениями между ними. В программах управления реляционными базами данных, таких как Microsoft Office Access, язык SQL используется для работы с данными. В отличие от многих языков программирования, SQL удобочитаем и понятен даже новичкам. Как и многие языки программирования, SQL является международным стандартом, признанным такими комитетами по стандартизации, как ISO и ANSI.

На языке SQL описываются наборы данных, помогающие получать ответы на вопросы. При использовании SQL необходимо применять правильный синтаксис. Синтаксис — это набор правил, позволяющих правильно сочетать элементы языка. Синтаксис SQL основан на синтаксисе английского языка и имеет много общих элементов с синтаксисом языка Visual Basic для приложений (VBA).

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

SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';

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

Инструкции SELECT

Чтобы описать набор данных с помощью SQL, нужно написать заявление SELECT. Инструкция SELECT содержит полное описание набора данных, которые вы хотите получить из базы данных. К ним относятся файлы со следующими элементами:

  • таблицы, в которых содержатся данные;

  • связи между данными из разных источников;

  • поля или вычисления, на основе которых отбираются данные;

  • условия отбора, которым должны соответствовать данные, включаемые в результат запроса;

  • необходимость и способ сортировки.

Предложения SQL

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

Предложение SQL

Описание

Обязательное

SELECT

Определяет поля, которые содержат нужные данные.

Да

FROM

Определяет таблицы, которые содержат поля, указанные в предложении SELECT.

Да

WHERE

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

Нет

ORDER BY

Определяет порядок сортировки результатов.

Нет

GROUP BY

В инструкции SQL, которая содержит статистические функции, определяет поля, для которых в предложении SELECT не вычисляется сводное значение.

Только при наличии таких полей

HAVING

В инструкции SQL, которая содержит статистические функции, определяет условия, применяемые к полям, для которых в предложении SELECT вычисляется сводное значение.

Нет

Термины SQL

Каждое предложение SQL состоит из терминов, которые можно сравнить с частями речи. В приведенной ниже таблице указаны типы терминов SQL.

Термин SQL

Сопоставимая часть речи

Определение

Пример

идентификатор

существительное

Имя, используемое для идентификации объекта базы данных, например имя поля.

Клиенты.[НомерТелефона]

оператор

глагол или наречие

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

AS

константа

существительное

Значение, которое не изменяется, например число или NULL.

42

выражение

прилагательное

Сочетание идентификаторов, операторов, констант и функций, предназначенное для вычисления одного значения.

>= Товары.[Цена]

К началу страницы

Основные предложения SQL: SELECT, FROM и WHERE

Общий формат инструкций SQL:

SELECT field_1
FROM table_1
WHERE criterion_1
;

Примечания: 

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

  • Каждая инструкция SELECT заканчивается точкой с запятой (;). Точка с запятой может стоять как в конце последнего предложения, так и на отдельной строке в конце инструкции SQL.

Пример в Access

В приведенном ниже примере показано, как в Access может выглядеть инструкция SQL для простого запроса на выборку.

1. Предложение SELECT

2. Предложение FROM

3. Предложение WHERE

Эту инструкцию SQL следует читать так: «Выбрать данные из полей «Адрес электронной почты» и «Компания» таблицы «Контакты», а именно те записи, в которых поле «Город» имеет значение «Ростов».

Разберем пример по предложениям, чтобы понять, как работает синтаксис SQL.

Предложение SELECT

SELECT [E-mail Address], Company

Это предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора («[Адрес электронной почты]» и «Компания»).

Если идентификатор содержит пробелы или специальные знаки (например, «Адрес электронной почты»), он должен быть заключен в прямоугольные скобки.

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

В инструкции SELECT предложение SELECT всегда стоит перед предложением FROM.

Предложение FROM

FROM Contacts

Это предложение FROM. Оно содержит оператор (FROM), за которым следует идентификатор (Контакты).

В предложении FROM не указываются поля для выборки.

Предложение WHERE

WHERE City=»Seattle»

Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город=»Ростов»).

Примечание: В отличие от предложений SELECT и FROM, предложение WHERE является необязательным элементом инструкции SELECT.

С помощью предложений SELECT, FROM и WHERE можно выполнять множество действий. Дополнительные сведения об использовании этих предложений см. в следующих статьях:

К началу страницы

Сортировка результатов: ORDER BY

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

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

Предположим, например, что результаты сначала нужно отсортировать по полю «Компания» в порядке убывания, а затем, если присутствуют записи с одинаковым значением поля «Компания», — отсортировать их по полю «Адрес электронной почты» в порядке возрастания. Предложение ORDER BY будет выглядеть следующим образом:

ORDER BY Company DESC, [E-mail Address]

Примечание: По умолчанию Access сортирует значения по возрастанию (от А до Я, от наименьшего к наибольшему). Чтобы вместо этого выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.

Дополнительные сведения о предложении ORDER BY см. в статье Предложение ORDER BY.

К началу страницы

Работа со сводными данными: предложения GROUP BY и HAVING

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

SELECT COUNT([E-mail Address]), Company

Возможность использования той или иной агрегатной функции зависит от типа данных в поле и нужного выражения. Дополнительные сведения о доступных агрегатных функциях см. в статье Статистические функции SQL.

Задание полей, которые не используются в агрегатной функции: предложение GROUP BY

При использовании агрегатных функций обычно необходимо создать предложение GROUP BY. В предложении GROUP BY указываются все поля, к которым не применяется агрегатная функция. Если агрегатные функции применяются ко всем полям в запросе, предложение GROUP BY создавать не нужно.

Предложение GROUP BY должно следовать сразу же за предложением WHERE или FROM, если предложение WHERE отсутствует. В предложении GROUP BY поля указываются в том же порядке, что и в предложении SELECT.

Продолжим предыдущий пример. Пусть в предложении SELECT агрегатная функция применяется только к полю [Адрес электронной почты], тогда предложение GROUP BY будет выглядеть следующим образом:

GROUP BY Company

Дополнительные сведения о предложении GROUP BY см. в статье Предложение GROUP BY.

Ограничение агрегированных значений с помощью условий группировки: предложение HAVING

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

Предположим, например, что к первому полю в предложении SELECT применяется функция AVG (которая вычисляет среднее значение):

SELECT COUNT([E-mail Address]), Company

Если вы хотите ограничить результаты запроса на основе значения функции COUNT, к этому полю нельзя применить условие отбора в предложении WHERE. Вместо него условие следует поместить в предложение HAVING. Например, если нужно, чтобы запрос возвращал строки только в том случае, если у компании есть несколько адресов электронной почты, можно использовать следующее предложение HAVING:

HAVING COUNT([E-mail Address])>1

Примечание: Запрос может включать и предложение WHERE, и предложение HAVING, при этом условия отбора для полей, которые не используются в статистических функциях, указываются в предложении WHERE, а условия для полей, которые используются в статистических функциях, — в предложении HAVING.

Дополнительные сведения о предложении HAVING см. в статье Предложение HAVING.

К началу страницы

Объединение результатов запроса: оператор UNION

Оператор UNION используется для одновременного просмотра всех данных, возвращаемых несколькими сходными запросами на выборку, в виде объединенного набора.

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

Примечание: В запросах на объединение числовой и текстовый типы данных являются совместимыми.

Используя оператор UNION, можно указать, должны ли в результаты запроса включаться повторяющиеся строки, если таковые имеются. Для этого следует использовать ключевое слово ALL.

Запрос на объединение двух инструкций SELECT имеет следующий базовый синтаксис:

SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;

Предположим, например, что имеется две таблицы, которые называются «Товары» и «Услуги». Обе таблицы содержат поля с названием товара или услуги, ценой и сведениями о гарантии, а также поле, в котором указывается эксклюзивность предлагаемого товара или услуги. Несмотря на то, что в таблицах «Продукты» и «Услуги» предусмотрены разные типы гарантий, основная информация одна и та же (предоставляется ли на отдельные продукты или услуги гарантия качества). Для объединения четырех полей из двух таблиц можно использовать следующий запрос на объединение:

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;

Дополнительные сведения об объединении инструкций SELECT с помощью оператора UNION см. в статье Просмотр объединенных результатов нескольких запросов с помощью запроса на объединение.

К началу страницы

Создание SQL запросов

Создание SQL запросов

В том случае, если встроенного языка запросов ZuluGIS недостаточно, запросы могут выполняться с использованием OGC расширения языка SQL.

В программе используется диалект языка SQL основанный на диалекте Transact-SQL, разработанном компаниями Microsoft и Sybase (см. http://msdn.microsoft.com/en-us/library/bb510741(SQL.100).aspx и http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/title.htm). Используемый диалект дополнен в соответствии с OGC расширением языка SQL, информация о котором приводится по адресам http://www.opengeospatial.org/standards/sfa (общая архитектура) и http://www.opengeospatial.org/standards/sfs (SQL расширение).

IntelliSense — технология автодополнения, дописывает название функции при вводе начальных букв. Кроме прямого назначения IntelliSense используется для доступа к документации и для устранения неоднозначности в именах переменных, функций и методов. Подсветка синтаксиса — выделение синтаксических конструкций текста с использованием различных цветов, шрифтов и начертаний. Обычно применяется для облегчения чтения исходного текста компьютерных программ, улучшения визуального восприятия.

Рисунок 588. Написание SQL запроса с IntelliSense


Примечание

Видеоуроки с примерами выполнения SQL запросов можно посмотреть в разделе: https://www.politerm.com/videos/geosql/.

Для вызова диалога формирования SQL запросов выполните команду меню запрос, либо нажмите кнопку панели инструментов.

Рисунок 589. Диалог SQL запроса

В области ввода задается текст SQL запроса. В правой части диалога расположен навигатор по полям карты (Источник:), позволяющий быстро добавить запрос данных из какого либо поля карты. Для добавления запроса данных поля, выберите в списке требуемый слой, БД и выполните двойной щелчок по названию поля, запрос будет добавлен в область ввода.

Примечание

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

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

После задания текста запроса нажмите кнопку Выполнить панели инструментов, в области Ответ в нижней части диалога отобразится панель данных с результатами запроса. Панель можно открепить от диалога запроса для дальнейшей работы с результатами, для этого наведите указатель мыши на заголовок панели, нажмите левую кнопку мыши, не отпуская ее, переместите мышь в произвольную часть окна программы ZuluGIS, после чего отпустите кнопку мыши. Подробнее о панели данных см. «Панель данных».

В диалоге SQL запросов предусмотрено сохранение текущего запроса в файл, открытие запроса из файла и создание нового запроса:

  • Для открытия запроса из файла (в формате .sql) выполните команду меню , или нажмите кнопку панели инструментов – и выберите требуемый файл в стандартном диалоге выбора файлов;

  • Для сохранения текущего запроса в файле (формата .sql) выполните команду меню , или нажмите кнопку панели инструментов – и задайте требуемое название файла в стандартном диалоге сохранения файлов.

  • Для создания нового запроса выполните команду меню , либо нажмите кнопку панели инструментов .

MS SQL Server и T-SQL

Первый запрос на T-SQL

Последнее обновление: 05.07.2017

В прошлой теме в SQL Management Studio была создана простенькая база данных с одной таблицей. Теперь определим и выполним первый SQL-запрос. Для этого откроем SQL Management Studio, нажмем правой кнопкой мыши на элемент самого верхнего уровня в Object Explorer (название сервера) и в появившемся контекстном меню выберем пункт New Query:

После этого в центральной части программы откроется окно для ввода команд языка SQL.

Выполним запрос к таблице, которая была создана в прошлой теме, в частности, получим все данные из нее. База данных у нас называется university, а таблица — dbo.Students, поэтому для получения данных из таблицы введем следующий запрос:


SELECT * FROM university.dbo.Students

Оператор SELECT позволяет выбирать данные. FROM указывает источник, откуда брать данные. Фактически этим запросом мы говорим «ВЫБРАТЬ все ИЗ таблицы university.dbo.Students». Стоит отметить, что для названия таблицы используется полный ее путь с указанием базы данных и схемы.

После ввода запроса нажмем на панели инструментов на кнопку Execute, либо можно нажать на клавишу F5.

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

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


USE university
SELECT * FROM Students

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

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


SELECT * FROM Students

Как сделать сложные запросы SQL проще для написания? [закрыто]

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

Поймите отношения таблицы — большинство будет один ко многим. Знать таблицу «многие». Определите поля, необходимые для ваших объединений.

Подумайте о сценариях ЛЕВОГО присоединения — выберите всех сотрудников и их зарплату с прошлого месяца. Что если они не получили зарплату в прошлом месяце?

Знайте набор результатов: 1) В электронной таблице вручную введите хотя бы одну правильную запись для вашего запроса. 2) Напишите запрос в достаточно простой форме, чтобы определить, сколько записей должно быть возвращено. Используйте оба из них, чтобы проверить ваш запрос, чтобы убедиться, что присоединение к новой таблице не изменит результат.

Разбейте ваш запрос на управляемые части — вам не нужно писать все сразу. Сложные запросы иногда могут быть просто набором простых запросов.

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

Знайте, когда объединяться Иногда легче разделить подгруппы на свои собственные операторы выбора. Если у вас есть таблица, смешанная с менеджерами и другими сотрудниками, и в каждом столбце вы должны делать операторы Case, основанные на членстве в одной из этих групп, может быть проще написать запрос Manager и объединить его с запросом Employee. Каждый из них будет содержать свою собственную логику. Необходимость включать элементы из разных таблиц в разные строки — очевидное применение.

Сложные / вложенные формулы — Старайтесь последовательно делать отступы и не бойтесь использовать несколько строк. «Дело, когда дело, когда дело, когда» сводит вас с ума. Потратьте время, чтобы обдумать это. Сохраните сложные кальки для последнего. Получите правильные записи, выбранные в первую очередь. Затем вы атакуете сложные формулы, зная, что работаете с правильными значениями. Просмотр значений, используемых в формулах, поможет вам определить области, в которых необходимо учитывать значения NULL, и где обрабатывать ошибку деления на ноль.

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

Пример создания запроса (Query) в базе данных MS SQL Server. База данных размещена в локальном файле *.mdf

Пример создания запроса (Query) в базе данных MS SQL Server. База данных размещена в локальном файле *.mdf


Содержание


Поиск на других ресурсах:

Условие задачи

Задана база данных, которая размещается в файле Education.mdf. База данных содержит две связанные между собою таблицы Student и Session.

Таблицы связаны между собою за полем ID_Book.

Используя средства Microsoft Visual Studio создать запрос с именем Query1, который будет иметь следующую структуру:

Название поляТаблица
Num_BookStudent
NameStudent
MathematicsSession
InformaticsSession
PhilosophySession
AverageВычислительное поле

Выполнение (пошаговая инструкция)

1. Загрузить Microsoft Visual Studio
2. Подключить базу данных Education.mdf к перечню баз данных утилиты Server Explorer

Чтобы не тратить время на разработку и связывание таблиц базы данных Education.mdf, архив ранее подготовленной базы данных можно загрузить здесь. После загрузки и сохранения в некоторой папке, базу данных нужно разархивировать и подключить к перечню баз данных утилиты Server Explorer.

Подключение базы данных реализуется одним из нескольких стандартных способов:

  • выбором команды «Connect to Database…» с меню Tools;
  • выбором кнопки (команды) «Connect to Database…» из утилиты Server Explorer.

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

Рис. 1. Способы добавления/подключения базы данных

Подробное описание того, как осуществляется подключение базы данных типа Microsoft SQL Server в Microsoft Visual Studio, приведено в теме:

После подключения, окно утилиты Server Explorer будет выглядеть как показано на рисунке 2.

Рис. 2. Утилита Server Explorer с подключенной базой данных Education.mdf

3. Добавление нового запроса. Команда «New Query»

К базе данных можно создавать запросы. В нашем случае нужно создать запрос в соответствии с условием задачи.

Запрос создается с помощью команды «New Query», которая вызовется из контекстного меню (рисунок 3). Чтобы вызвать команду, достаточно сделать клик правой кнопкой мышки в области поля, которое выделено для отображения элементов базы данных Education.mdb. Следует отметить, что запросы не сохраняются системой. Для отображения сохраненных (сложных) запросов используется представление (Views).



На рисунке 3 отображено контекстное меню, которое вызывается при нажатии на вкладке Views (представление). В этом меню нужно выбрать команду «New Query». Эта команда есть в перечне контекстных меню других составляющих базы данных (таблиц, диаграмм и т.п.).

Рис. 3. Команда New Query

В результате откроется окно «Add Table», в котором нужно выбрать таблицы, данные из которых будут использоваться в запросе (рисунок 4).

Рис. 4. Выбор таблиц, которые будут использоваться в запросе

Для нашего случая нужно выбрать обе таблицы.

В результате окно Microsoft Visual Studio будет выглядеть, как показано на рисунке 5.

Рис. 5. Окно MS Visual Studio после создания запроса

В таблицах нужно выделить поля, которые будут использоваться в запросе. Порядок выбора полей должен соответствовать отображению их в запросе в соответствии с условием задачи. Это означает, что сначала выбираются поля таблицы Student (NumBook, Name), а потом выбираются поля таблицы Session (Mathematics, Informatics, Philosophy).

Для нашего случая выбор полей изображен на рисунке 6.

Рис. 6. Выбор полей для запроса

Как видно из рисунка 6, в нижней части окна отображается запрос на языке SQL, сформированный системой

SELECT  Student.Num_Book, Student.Name, Session.Mathematics,
        Session.Informatics, Session.Philosophy
FROM    Session INNER JOIN
          Student ON Session.ID_Book = Student.ID_Book
4. Добавление вычисляемого поля Average

Чтобы создать вычисляемое поле Average, нужно в окне, где отображается SQL-запрос изменить текст этого запроса. Например:

SELECT  Student.Num_Book, Student.Name, Session.Mathematics, Session.Informatics, Session.Philosophy,
        (Session.Mathematics + Session.Informatics + Session.Philosophy) / 3.0 AS Average
FROM  Session INNER JOIN
        Student ON Session.ID_Book = Student.ID_Book

Добавляется вычислительное поле Average, которое есть средним арифметическим (рисунок 7).

Рис. 7. Добавление вычисляемого поля Average

5. Запуск запроса на выполнение. Команда «Execute SQL»

Чтобы запустить на выполнение запрос, используется кнопка «Execute SQL» (рисунок 8).

В нижней части окна на рисунке 8 изображен результат выполнения запроса.

Рис. 8. Кнопка «Execute SQL» запуска запроса на выполнение и результат выполнения запроса

Другой способ запуска запроса на выполнение – команда «Execute SQL» из меню «Query Designer».


Связанные темы


SQL Server. Оптимизация запросов SQL. MS SQL Медленно работают запросы SELECT

Введение

В данном руководстве мы изложили некоторые рекомендации по оптимизации запросов SQL. 

Оптимизация структуры таблиц SQL Server

Разбивайте сложные таблицы на несколько, помните, чем больше в вашей таблице столбцов и тяжелых типов (nvarchar(max)), тем тяжелее по ней проход. Если некоторые данные не всегда используются в select с ней, выносите их отдельно в таблицу и связывайте через FK

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

Если текстовые данные в столбце имеют разную длину, используйте тип  данных NVARCHAR вместо NCHAR.

Не используйте NVARCHAR или NCHAR типы данных, если Вы не должны сохранить 16-разрядные символьные данные (UNICODE). Они требуют в два раза больше места, чем CHAR и VARCHAR, что повышает расходы времени на ввод-вывод (но если у вас кириллица, то без NVARCHAR не обойтись).

Если Вы должны хранить большие строки данных и их длина меньше чем 8,000 символов, используют тип данных NVARCHAR вместо TEXT. Текстовые поля требуют больше ресурсов для обработки и снижают производительность.

Любое поле, в котором должны быть только отличные от нуля значения, нужно объявлять как NOT NULL

Для любого поля, которое должно содержать уникальные значения, стоит указать модификатор UNIQUE

Хранение изображений в БД нежелательно. Храните в таблице путь к файлу (локальный путь или URL), а сам файл помещайте в файловую систему сервера. 

Оптимизация запросов SELECT 

Не читайте больше данных, чем надо. Не используйте *

Если ваше приложение позволяет пользователям выполнять запросы, но вы не можете отсечь лишние сотни и тысячи возвращаемых строк, используйте оператор TOP внутри инструкции SELECT. 

Не возвращайте клиенту большее количество столбцов или строк, чем действительно необходимо (Не используй * в Select). 

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

Корректно используйте JOIN

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

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

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

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

Тип JOIN используйте только тот, который вернет вам НЕОБХОДИМЫЕ данные без каких-либо дублей или лишней информации (или совсем отказаться от join). Т.е. не нужно получать всех пользователей таким образом: 

select users.username from users
inner join roles on users.roleID=roles.id

В этом случае вы получите много повторов пользователей

Сортировка в SELECT

Самой ресурсоемкой сортировкой является сортировка строк.

При объявлении полей всегда следует использовать размер, который нужен, и не выделять лишние байты про запас.

Группирование в SELECT

Используйте как можно меньше колонок для группировки.

По возможности лучше использовать Where вместо Having, т.к. это уменьшает количество строк для группировки на ранней стадии. 

Если требуется группирование, но без использования агрегатных функций (COUNT(), MIN(), MAX и т.д.), разумно использовать DISTINCT.

Ограничить использование DISTINCT

Эта команда исключает повторяющиеся строки в результате. Команда требует повышенного времени обработки. Лучше всего комбинировать с LIMIT.

Ограничить использование SELECT для постоянно изменяющихся таблиц.

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

Оптимизация WHERE в запросе SELECT

Если where состоит из условий, объединенных AND,  они должны располагаться в порядке возрастания вероятности истинности данного условия. Чем быстрее мы получим false  в одном из условий — тем меньше условий будет обработано и тем быстрее выполняется запрос. 

Если where состоит из условий, объединенных OR,  они должны располагаться в порядке уменьшения вероятности истинности данного условия. Чем быстрее мы получим true  в одном из условий — тем меньше условий будет обработано и тем быстрее выполняется запрос. 

Исопльзуйте IN вместо OR. Операция IN работает гораздо быстрее, чем серия OR.  Запрос «… WHERE column1 = 5 OR column1 = 6» медленнее чем «…WHERE column1 IN (5, 6)»

Используйте Exists вместо Count >0 в подзапросах. Используйте where exists (select id from t1 where id = t.id) вместо where count(select id from t1 where id=t.id) > 0

LIKE. Эту операцию следует использовать только при крайней необходимости, потому что лучше и быстрее использовать поиск, основанный на full-text индексах. 

Советы по оптимизации хранимых процедур и SQL пакетов

Инкапсулируйте ваш код в хранимых процедурах


Для обработки данных используйте хранимые SQL процедуры.

Когда хранимая процедура выполняется в первый раз (и у нее не определена опция WITH RECOMPILE), она оптимизируется, для нее создается план выполнения запроса, который кешируется SQL сервером. Если та же самая хранимая процедура вызывается снова, она будет использовать кешированный план выполнения запроса, что экономит время и увеличивает производительность. 

Всегда включайте в ваши хранимые процедуры инструкцию «SET NOCOUNT ON». Если Вы не включите эту инструкцию, тогда каждый раз при выполнении запроса SQL сервер отправит ответ клиенту, указывающему число строк, на которые воздействует запрос.

Избегайте использования курсоров

По возможности выбирайте быстрый forward-only курсор

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

Когда Вы закончили использовать курсор, как можно раньше не только ЗАКРОЙТЕ (CLOSE) его, но и ОСВОБОДИТЕ (DEALLOCATE).

Используйте триггеры c осторожностью

Триггеры — это усложнение логики работы приложения, неявное неожиданное выполнение дополнительных действий. 

Триггеры усложняют интерфейс хранимых процедур. Поместите все необходимые проверки и действия в рамки хранимых процедур. 

Временные таблицы для больших таблиц, табличные переменные — для малых (меньше 1000)

Если вам требуется хранить промежуточные данные в таблицах, то используйте табличные переменные (@t1) для малых таблиц, а временные таблицы (#t1) — для больших. 

Подробнее: 

http://sqlcom.ru/helpful-and-interesting/compare-temp-table-vs-table-variable-vs-cte/

https://coderoad.ru/27894/%D0%92-%D1%87%D0%B5%D0%BC-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B5%D0%B9-%D0%B8-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D0%B2-SQL-Server

При определении временной таблицы имеет смысл проверить ее на существование: 

IF OBJECT_ID('tempdb..#eventIDs') IS NOT NULL begin
   DROP TABLE #eventIDs
end
CREATE TABLE #eventIDs ( id int primary key,instanceID	int )
     

Также для улучшения быстродействия используйте для временной таблицы первичный ключ и индексы. 

Как уменьшить вероятность дедлоков на базе

Дедлок — это взаимная блокировка 2 выполняющихся пакетов sql. Это самым негативным образом сказывается на быстродействии запросов. 

Чтобы избежать deadlocks, пытайтесь разрабатывать ваше приложение с учетом следующих рекомендаций:

  • Всегда получайте доступ к объектам в одном и том же порядке.
  • Старайтесь делать транзакции короткими и заключайте их в один пакет (batch)
  • Старайтесь использовать максимально низкий уровень изоляции для пользовательского соединения, которое работает с транзакцией.

Работа с индексами SQL Server

Советы по созданию кластерных индексов

  • Первичный ключ не всегда должен быть кластерным индексом. Если Вы создаете первичный ключ, тогда SQL сервер автоматически делает первичный ключ кластерным индексом. Первичный ключ должен быть кластерным индексом, только если он отвечает одной из нижеследующих рекомендаций.
  • Кластерные индексы идеальны для запросов, где есть выбор по диапазону или вы нуждаетесь в сортированных результатах. Так происходит потому, что данные в кластерном индексе физически отсортированы по какому-то столбцу. Запросы, получающие выгоду от кластерных индексов, обычно включают в себя операторы BETWEEN, <, >, GROUP BY, ORDER BY, и агрегативные операторы типа MAX, MIN, и COUNT.
  • Кластерные индексы хороши для запросов, которые ищут запись с уникальным значением (типа номера служащего) и когда Вы должны вернуть большую часть данных из записи или всю запись. Так происходит потому, что запрос покрывается индексом.
  • Кластерные индексы хороши для запросов, которые обращаются к столбцам с ограниченным числом значений, например столбцы, содержащие данные о странах или штатах. Но если данные столбца мало отличаются, например, значения типа «да/нет», «мужчина/женщина», то такие столбцы вообще не должны индексироваться.
  • Кластерные индексы хороши для запросов, которые используют операторы GROUP BY или JOIN.
  • Кластерные индексы хороши для запросов, которые возвращают много записей, потому что данные находятся в индексе, и нет необходимости искать их где-то еще.
  • Избегайте помещать кластерный индекс в столбцы, в которых содержатся постоянно возрастающие величины, например, даты, подверженные частым вставкам в таблицу (INSERT). Так как данные в кластерном индексе должны быть отсортированы, кластерный индекс на инкрементирующемся столбце вынуждает новые данные быть вставленным в ту же самую страницу в таблице, что создает «горячую зону в таблице» и приводит к большому объему дискового ввода-вывода. Постарайтесь найти другой столбец, который мог бы стать кластерным индексом.

Советы по выбору некластерных индексов

  • Некластерные индексы лучше подходят для запросов, которые возвращают немного записей (включая только одну запись) и где индекс имеет хорошую селективность (более чем 95 %).
  • Если столбец в таблице не содержит по крайней мере 95% уникальных значений, тогда очень вероятно, что Оптимизатор Запроса SQL сервера не будет использовать некластерный индекс, основанный на этом столбце. Поэтому добавляйте некластерные индексы к столбцам, которые имеют хотя бы 95% уникальных записей. Например, столбец с «Да» или «Нет» не имеет 95% уникальных записей.
  • Постарайтесь сделать ваши индексы как можно меньшего размера (особенно для многостолбцовых индексов). Это уменьшает размер индекса и уменьшает число чтений, необходимых, чтобы прочитать индекс, что увеличивает производительность.
  • Если возможно, создавайте индексы на столбцах, которые имеют целочисленные значения вместо символов. Целочисленные значения имеют меньше потерь производительности, чем символьные значения.
  • Если Вы знаете, что ваше приложение будет выполнять один и тот же запрос много раз на той же самой таблице, рассмотрите создание покрывающего индекса на таблице. Покрывающий индекс включает все столбцы, упомянутые в запросе. Из-за этого индекс содержит все данные, которые Вы ищете, и SQL сервер не должен искать фактические данные в таблице, что сокращает логический и/или физический ввод — вывод. С другой стороны, если индекс становится слишком большим (слишком много столбцов), это может увеличить объем ввода — вывода и ухудшить производительность.
  • Индекс полезен для запроса только в том случае, если оператор WHERE запроса соответствует столбцу (столбцам), которые являются крайними левыми в индексе. Так, если Вы создаете составной индекс, типа «City, State», тогда запрос » WHERE City = ‘Хьюстон’ » будет использовать индекс, но запрос » WHERE State = ‘TX’ » не будет использовать индекс.
  • Любая операция над полем в предикате поиска, которое лежит под индексом, сводит на нет его использование. where isnull(field,’’) = ‘’ здесь индекс не используется, where field = ‘’ and field is not null — здесь используется.

Бывает ли слишком много индексов?

Да. Проблема с лишними индексами состоит в том, что SQL сервер должен изменять их при любых изменениях таблицы (INSERT, UPDATE, DELETE).

Лучшим решением ставить сомнительный индекс или нет, будет подождать и собрать статистику по работе индексов.

Лучшие кандидаты на установку индекса

  • Это поля, по которым идет Join
  • Поля связи, участвующие в подзапросах
  • Поля, по которым идет фильтрация в where
  • Поля, по которым выполняется сортировка.

Советы по использованию временных таблиц и табличных переменных

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

  • Временная таблица храниться физически в tempdb, табличная переменная хранится в памяти SQL
  • SQL может сам решить сохранить табличную переменную физически, если там будет много данных, это потеря ресурсов, учтите это
  • Временная таблица для большого объема данных (полноценная выборка), табличная переменная для малого (справочники или набор ID для чего-то)
  • Временная таблица доступна из любой процедуры SQL, табличная переменная только в рамках запроса. Не забывайте очищать временные таблицы после их использования

Если вы SQL-разработчик или администратор MS SQL Server, и вы хотели бы разрабатывать веб-решения на SQL, то веб-платформа Falcon Space — это то, что вам нужно.

В ней SQL — это основной язык разработки, который позволяет реализовать систему личных кабинетов с формами, таблицами, дашбордами и другими компонентами. Все настраивается на SQL. 

Вводная статья по Falcon Space для SQL специалиста

Порядок операций SQL — В каком порядке MySQL выполняет запросы?

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

Если вы ищете короткую версию, это логический порядок операций, также известный как порядок выполнения, для SQL-запроса:

  1. FROM, включая JOINs
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. Функции WINDOW
  6. SELECT
  7. DISTINCT
  8. UNION
  9. ORDER BY
  10. LIMIT и OFFSET

Но реальность не так проста и не прямолинейна. Как мы уже говорили, стандарт SQL определяет порядок выполнения для различных предложений SQL-запросов. Сказано, что современные базы данных уже проверяют этот порядок по умолчанию, применяя некоторые приемы оптимизации, которые могут изменить фактический порядок выполнения, хотя в конечном итоге они должны возвращать тот же результат, как если бы они выполняли запрос в порядке выполнения по умолчанию.

Почему они это сделали? Что ж, может быть глупо, если база данных сначала извлечет все данные, упомянутые в предложении FROM (включая JOIN), прежде чем заглядывать в предложение WHERE и его индексы. Эти таблицы могут содержать большое количество данных, поэтому вы можете представить, что произойдет, если оптимизатор базы данных будет придерживаться традиционного порядка операций SQL-запроса.

Давайте рассмотрим каждую из частей SQL-запроса в соответствии с порядком их выполнения.

 

FROM и JOINs

Таблицы, указанные в предложении FROM (включая JOIN), будут оцениваться первыми, чтобы определить весь рабочий набор, который имеет отношение к запросу. База данных будет объединять данные из всех таблиц в соответствии с предложениями JOINs ON, а также извлекать данные из подзапросов и даже может создавать некоторые временные таблицы для хранения данных, возвращаемых из подзапросов в этом разделе.

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

 

Класс WHERE

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

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

Кроме того, распространенной ошибкой для предложения WHERE является попытка отфильтровать агрегированные значения в предложении WHERE, например, с помощью этого предложения: WHERE sum (available_stock)> 0. Этот оператор не выполнит запрос, потому что агрегаты будут оцениваться позже в процессе (см. Раздел GROUP BY ниже). Чтобы применить условие фильтрации к агрегированным данным, вы должны использовать предложение HAVING, а не предложение WHERE.

 

Предложение GROUP BY

Теперь, когда мы отфильтровали набор данных с помощью предложения WHERE, мы можем объединить данные в соответствии с одним или несколькими столбцами, появляющимися в предложении GROUP BY. Группировка данных фактически разбивает их на разные порции или сегменты, где каждый сегмент имеет один ключ и список строк, соответствующих этому ключу. Отсутствие предложения GROUP BY похоже на помещение всех строк в одно большое ведро.

После того как вы агрегируете данные, вы можете теперь использовать функции агрегации, чтобы возвращать значение для каждой группы для каждого сегмента. Такие функции агрегации включают COUNT, MIN, MAX, SUM и другие.

Класс HAVING

Теперь, когда мы сгруппировали данные с помощью предложения GROUP BY, мы можем использовать предложение HAVING, чтобы отфильтровать некоторые сегменты. Условия в предложении HAVING могут ссылаться на функции агрегирования, поэтому пример, который не работал в приведенном выше предложении WHERE, будет прекрасно работать в предложении HAVING: HAVING sum (available_stock)> 0.

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

Кроме того, как мы упоминали в предыдущих разделах, псевдонимы, определенные в предложении SELECT, также не могут быть доступны в этом разделе, поскольку они еще не были оценены базой данных (это верно для большинства баз данных).

 

Функции Window

Если вы используете функции Window , это точка, где они будут выполняться. Подобно механизму группировки, оконные функции также выполняют вычисления для набора строк. Основное отличие состоит в том, что при использовании оконных функций каждая строка будет сохранять свою идентичность и не будет сгруппирована в группу других похожих строк.

Оконные функции могут использоваться только в предложении SELECT или ORDER BY. Вы можете использовать функции агрегирования внутри оконных функций, например:

SUM(COUNT(*)) OVER ()

 

Предложение SELECT

Теперь, когда мы закончили отбрасывать строки из набора данных и группировать данные, мы можем выбрать данные, которые мы хотим получить из запроса на стороне клиента. Вы можете использовать имена столбцов, агрегаты и подзапросы внутри предложения SELECT. Имейте в виду, что если вы используете ссылку на функцию агрегации, например COUNT (*) в предложении SELECT, это просто ссылка на агрегацию, которая уже произошла, когда произошла группировка, поэтому сама агрегация не произойдет в предложении SELECT, но это только ссылка на его набор результатов.

 

Ключевое слово DISTINCT

Синтаксис ключевого слова DISTINCT немного сбивает с толку, потому что ключевое слово занимает свое место перед именами столбцов в предложении SELECT. Но фактическая операция DISTINCT происходит после SELECT. При использовании ключевого слова DISTINCT база данных отбрасывает строки с повторяющимися значениями из оставшихся строк, оставшихся после фильтрации и агрегирования.

 

Ключевое слово UNION

Ключевое слово UNION объединяет наборы результатов двух запросов в один набор результатов. В большинстве баз данных вы можете выбирать между UNION DISTINCT (который отбрасывает дублирующиеся строки из объединенного набора результатов) или UNION ALL (который просто объединяет наборы результатов без применения какой-либо проверки на дублирование).

Вы можете применить сортировку (ORDER BY) и ограничение (LIMIT) к набору результатов UNION, так же, как вы можете применить его к обычному запросу.

 

Предложение ORDER BY

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

Вы можете выбрать сортировку данных по убыванию (DESC) или по возрастанию (ASC). Заказ может быть уникальным для каждой из частей заказа, поэтому действует следующее: ORDER BY firstname ASC, age DESC

 

LIMIT и OFFSET

В большинстве случаев использования (за исключением нескольких подобных отчетов) мы хотели бы отбросить все строки, кроме первых X строк результата запроса. Предложение LIMIT, которое выполняется после сортировки, позволяет нам сделать это. Кроме того, вы можете выбрать, с какой строки начинать извлекать данные и сколько исключать, используя комбинацию ключевых слов LIMIT и OFFSET. В следующем примере будет выбрано 50 строк, начиная с строки 100: LIMIT 50 OFFSET 100

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Sql Лучшие Лрактики

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

Корректность, читаемость, затем оптимизация: именно в таком порядке

Здесь применяется стандартное предупреждение против преждевременной оптимизации. Не настраивайте SQL-запрос, пока не убедитесь, что он возвращает данные, которые вы ищете.И даже в этом случае расставляйте приоритеты оптимизации запроса только в том случае, если он часто выполняется (например, при включении популярной информационной панели) или если запрос проходит через большое количество строк. В общем, прежде чем беспокоиться о производительности, расставьте приоритеты в отношении точности (дает ли запрос желаемые результаты) и удобочитаемости (могут ли другие легко понять и изменить код).

Сделайте свои стога сена как можно меньше, прежде чем искать иглы

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

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

Мы рассмотрим общий порядок выполнения запросов и добавим советы по сокращению пространства поиска.Затем мы поговорим о трех основных инструментах, которые можно добавить в ваш пояс служебных программ: INDEX, EXPLAIN и WITH.

Сначала ознакомьтесь со своими данными

Ознакомьтесь со своими данными, прежде чем писать хоть одну строчку кода. Железный закон GIGO выполняется (мусор на входе, мусор на выходе), поэтому изучите метаданные, чтобы убедиться, что столбец действительно содержит ожидаемые данные.

Редактор SQL в Metabase имеет удобную вкладку справки по данным (доступную через значок книги), где вы можете просматривать таблицы в своей базе данных и просматривать их столбцы и соединения (рисунок 1):

Фиг.1 . Используйте боковую панель «Ссылка на данные» для просмотра полей таблицы.

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

Рис.2 . Используйте боковую панель со ссылкой на данные, чтобы просмотреть образцы данных.

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

Мы расскажем об исследовании данных в следующей публикации.А пока давайте рассмотрим общий рабочий процесс запроса.

Разработка вашего запроса

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

  • Как и выше, изучите метаданные столбца и таблицы. Если вы используете собственный редактор запросов Metabase, вы также можете искать фрагменты SQL, содержащие код SQL для таблицы и столбцов, с которыми вы работаете. Фрагменты позволяют увидеть, как другие аналитики запрашивали данные.Или вы можете начать запрос из существующего вопроса SQL.
  • Чтобы получить представление о значениях таблицы, ВЫБЕРИТЕ * из таблиц, с которыми вы работаете, и ОГРАНИЧИТЕ свои результаты. Продолжайте применять LIMIT при уточнении столбцов (или добавлении дополнительных столбцов с помощью объединений).
  • Сузьте столбцы до минимального набора, необходимого для ответа на ваш вопрос.
  • Примените к этим столбцам любые фильтры.
  • Если вам нужно агрегировать данные, агрегируйте небольшое количество строк и убедитесь, что агрегаты соответствуют вашим ожиданиям.
  • Если у вас есть запрос, возвращающий нужные вам результаты, найдите разделы запроса, которые нужно сохранить как общее табличное выражение (CTE), чтобы инкапсулировать эту логику.
  • С помощью Metabase вы также можете сохранить код в виде фрагмента кода SQL для совместного использования и повторного использования в других запросах.

Теперь перейдем к выполнению запроса.

Общий порядок выполнения запроса

Прежде чем мы перейдем к отдельным советам по написанию кода SQL, важно иметь представление о том, как базы данных будут выполнять ваш запрос — что отличается от порядка «чтения» (слева направо, сверху вниз), который вы используете при составлении запроса. .Обратите внимание, что оптимизаторы запросов могут изменять порядок следующего списка, но этот общий жизненный цикл SQL-запроса следует иметь в виду при написании SQL. Мы будем использовать порядок выполнения, чтобы сгруппировать следующие советы по написанию хорошего SQL.

Практическое правило заключается в следующем: чем раньше вы удалите данные из этого списка, тем лучше.

  1. FROM (и JOIN) получить (ы) таблицы, указанные в запросе. Эти таблицы представляют максимальное пространство поиска, указанное вашим запросом. По возможности ограничьте это пространство поиска, прежде чем двигаться дальше.
  2. ГДЕ фильтрует данные.
  3. GROUP BY объединяет данные.
  4. HAVING отфильтровывает агрегированные данные, не соответствующие критериям.
  5. SELECT захватывает столбцы (затем дедуплицирует строки, если вызывается DISTINCT).
  6. UNION объединяет выбранные данные в набор результатов.
  7. ORDER BY сортирует результаты.

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

Некоторые рекомендации по запросам (не правила)

Следующие советы представляют собой рекомендации, а не правила, призванные уберечь вас от неприятностей. Каждая база данных обрабатывает SQL по-разному, имеет немного другой набор функций и использует разные подходы к оптимизации запросов. И это еще до того, как мы даже перейдем к сравнению традиционных транзакционных баз данных с аналитическими базами данных, которые используют столбчатые форматы хранения, которые имеют совершенно разные характеристики производительности.

Помогите людям (включая себя через три месяца), добавляя комментарии, объясняющие различные части кода.Самая важная вещь, которую нужно уловить, — это «почему». Например, очевидно, что приведенный ниже код отфильтровывает заказы с идентификатором ID больше 10, но это происходит потому, что первые 10 заказов используются для тестирования.

  ВЫБРАТЬ
  я бы,
  продукт
ИЗ
  заказы
- отфильтровать тестовые заказы
ГДЕ
  order.id> 10
  

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

ИЗ

Соединение таблиц с помощью ключевого слова ON

Хотя возможно «объединить» две таблицы с помощью предложения WHERE (то есть для выполнения неявного объединения, например SELECT * FROM a, b WHERE a.foo = b.bar ), вместо этого следует предпочесть явное ПРИСОЕДИНЕНИЕ:

  ВЫБРАТЬ
  o.id,
  o.total,
  п. продавец
ИЗ
  заказы AS o
  ПРИСОЕДИНЯЙТЕСЬ к продуктам КАК p ON o.product_id = p.id
  

В основном для удобства чтения, поскольку синтаксис JOIN + ON отличает соединения от предложений WHERE , предназначенных для фильтрации результатов.

Псевдоним нескольких таблиц

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

Избегать

  ВЫБРАТЬ
  заглавие,
  Фамилия,
  имя
FROM fiction_books
  ВЛЕВО ПРИСОЕДИНИТЬСЯ fiction_authors
  ПО fiction_books.author_id = fiction_authors.id
  

Предпочтение

  ВЫБРАТЬ
  books.title,
  авторы.last_name,
  авторы.first_name
FROM fiction_books КАК книги
  ВЛЕВО ПРИСОЕДИНИТЬСЯ fiction_authors AS авторы
  НА books.author_id = авторы.id
  

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

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

ГДЕ

Фильтр с ГДЕ до ИМЕНИ

Используйте предложение WHERE для фильтрации лишних строк, чтобы вам не приходилось вычислять эти значения в первую очередь. Только после удаления нерелевантных строк и после агрегирования этих строк и их группировки следует включать предложение HAVING для фильтрации агрегатов.

Избегайте функций для столбцов в предложениях WHERE

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

И помните, оператор конкатенации || также является функцией, так что не пытайтесь объединить строки для фильтрации нескольких столбцов.Вместо этого предпочтите несколько условий:

Избегать

  ВЫБЕРИТЕ героя, кореша
ОТ супергероев
ГДЕ герой || sidekick = 'БэтменРобин'
  

Предпочтение

  ВЫБЕРИТЕ героя, кореша
ОТ супергероев
ГДЕ
  герой = 'Бэтмен'
  А ТАКЖЕ
  sidekick = 'Робин'
  
Предпочитать
= на КАК

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

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

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

Избегать

  ВЫБЕРИТЕ столбец ИЗ таблицы ГДЕ столбец КАК "% wizar%"
  

Предпочтение

  ВЫБЕРИТЕ столбец ИЗ таблицы WHERE col LIKE "wizar%"
  
Предпочитать СУЩЕСТВУЕТ в

Если вам просто нужно проверить наличие значения в таблице, отдайте предпочтение EXISTS IN , так как процесс EXISTS завершается, как только найдет значение поиска, тогда как IN просканирует всю таблицу . IN следует использовать для поиска значений в списках.

Точно так же предпочтите НЕ СУЩЕСТВУЕТ НЕ В .

ГРУППА ПО

Упорядочить несколько групп по убыванию мощности

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

ИМЕЕТ

Используйте HAVING только для фильтрации агрегатов

И до HAVING отфильтруйте значения с помощью предложения WHERE перед агрегированием и группировкой этих значений.

ВЫБРАТЬ

SELECT столбцы, а не звезды

Укажите столбцы, которые вы хотите включить в результаты (хотя можно использовать * при первом просмотре таблиц — просто не забудьте LIMIT для ваших результатов).

СОЮЗ

Предпочитайте UNION All вместо UNION

Если дубликаты не являются проблемой, UNION ALL не отбрасывает их, а поскольку UNION ALL не занимается удалением дубликатов, запрос будет более эффективным.

ЗАКАЗАТЬ В

По возможности избегайте сортировки, особенно в подзапросах

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

ИНДЕКС

Этот раздел предназначен для администраторов баз данных в толпе (и тема слишком большая, чтобы поместиться в этой статье). Одна из наиболее частых проблем, с которыми сталкиваются люди при возникновении проблем с производительностью при запросах к базе данных, — это отсутствие адекватного индексирования.

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

Добавление индексов

Индексирование столбцов внешнего ключа и часто запрашиваемых столбцов может значительно сократить время запроса. Вот пример инструкции для создания индекса:

  СОЗДАТЬ ИНДЕКС product_title_index ON продукты (название)
  

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

Использовать частичные индексы

Для особенно больших наборов данных или однобоких наборов данных, где определенные диапазоны значений встречаются чаще, рассмотрите возможность создания индекса с предложением WHERE , чтобы ограничить количество проиндексированных строк. Частичные индексы также могут быть полезны для диапазонов дат, например, если вы хотите проиндексировать данные только за последнюю неделю.

Использовать составные индексы

Для столбцов, которые обычно объединяются в запросах (например, last_name, first_name), рассмотрите возможность создания составного индекса.Синтаксис аналогичен созданию единого индекса. Например:

  CREATE INDEX full_name_index ON клиентов (last_name, first_name)
  

ОБЪЯСНИТЬ

Ищите узкие места

Некоторые базы данных, такие как PostgreSQL, предлагают понимание плана запроса на основе вашего кода SQL. Просто добавьте к вашему коду префикс EXPLAIN ANALYZE . Эти команды можно использовать для проверки планов запросов и поиска узких мест или для сравнения планов одной версии запроса с другой, чтобы увидеть, какая версия более эффективна.

Вот пример запроса с использованием примера базы данных dvdrental , доступной для PostgreSQL.

  EXPLAIN ANALYZE SELECT title, release_year
ИЗ фильма
ГДЕ release_year> 2000;
  

А на выходе:

  Последовательное сканирование на пленке (стоимость = 0,00..66,50 рядов = 1000 ширины = 19) (фактическое время = 0,008..0,311 рядов = 1000 петель = 1)
   Фильтр: ((год_выпуска) :: целое число> 2000)
 Время планирования: 0,062 мс
 Время выполнения: 0,416 мс
  

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

Вот документация PostreSQL по использованию EXPLAIN.

С

Организуйте свои запросы с помощью общих табличных выражений (CTE)

Используйте предложение WITH для инкапсуляции логики в общее табличное выражение (CTE). Вот пример запроса, который ищет продукты с самым высоким средним доходом от проданной единицы в 2018 году, а также максимальные и минимальные значения.

  С product_orders AS (
  ВЫБЕРИТЕ o.created_at AS order_date,
          p.title AS product_title,
          (o.subtotal / o.quantity) AS выручка на единицу
   ИЗ заказов как о
   LEFT JOIN products AS p ON o.product_id = p.id
   - Отфильтровать заказы, размещенные службой поддержки клиентов, для взимания с клиентов
   ГДЕ o.quantity> 0
)
ВЫБЕРИТЕ product_title КАК продукт,
       AVG (выручка на единицу) AS avg_revenue_per_unit,
       MAX (доход_на_единицу) AS max_revenue_per_unit,
       MIN (выручка на единицу) AS min_revenue_per_unit
ОТ product_orders
ГДЕ order_date МЕЖДУ "2019-01-01" И "2019-12-31"
ГРУППА ПО ПРОДУКТУ
ЗАКАЗАТЬ ПО avg_revenue_per_unit DESC
  

Предложение WITH делает код читаемым, поскольку основной запрос (то, что вы на самом деле ищете) не прерывается длинным подзапросом.

Вы также можете использовать CTE, чтобы сделать ваш SQL более читаемым, если, например, в вашей базе данных есть поля с неудобным названием или требующие небольшого изменения данных для получения полезных данных. Например, CTE могут быть полезны при работе с полями JSON. Вот пример извлечения и преобразования полей из большого двоичного объекта JSON пользовательских событий.

  С исходными_данными AS (
  ВЫБРАТЬ события -> 'данные' - >> 'имя' AS имя_события,
    CAST (события -> 'данные' - >> 'ts' временная метка AS) AS event_timestamp
    CAST (события -> 'данные' - >> 'cust_id' AS int) AS customer_id
  ОТ user_activity
)
ВЫБЕРИТЕ event_name,
       event_timestamp,
       Пользовательский ИД
ИЗ исходных_данных
  

В качестве альтернативы вы можете сохранить подзапрос как фрагмент кода SQL (рисунок 3 — обратите внимание на круглые скобки вокруг фрагмента), чтобы легко повторно использовать этот код в других запросах.

Фиг.3 . Сохранение подзапроса во фрагменте и использование его в предложении FROM.

И да, как и следовало ожидать, Aerodynamic Leather Toucan приносит самый высокий средний доход от проданной единицы.

SQL потрясающий. Но то же самое с конструктором запросов и редактором записных книжек Metabase. Вы можете составлять запросы с помощью графического интерфейса Metabase для объединения таблиц, фильтрации и суммирования данных, создания настраиваемых столбцов и т. Д. А с помощью настраиваемых выражений вы можете обрабатывать подавляющее большинство аналитических сценариев использования, даже не обращаясь к SQL.Вопросы, составленные с помощью редактора записной книжки, также получают преимущества от автоматической детализации, которая позволяет зрителям ваших диаграмм щелкать мышью и исследовать данные — функция, недоступная для вопросов, написанных на SQL.

Явные ошибки или упущения?

Есть библиотеки книг по SQL, так что мы здесь только поверхностно. Вы можете поделиться секретами своего SQL-колдовства с другими пользователями Metabase на нашем форуме.

Хотите получать подобное содержимое во входящих?

Как начать выполнение SQL-запросов

В этой статье я объясню, как выполнить SQL-запрос, чтобы помочь вам выполнить свой первый.Давайте прямо сейчас!

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

Для выполнения запросов SQL вам понадобятся три вещи:

  • Ядро базы данных
  • Клиент SQL
  • SQL-запрос

Механизм базы данных подобен репозиторию данных; он содержит все данные (таблицы, процедуры и т. д.), относящиеся к вашей организации, бизнесу или личным базам данных.Установить ядро ​​базы данных довольно просто, и это первый шаг, который вы должны сделать, чтобы иметь возможность запускать SQL-запросы на своем компьютере.

На рынке представлено различных механизмов баз данных , таких как Oracle, SQL Server, DB2, MySQL и PostgreSQL. Некоторые из этих двигателей разрабатываются компаниями для коммерческого или ограниченного личного использования. Например, Microsoft разработала SQL Server, а Oracle разработала механизмы Oracle и MySQL.

Среди движков в этом списке PostgreSQL — особый случай, потому что это движок базы данных с открытым исходным кодом.Это означает, что он разработан сообществом разработчиков, и каждый может использовать его бесплатно (включая вас!).

Важно понимать, что все движки баз данных говорят на основном языке SQL. Таким образом, если вы изучаете SQL во время работы в Oracle, вы можете легко переключаться между передачами и работать с SQL Server, PostgreSQL или любым другим механизмом баз данных, который использует стандартный SQL или его производную.

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

В качестве примера рассмотрим следующие два независимых ядра баз данных: одно для компании с именем GoGreen , работающей в Oracle, а другое для спортивной розничной компании с именем BeOlympic , которая использует PostgreSQL.

Небольшие компании обычно используют бесплатные механизмы баз данных, такие как PostgreSQL или MySQL, в то время как средние компании и корпорации склонны использовать более надежные механизмы баз данных, такие как Oracle, DB2 или SQL Server.Однако важно отметить, что в наши дни почти все компании, занимающиеся базами данных, предлагают бесплатные версии своих баз данных, возможно, с некоторыми ограничениями, ориентированные на малый бизнес.

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

После того, как вы загрузили выбранное ядро ​​базы данных, вам нужно будет загрузить клиент SQL, чтобы иметь возможность взаимодействовать с этим ядром.К счастью, в некоторых случаях клиенты SQL поставляются предустановленными с установками ядра базы данных, в других случаях вам необходимо загрузить, установить и настроить его. Например, в Windows клиент pgAdmin является частью установки ядра СУБД PostgreSQL; это интерактивный интерфейс, который позволяет вам создавать свои собственные базы данных, добавлять таблицы, писать запросы и делать всевозможные полезные вещи. Прочтите статью «Как установить PostgreSQL в Windows за 5 минут», чтобы понять установку и настройку движка Postgres и клиента SQL pgAdmin.

ВЫБЕРИТЕ product_id, description, cost, price ИЗ товаров
 

Вот результаты запроса:

Наконец-то мы прибыли в обетованную землю. Установив ядро ​​базы данных и соответствующий клиент SQL, теперь вы готовы научиться выполнять запросы SQL. Это самый простой запрос, который вы могли бы написать:

ВЫБРАТЬ * ИЗ продуктов
 

Для базы данных розничных продавцов спортивных товаров мы должны написать:

ВЫБРАТЬ * ИЗ клиентов.
 

Изучив основы, вы научитесь писать и выполнять SQL-запрос более высокого уровня, добавляя новые предложения, такие как предложение WHERE для фильтрации записей.

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

Рассмотрим пример ниже. Этот SQL-запрос получает все продукты с ценовым диапазоном от 10,00 до 20,00 долларов включительно.

Прочитав эту статью, вы знаете, как выполнить SQL-запрос.Вам необходимо:

  1. Выберите ядро ​​базы данных для своих нужд и установите его.
  2. Запустите ядро ​​базы данных и подключитесь к нему с помощью клиента SQL.
  3. Пишите SQL-запросы в клиенте (и даже сохраняйте их на свой компьютер).
  4. Выполните SQL-запрос к своим данным.

SQL — мощный язык с множеством возможностей. Несмотря на то, что у меня есть многолетний опыт работы с SQL, я каждую неделю открываю для себя что-то новое. Изучение SQL — это процесс на всю жизнь — начните изучать основы сегодня, чтобы начать свой путь!

SQL-запросов для настройки производительности | Advanced SQL

Начиная с этого места? Этот урок является частью полного руководства по использованию SQL для анализа данных.Проверьте начало.

В этом уроке мы рассмотрим:

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

Теория времени выполнения запросов

База данных — это часть программного обеспечения, которое запускается на компьютере, и на него распространяются те же ограничения, что и на все программное обеспечение: она может обрабатывать столько информации, сколько способно обработать ее оборудование.Способ ускорить выполнение запроса — уменьшить количество вычислений, которые должно выполнять программное обеспечение (и, следовательно, оборудование). Для этого вам понадобится некоторое понимание того, как SQL на самом деле производит вычисления. Во-первых, давайте рассмотрим некоторые высокоуровневые вещи, которые повлияют на количество вычислений, которые вам нужно выполнить, и, следовательно, на время выполнения ваших запросов:

  • Размер таблицы: Если ваш запрос попадет в одну или несколько таблиц с миллионами строк или более, это может повлиять на производительность.
  • Объединений: Если ваш запрос объединяет две таблицы таким образом, что значительно увеличивает количество строк в наборе результатов, ваш запрос, вероятно, будет медленным. Пример этого есть в уроке по подзапросам.
  • Агрегации: Объединение нескольких строк для получения результата требует больше вычислений, чем простое извлечение этих строк.

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

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

А пока давайте проигнорируем то, что вы не можете контролировать, и поработаем над тем, что можете.

Уменьшающий размер стола

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

  ВЫБРАТЬ *
  ИЗ benn.sample_event_table
 ГДЕ event_date> = '2014-03-01'
   И event_date <'2014-04-01'
  

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

Вот почему Mode по умолчанию применяет предложение LIMIT - 100 строк часто больше, чем нужно для определения следующего шага анализа, и это достаточно маленький набор данных, который быстро вернется.

Стоит отметить, что LIMIT не совсем так же работает с агрегациями - агрегация выполняется, затем результаты ограничиваются указанным количеством строк.Итак, если вы объединяете в одну строку, как показано ниже, LIMIT 100 ничего не сделает для ускорения вашего запроса:

  ВЫБРАТЬ СЧЕТЧИК (*)
  ИЗ benn.sample_event_table
 ПРЕДЕЛ 100
  

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

  ВЫБРАТЬ СЧЕТЧИК (*)
  ИЗ (
    ВЫБРАТЬ *
      ИЗ benn.sample_event_table
     ПРЕДЕЛ 100
       ) sub
  

Примечание. Использование LIMIT резко изменит ваши результаты, поэтому вы должны использовать его для проверки логики запроса, но не для получения фактических результатов.

В общем, при работе с подзапросами вы должны убедиться, что ограничили объем данных, с которыми вы работаете, в том месте, где они будут выполнены в первую очередь. Это означает установку LIMIT в подзапрос, а не во внешний запрос. Опять же, это сделано для ускорения выполнения запроса, чтобы вы могли протестировать - НЕ для получения хороших результатов.

Упрощение соединений

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

  SELECT team.conference AS конференция,
       player.school_name,
       COUNT (1) AS игроков
  ОТ игроков benn.college_football_players
  ПРИСОЕДИНЯЙТЕСЬ к командам benn.college_football_teams
    ON team.school_name = player.school_name
 ГРУППА ПО 1,2
  

В количество строк 26 298 benn.college_football_players . Это означает, что 26 298 строк необходимо оценить на предмет совпадений в другой таблице.Но если таблица benn.college_football_players была предварительно агрегирована, вы можете уменьшить количество строк, которые необходимо оценить в объединении. Сначала посмотрим на агрегацию:

  ВЫБРАТЬ player.school_name,
       COUNT (*) как игроки
  ОТ игроков benn.college_football_players
 ГРУППА ПО 1
  

Приведенный выше запрос возвращает 252 результата. Таким образом, удаление этого параметра в подзапросе и последующее присоединение к нему во внешнем запросе существенно снизит стоимость соединения:

  ВЫБРАТЬ команды.конференция,
       sub. *
  ИЗ (
        ВЫБЕРИТЕ player.school_name,
               COUNT (*) как игроки
          ОТ игроков benn.college_football_players
         ГРУППА ПО 1
       ) sub
  ПРИСОЕДИНЯЙТЕСЬ к командам benn.college_football_teams
  ON team.school_name = sub.school_name
  

В этом конкретном случае вы не заметите огромной разницы, потому что 30 000 строк не так уж сложно для обработки базы данных. Но если бы вы говорили о сотнях тысяч строк или более, вы бы заметили улучшение за счет агрегирования перед объединением.При этом убедитесь, что то, что вы делаете, логически согласовано - вам следует беспокоиться о точности своей работы, прежде чем беспокоиться о скорости бега.

ОБЪЯСНИТЬ

Вы можете добавить EXPLAIN в начало любого (рабочего) запроса, чтобы понять, сколько времени это займет. Это не совсем точно, но это полезный инструмент. Попробуйте запустить это:

  ОБЪЯСНИТЬ
ВЫБРАТЬ *
  ИЗ benn.sample_event_table
 ГДЕ event_date> = '2014-03-01'
   И event_date <'2014-04-01'
 ПРЕДЕЛ 100
  

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

Сначала выполняется запись внизу списка. Таким образом, это показывает, что предложение WHERE , ограничивающее диапазон дат, будет выполнено первым. Затем база данных просканирует 600 строк (это приблизительное количество). Вы можете увидеть стоимость, указанную рядом с количеством строк - более высокие числа означают более длительное время выполнения. Вы должны использовать это скорее как ссылку, чем как абсолютную меру.Чтобы уточнить, это наиболее полезно, если вы запускаете EXPLAIN для запроса, изменяете дорогостоящие шаги, а затем снова запускаете EXPLAIN , чтобы увидеть, уменьшились ли затраты. Наконец, предложение LIMIT выполняется последним, и его выполнение действительно дешево (24,65 против 147,87 для предложения WHERE ).

Подробнее см. В документации Postgres.

Использование SQL Runner для создания запросов и исследований

Использование SQL Runner для создания запросов и исследований

SQL Runner предоставляет возможность прямого доступа к вашей базе данных и использования этого доступа различными способами.Используя SQL Runner, вы можете легко перемещаться по таблицам в вашей схеме, использовать "на лету" Explore из SQL-запроса, запускать заранее написанные описательные запросы к вашим данным, просматривать историю SQL Runner, загружать результаты, обмениваться запросами, добавлять в LookML Project в качестве производной таблицы и выполнять другие полезные задачи.

На этой странице описывается, как выполнять запросы в SQL Runner, создавать "на лету" проводники и как использовать SQL Runner для отладки запросов. См. Другие страницы документации для получения информации по:

Чтобы выполнить запрос к базе данных, вы можете написать запрос SQL с нуля, использовать исследование для создания запроса или выполнить запрос к модели LookML.Вы также можете использовать историю для повторного выполнения предыдущего запроса.

Написание SQL-запроса с нуля

Вы можете использовать SQL Runner для написания и выполнения ваших собственных SQL-запросов к вашей базе данных. Looker передает ваш запрос в вашу базу данных в том виде, в котором вы его написали, поэтому убедитесь, что синтаксис вашего SQL-запроса действителен для диалекта вашей базы данных. Например, каждый диалект имеет немного разные функции SQL с определенными параметрами, которые должны быть переданы функции.

  1. Щелкните в области SQL-запроса и введите свою команду SQL.
  2. При желании дважды щелкните имя таблицы или поле в списке полей, чтобы включить его в запрос в месте расположения курсора.
  3. Нажмите Выполнить , чтобы выполнить запрос к базе данных.
  4. Просмотрите результаты в области результатов. SQL Runner загрузит до 5000 строк набора результатов запроса. Для диалектов SQL, поддерживающих потоковую передачу, вы можете загрузить результаты, чтобы увидеть весь набор результатов.

Некоторые программы SQL позволяют выполнять несколько запросов подряд.Однако в SQL Runner можно запускать только один запрос за раз. SQL Runner также имеет ограничение на 65 535 символов для запросов, включая пробелы.

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

Вы также можете использовать SQL Runner для игры с новыми запросами или тестирования существующих запросов. Подсветка ошибок SQL Runner помогает тестировать и отлаживать запросы.

Использование исследования для создания SQL-запроса

Вы также можете использовать исследование для создания запроса, а затем получить команду SQL для этого запроса для использования в SQL Runner:

  1. В обзоре щелкните вкладку SQL на панели Data .
  2. Выберите текст SQL-запроса и скопируйте его в SQL Runner, или
  3. Нажмите Открыть в SQL Runner или Объясните в SQL Runner , чтобы открыть запрос в SQL Runner.

После того, как запрос добавлен в область SQL Query SQL Runner, вы можете нажать Run , чтобы запросить базу данных. Кроме того, вы можете отредактировать запрос, а затем запустить новый запрос.

Создание визуализаций с помощью SQL Runner

Если ваш администратор Looker включил функцию SQL Runner Vis Labs, вы можете создавать визуализации непосредственно в SQL Runner.

При включении SQL Runner Vis панели SQL Runner реорганизованы. Панель визуализации отображается вверху, панель результатов - посередине, а панель запроса - внизу.

  1. После создания и выполнения SQL-запроса вы можете открыть вкладку Визуализация , чтобы просмотреть визуализацию и выбрать тип визуализации, как если бы вы это делали на странице «Обзор».
  2. Вы можете редактировать визуализацию с помощью меню Редактировать .
  3. Вы можете предоставить общий доступ к визуализациям, созданным с помощью SQL Runner, по URL-адресу. Любые настройки, сделанные с помощью меню визуализации Редактировать , будут сохранены, и ссылка не изменится.

При работе с визуализацией SQL Runner следует помнить о некоторых вещах:

  • Таблица результатов и визуализация интерпретируют любое числовое поле как меру.
  • Полное имя поля всегда используется в таблице результатов и визуализации.Поэтому параметр Показать полное имя поля в меню Изменить неактивен.
  • Чтобы использовать настраиваемые поля, вычисления в таблицах, сводные данные, итоги по столбцам и промежуточные итоги, изучите их с помощью запроса SQL Runner.
  • Визуализации статической карты (регионов) не поддерживаются визуализациями SQL Runner, однако карты, в которых используются данные широты и долготы (визуализации карты и статической карты (точек)), поддерживаются.
  • Визуализации временной шкалы не поддерживаются визуализациями SQL Runner.

Размеры поворота

Вы можете редактировать результаты запроса для поворота по одному или нескольким измерениям в визуализациях SQL Runner. Чтобы развернуть поле:

  1. Щелкните значок шестеренки столбца в области Результаты , чтобы открыть параметры столбца.
  2. Щелкните Pivot Column .

Свернутые результаты будут отображаться в визуализации SQL Runner:

Результаты в области Результаты не будут повернуты.

Чтобы отменить сводку результатов , щелкните меню шестеренки повернутого столбца и выберите Отменить сводку столбца :

Изменение типа поля

При отображении результатов и визуализации вашего запроса SQL Runner автоматически интерпретирует любое числовое поле как меру, а любое нечисловое поле как измерение. Вы можете переопределить тип поля по умолчанию и преобразовать измерение в меру - или наоборот - с помощью:

  1. Щелкните значок шестеренки столбца в области Результаты , чтобы открыть параметры столбца.
  2. Щелкните Преобразовать в размер или Преобразовать в меру , чтобы изменить тип поля.

Визуализация отобразит новый тип поля:

Выполнение запроса к модели LookML

Вы можете использовать SQL Runner для написания и выполнения SQL-запросов к модели LookML, а не непосредственно к вашей базе данных. При построении запроса к модели вы можете использовать операторы подстановки LookML, такие как $ {view_name.field_name} или $ {view_name.SQL_TABLE_NAME} . Это может сэкономить время, например, при построении запроса для устранения неполадок в производной таблице.

Looker разрешает любые замены LookML, а затем передает ваш запрос в вашу базу данных, поэтому запрос должен быть в допустимом SQL для диалекта вашей базы данных. Например, каждый диалект имеет немного разные функции SQL с определенными параметрами, которые должны быть переданы функции.

Чтобы выполнить запрос к вашей модели LookML в SQL Runner:

  1. Щелкните вкладку Модель .
  2. Выберите модель, которую хотите запросить.
  3. Щелкните в области SQL-запроса и введите свой SQL-запрос, используя поля LookML.
  4. При желании дважды щелкните представление в списке представлений, чтобы включить представление в запрос в месте расположения курсора.
  5. Чтобы просмотреть список полей в представлении, щелкните представление в разделе Представления . При желании вы можете дважды щелкнуть поле в списке полей, чтобы включить его в свой запрос в месте расположения курсора.
  6. В области Подготовленный SQL-запрос можно просмотреть результирующий SQL-запрос, созданный после того, как любые подстановки LookML были преобразованы в SQL.
  7. Нажмите Выполнить , чтобы выполнить запрос к вашей модели.
  8. Просмотрите результаты в области Результаты . SQL Runner загрузит до 5000 строк набора результатов запроса. Для диалектов SQL, поддерживающих потоковую передачу, вы можете загрузить результаты, чтобы увидеть весь набор результатов.

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

Вы также можете использовать SQL Runner для игры с новыми запросами, тестирования существующих запросов или открытия нового исследования на основе результатов.Подсветка ошибок SQL Runner помогает тестировать и отлаживать запросы.

Просмотр LookML поля из SQL Runner

Из списка полей на вкладке Model вы также можете увидеть LookML для поля. Наведите указатель мыши на поле в списке полей и щелкните значок Looker справа от имени поля:

Looker открывает LookML IDE и загружает файл, в котором определено поле.

История выполнения SQL

Вы также можете просмотреть недавнюю историю всех запросов, которые вы выполняли в SQL Runner.

Чтобы просмотреть историю, щелкните вкладку История в верхней части панели навигации. SQL Runner отображает все запросы, выполняемые при подключении к базе данных. Красный указывает на запрос, который не был выполнен из-за ошибки.

Щелкните запрос в истории, чтобы заполнить этот запрос в SQL Runner, затем щелкните Выполнить , чтобы повторно запустить запрос:

Сортировка запроса

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

Для получения дополнительной информации и примеров см. Раздел «Сортировка данных» на странице документации «Исследование данных в Looker ».

Совместное использование запросов

Вы можете поделиться запросом в SQL Runner с другим пользователем с доступом SQL Runner. Чтобы поделиться запросом, просто скопируйте URL-адрес в адресную строку:

Скачивание результатов

После того, как вы выполнили свой SQL-запрос, вы можете загрузить результаты в различных форматах.

  1. Запишите запрос в поле SQL Query . (На этом этапе вам не нужно запускать запрос в SQL Runner.)
  2. Выберите Загрузить в меню с шестеренкой в ​​правом верхнем углу.
  3. Выберите формат файла для загрузки (текстовый файл, CSV, JSON и т. Д.).
  4. Нажмите Открыть в браузере , чтобы увидеть результаты в новом окне браузера, или нажмите Загрузить , чтобы загрузить результаты в файл на вашем компьютере.

    Если вы щелкните Открыть в браузере или Загрузить , Looker повторно выполнит запрос, а затем выполнит загрузку.

Для диалектов SQL, поддерживающих потоковую передачу, опция SQL Runner Download загрузит весь набор результатов.Для диалектов SQL, которые не поддерживают потоковую передачу, опция SQL Runner Download загрузит только те строки запроса, которые показаны в разделе Results (до 5000 строк).

Копирование значений столбца

Вы можете скопировать значения столбцов из раздела Results в SQL Runner. Щелкните значок шестеренки столбца, чтобы скопировать значения в буфер обмена. Оттуда вы можете вставить значения столбца в текстовый файл, документ Excel или другое место.

Если ваш администратор Looker включил функцию SQL Runner Vis Labs, у вас также есть другие параметры в меню шестеренки столбца:

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

Из SQL Runner вы можете быстро получить представление о данных, создав «на лету» исследование для запроса SQL или таблицы базы данных. Вы можете использовать Looker Explore для выбора полей, добавления фильтров, визуализации результатов и создания SQL-запросов.

Есть два способа открыть "На лету" из SQL Runner:

  • Изучение результатов запроса SQL Runner
  • Изучение из списка таблиц SQL Runner

Изучение результатов запроса SQL Runner

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

Если ваш администратор Looker включил функцию SQL Runner Vis Labs, вы можете создавать визуализации непосредственно в SQL Runner. {{/ ibox}}

  1. Используйте SQL Runner, чтобы создать SQL-запрос, который вы хотите использовать.
  2. Нажмите Изучите в меню с изображением шестеренки в правом верхнем углу. Это приведет вас к новому обзору, где вы сможете исследовать SQL-запрос, как если бы это была сохраненная таблица в вашей модели.
  3. Вы можете скопировать URL-адрес этого исследования и поделиться им.
  4. Если вы хотите добавить этот запрос в качестве производной таблицы в свой проект прямо отсюда, щелкните Добавить представление в проект .

Создание настраиваемых полей при исследовании в SQL Runner

Если у вас есть доступ к функции настраиваемых полей, вы можете использовать настраиваемые поля для визуализации немоделированных полей в SQL Runner. Как описано в предыдущем разделе, щелкните Explore в меню с шестеренкой. Затем в сборщике полей:

Изучение таблицы, указанной в SQL Runner

Используйте опцию Explore Table на вкладке Database , чтобы создать на лету Explore для любой таблицы в соединении.Это позволяет использовать Looker для таблицы до ее моделирования, исследуя таблицу так же, как представление LookML.

Открыв исследование для таблицы, вы можете решить, добавлять ли таблицу в свой проект. Вы также можете использовать вкладку SQL в Explore, чтобы просмотреть SQL-запросы, которые Looker отправляет в базу данных, а затем использовать кнопку Open in SQL Runner , чтобы вернуть запрос в SQL Runner.

  1. Щелкните вкладку База данных .
  2. В SQL Runner щелкните шестеренку для таблицы и выберите Explore Table .
  3. Looker создает временную модель с представлением для таблицы, а затем отображает окно просмотра.
  4. Looker предоставляет поле измерения для каждого столбца в таблице. (Таким же образом Looker создает модель в начале проекта.)
  5. Looker автоматически включает таймфреймы для любых полей даты.
  6. Looker также включает счетчик.

При использовании опции Explore Table нет файла LookML, связанного с Explore - это просто просмотр таблицы «на лету».

SQL Runner также является полезным инструментом для проверки ошибок SQL в запросах.

Выделение ошибки SQL Runner

SQL Runner выделяет расположение ошибок в команде SQL и включает положение ошибки в сообщении об ошибке:

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

SQL Runner также выделяет местоположение первой синтаксической ошибки в команде SQL, подчеркивая ее красным цветом и отмечая строку знаком «x». Наведите указатель мыши на «x», чтобы увидеть дополнительную информацию об ошибке. После устранения этой проблемы нажмите Выполнить , чтобы узнать, есть ли еще ошибки в запросе.

Использование SQL Runner для проверки ошибок в Explores

Если вы столкнулись с синтаксическими ошибками SQL в Исследовании, вы можете использовать SQL Runner, чтобы определить местонахождение ошибки и тип ошибки, например орфографические ошибки или пропущенные команды.

  1. В обзоре щелкните вкладку SQL на панели данных.
  2. Щелкните Открыть в SQL Runner , чтобы открыть запрос в SQL Runner.

Это копирует сгенерированный SQL Explorer в SQL Runner. Как показано выше, SQL Runner выделяет местоположение ошибки в команде SQL и включает положение ошибки в сообщении об ошибке. Затем вы можете внести изменения и повторно запустить запрос в SQL Runner, пока не исправите ошибки.

Использование SQL Runner для проверки ошибок в производных таблицах

Информацию об использовании SQL Runner для проверки ошибок SQL в производных таблицах см. В статье Использование SQL Runner для тестирования производных таблиц Looker Community.

Создание запроса с использованием CREATE в режиме SQL

SQL - это комплексный способ запроса вашей базы данных. Используйте эти разделы, чтобы получить уверенность в использовании:

  • Шаблон SQL

  • Основные ключевые слова SQL в простом запросе

  • CA Dataquery

    для решения бизнес-задачи

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

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

CA Dataquery

EDITOR. В них входят:
  • Краткий обзор панели РЕДАКТОР

  • Советы по планированию запроса

  • Пример типичной бизнес-ситуации и образец запроса, который соответствует потребности

  • Учебное пособие по созданию образца запроса

  • Информация об определении формата отчета по умолчанию для использования при каждом выполнении запроса

В этих разделах содержится достаточно информации, чтобы вы могли начать создавать свои собственные запросы SQL в РЕДАКТОРЕ.Они также предоставляют введение в некоторые расширенные возможности запросов SQL и определение формата вывода запроса.

На этой странице обсуждаются следующие темы:

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

CA Dataquery

EDITOR, доступный с функцией CREATE. И вы можете получить доступ к РЕДАКТОРУ любым из способов, описанных в разделе Доступ к РЕДАКТОРУ. Однако, прежде чем вы сделаете что-либо из этого, вы должны иметь общее представление о том, чего вы хотите достичь, прежде чем вы начнете.

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

  • Какие данные сообщать.

  • Идентификаторы авторизации для таблиц, в которых будет выполняться поиск, если таблицы не идентифицированы по вашему идентификатору авторизации.

  • Следует ли выбирать только определенные строки данных (например, только данные для определенных почтовых индексов).

Вам необходимо решить следующее:

  • Какие таблицы базы данных содержат нужные вам данные.

  • Следует ли искать более чем в одной таблице.

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

CA Dataquery

может предоставить онлайн-информацию о таблицах и столбцах для идентификатора авторизации SQL, отображаемого на панели ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ.(Для получения дополнительной информации см. Управление профилем пользователя CA Dataquery.) Администратор

CA Dataquery

может получить отчет

CA Datacom® Datadictionary ™

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

При написании запроса или диалогового окна существуют определенные ограничения на то, что вы можете делать. Вам не следует:

  • Используйте слова, значение которых может быть неправильно истолковано

    CA Dataquery

    .
  • Превышено ограничение строки для конкретного сайта панели РЕДАКТОР.(Пределы строк зависят от определенных параметров установки. Информацию об ограничениях сайта можно получить у администратора

    CA Dataquery

    .)
  • Присоединитесь к более чем десяти таблицам базы данных или таблицам результатов.

Базовая процедура создания запроса

На следующей диаграмме показаны этапы создания запроса с помощью функции СОЗДАТЬ в главном меню. В нем представлен обзор шагов, описанных в следующем разделе. По мере накопления опыта вы можете изменить порядок некоторых шагов.

3

Отобразите шаблон SQL и выберите предложения, необходимые для запроса, чтобы создать настраиваемый шаблон. Подробности см. В разделе Шаг 3. Использование шаблона SQL.

4

Отредактируйте шаблон запроса, который вы create Используйте строковые команды и клавиши клавиатуры для изменения предложений шаблона при создании запроса. См. Подробности с 1 по Edit ORDER BY Clause.

6

Сохраните запрос

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

7

Заполните панель ONLINE EXECUTION и определите отчет, который вы хотите, если вы не хотите использовать значения по умолчанию . Затем выполните запрос. См. Шаг 7: Форматирование отчета и Выполнение запроса для получения дополнительной информации.

Написание образца SQL-запроса

Используйте этот раздел, чтобы получить общее представление о том, как работает функция CREATE. Когда вы закончите, вы поймете, как создать базовый запрос с помощью РЕДАКТОРА, а также узнаете некоторые основные факты о

CA Dataquery

.

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

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

Предположим, вы менеджер по продажам и хотите увеличить количество заказов от существующих клиентов. Вы рассматриваете идею предложения скидок на заказы, превышающие 1000 долларов США. Вы хотите знать, сколько таких заказов было размещено в 2010 году. Имея эту информацию, вы можете оценить, во что обойдется компания.Вы также хотите знать, какие продавцы получили эти заказы. Вы хотите встретиться с ними, чтобы обсудить идею.

Ниже описаны общие этапы решения предыдущей бизнес-проблемы.

  • Определить потребность

    Создайте запрос, который создает отчет, содержащий эту информацию:
    • Какие клиенты разместили заказы на сумму более 1000 долларов в 1987 году?

    • Какие продавцы должны присутствовать на встрече?

  • Визуализировать отчет

    Определите, как должен выглядеть отчет.
  • Определить таблицы

    Узнайте, какие таблицы содержат необходимые данные.
  • Определить столбцы

    Узнайте, на какие столбцы следует ссылаться, чтобы найти данные.
  • Решить

    Определите, может ли существующий запрос или диалоговое окно создать отчет. Если нет, решите, хотите ли вы скопировать и отредактировать существующий запрос (или диалоговое окно) или написать свой собственный. Если вы хотите написать свой собственный, решите, использовать ли GUIDE, CREATE или DRAW.Если существующий запрос был создан вами, вы можете обновить его. Обязательно внесите соответствующие изменения в формат отчета.
  • Начать создание запроса

    Выберите СОЗДАТЬ в главном меню.
  • Определить отчет

    Доступ к панели ОНЛАЙН ИСПОЛНЕНИЕ для созданного запроса. Выберите ФОРМАТИРОВАТЬ ОТЧЕТ и введите параметры печати. Эти спецификации печати сохраняются и становятся значениями по умолчанию для запроса при каждом его выполнении.

Ниже приведен пример того, как должен выглядеть ваш отчет:

 

=> 21.06.11 15:25:00 REP_ID ORD_AMT NAME -------- ------- ------------------------------ 34222 1021.89 DRISCOLL CO. 34222 1919.11 DRISCOLL CO. 34222 2001.95 ПРИБОРЫ FOX И СЫН 34222 2112.00 INGERSOLL DIE CO. 35111 1311.00 АБЕРНАТИЧЕСКАЯ САНТЕХНИКА 35111 1578.90 WILSON TOOLS CO 44123 1477.00 AUSTIN TOOLS CO. 44123 1230.00 МАКСВЕЛЛ ИНСТРУМЕНТЫ CO 44222 7329.34 BENTLEY ПРОИЗВОДСТВО 44222 1778.00 ФАРБЕРНЫЙ ИНСТРУМЕНТ И ПЛАСТИНА

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

REP_ID

Отсортируйте соответствующие данные, найденные по идентификатору продавца, и распечатайте этот идентификатор в качестве первого столбца в отчете.

ORD_AMT

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

ИМЯ

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

Создание образца запроса

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

 

=> -------------------------------------------------- ------------------------ DQD10 ЗАПРОС: ТЕКУЩАЯ ТАБЛИЦА РЕДАКТОРА: ________________________________ -------------------------------------------------- ----------------------------- ИМЯ: ТИП SQLBASIC: СОСТОЯНИЕ SQL: ПУБЛИЧНЫЙ ОПИСАНИЕ: ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 ....+ .... 5 .... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ GLS_CUST_TABLE, GLS_ACCTS_TABLE 03 ГДЕ GLS_CUST_TABLE.CUST_ID = GLS_ACCTS_TABLE.CUST_ID 04 И GLS_ACCTS_TABLE.ORD_AMT> = 01000.00 05 ЗАКАЗ ПО REP_ID, ORD_AMT, NAME .. =========================== ВНИЗ ==================== ============== -------------------------------------------------- ----------------------------- ПОМОЩЬ ВОЗВРАТ ДИСПЛЕЙНЫЕ КОЛОНКИ ДИСПЛЕЙНЫЕ КЛАВИШИ ОТОБРАЖАТЬ ВСЕ СПИСОК ТАБЛИЦ НАЗАД ВПЕРЕД ШАБЛОН ПРОВЕРЬТЕ ВПРАВО / ВЛЕВО РЕЖИМ ПРОЦЕССА

В следующей таблице дается краткое описание четырех основных предложений SQL.

SELECT

Имена столбцов

Имена столбцов, содержащих данные, необходимые для отчета. Задает порядок выходных столбцов.

ИЗ

Имена таблиц

Задает имена таблиц, в которых находятся столбцы, указанные в предложении SELECT.

Условия поиска

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

ЗАКАЗАТЬ ПО

Имена столбцов

Задает порядок сортировки данных в том виде, в каком они отображаются в отчете.

CA Dataquery

позволяет использовать ряд ключевых слов SQL:
  • ALTER

  • КОММЕНТАРИЙ

  • СОЗДАТЬ ИНДЕКС

  • СОЗДАТЬ СИНОНИМ

  • СОЗДАТЬ ТАБЛИЦУ

  • СОЗДАТЬ ВИД

  • УДАЛИТЬ ВИД

  • УДАЛИТЬ ВИД

  • УДАЛИТЬ ВИД

  • УДАЛИТЬ ВИД

  • DROP VIEW

  • GRANT

  • INSERT

  • REVOKE

  • SELECT

  • UPDATE

Отчет, необходимый для этого примера, представляет собой отчет по умолчанию, созданный

CA Dataquery

, и дополнительное форматирование не требуется.Если для решения бизнеса требуются промежуточные итоги, контрольные перерывы или математические функции, эти спецификации могут быть сделаны во время выполнения. Подробности см. В разделе «Шаг 2: определение отчета в режиме SQL».

Шаг 1 Отображение панели РЕДАКТОРА

В этом разделе описывается, как отобразить панель РЕДАКТОРА.

Выберите СОЗДАТЬ в главном меню, чтобы отобразить

CA Dataquery

EDITOR.

Вы можете изменить существующий запрос вместо того, чтобы начинать с пустой панели РЕДАКТОР. Чтобы отобразить запрос, введите команду EDIT, а затем имя запроса в командной строке.При изменении записи в поле NAME это новый запрос, созданный вами. Затем вы можете изменить любую часть запроса и сохранить ее как свою.

Вы также можете ввести команду DRAW и имя таблицы в командной строке, нажать Enter и увидеть отображение панели EDITOR, содержащей простой запрос с предложением SELECT, в котором перечислены все имена столбцов, и предложением FROM с именем таблицы. Затем вы можете отредактировать основной запрос. См. Подробности в разделе «Выбор метода создания запроса».

Шаг 2 Определите запрос

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

После того, как вы выберете СОЗДАТЬ в главном меню, вы увидите следующую панель РЕДАКТОРА (DQD10).

 

=> ПАНЕЛЬ СОЗДАНИЯ -------------------------------------------------- ------------------------ DQD10 ЗАПРОС: ТЕКУЩАЯ ТАБЛИЦА РЕДАКТОРА: ________________________________ -------------------------------------------------- ----------------------------- ИМЯ: _______________ ТИП: ______ СТАТУС: _______ ОПИСАНИЕ: ___________________________________________________________ .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + .... 5. ... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== .. .. .. .. .. .. .. .. .. =========================== ВНИЗ ====================== ============ -------------------------------------------------- ----------------------------- ПОМОЩЬ ВОЗВРАТ ДИСПЛЕЙНЫЕ КОЛОНКИ ДИСПЛЕЙНЫЕ КЛАВИШИ ОТОБРАЖАТЬ ВСЕ СПИСОК ТАБЛИЦ НАЗАД ВПЕРЕД ШАБЛОН ПРОВЕРЬТЕ ВПРАВО / ВЛЕВО РЕЖИМ ПРОЦЕССА

Вам не нужно называть запрос, пока вы его не сохраните.Однако, если вы хотите проверить или выполнить его, вы должны указать ему тип. С таким же успехом вы можете определить запрос в качестве первого шага.

Вот что вам следует знать об идентификации запроса:

  • НАИМЕНОВАНИЕ:

    Имя запроса должно быть уникальным в пределах назначенной ему библиотеки и должно состоять из одного слова, содержащего от 1 до 15 буквенных символов, чисел, подчеркиваний или специальных символов. Обязательно ознакомьтесь с разделом "Ограничения имен", чтобы ознакомиться с важными ограничениями для имен.
  • ТИП:

    Допустимые записи: QUERY или DIALOG.Диалог позволяет пользователям заменять переменные в запросе. Для получения информации об использовании

    CA Dataquery

    EDITOR для создания диалогов см..
  • СТАТУС:

    Допустимые записи: ЧАСТНАЯ и ОБЩЕСТВЕННАЯ. Вы можете обновлять и удалять запросы, сохраненные в вашей частной библиотеке. Если вы назначаете запрос публичной библиотеке, вы не можете изменить или удалить его после сохранения запроса, если ваш сайт не разрешает автору публичного запроса изменять его. Обратитесь к администратору

    CA Dataquery

    для получения дополнительной информации.

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

  • ОПИСАНИЕ:

    Описание должно указывать на цель запроса и отмечать все, что делает его уникальным.Его длина не может превышать 60 символов.

Используйте клавишу Tab для перемещения курсора по очереди к каждому полю: ИМЯ, ТИП, СОСТОЯНИЕ и ОПИСАНИЕ. На следующей диаграмме показаны соответствующие записи для образца запроса.

ИМЯ

SQLSAMPLE01

Имя указывает, что это запрос SQL и что это первый созданный образец запроса.

ТИП

ЗАПРОС

Не требует пояснений.

СТАТУС

ОБЩЕСТВЕННЫЙ

Запрос должен быть доступен другим пользователям.

ОПИСАНИЕ

ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА

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

На следующем рисунке показаны заполненные поля идентификации для образца запроса.

 

ЗАПРОС ДАННЫХ: ТЕКУЩАЯ ТАБЛИЦА РЕДАКТОРА: ________________________________ -------------------------------------------------- ----------------------------- ИМЯ: SQLSAMPLE01____ ТИП: ЗАПРОС_ СТАТУС: ПУБЛИКА_ ОПИСАНИЕ: ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА _________________________________________ .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + .... 5. ... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ======================

В описание можно включить дополнительную информацию о самом запросе. Например, вы можете перечислить отчетные столбцы или назвать таблицы, к которым осуществляется доступ, в описании запроса. Вы также можете сделать свои запросы ЧАСТНЫМИ, пока не будете уверены, что хотите поделиться ими с другими пользователями.

Шаг 3 Используйте шаблон SQL

В этом разделе описывается, как отобразить шаблон SQL и скопировать из него синтаксис на панель РЕДАКТОР, чтобы создать настраиваемый шаблон для запроса.После отображения панели РЕДАКТОР в режиме создания и определения нового запроса вы можете приступить к созданию запроса.

На этом шаге вы узнаете, как отобразить шаблон SQL и скопировать из него необходимый синтаксис на панель РЕДАКТОРА.

Ниже описаны шаги, необходимые для отображения и копирования синтаксиса на панель РЕДАКТОРА в режиме создания.

  • Шаг 1

    На панели РЕДАКТОР (режим создания) переместите курсор в первую позицию в области ввода текста.
  • Шаг 3

    Просмотрите панель шаблона запроса (DQD50), показанную ниже:
 

=> Поместите непустое поле рядом с каждым утверждением, которое должно быть включено в запрос. -------------------------------------------------- ------------------------ DQD50 ЗАПРОС ДАННЫХ: ШАБЛОН ЗАПРОСА -------------------------------------------------- ----------------------------- Слова в нижнем регистре представляют записи, которые должен быть заменен пользователем. Скобки указывают на необязательные записи: их можно включить, удалив только круглые скобки или удалить, удалив как круглые скобки, так и данные.-------------------------------------------------- ----------------------------- _ ВЫБРАТЬ столбец1, столбец2, счетчик (столбец3) _ ИЗ таблицы1, таблицы2 _ ГДЕ table1.column1 = table2.column2 и column3> 0 _ ГРУППА ПО столбцу 1, столбцу 2 _ ORDER BY column1 -------------------------------------------------- ----------------------------- ПОМОЩЬ ВОЗВРАТ НЕ ИСПОЛЬЗУЕТСЯ НЕ ИСПОЛЬЗУЕТСЯ НЕ ИСПОЛЬЗУЕТСЯ НЕ ИСПОЛЬЗУЕТСЯ НАЗАД ВПЕРЕД

  • Шаг 4

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

В следующем примере показано, как выглядит панель РЕДАКТОР (DQD10) при копировании синтаксиса с панели «Шаблон SQL».

 

=> -------------------------------------------------- ------------------------ DQD10 ЗАПРОС: ТЕКУЩАЯ ТАБЛИЦА РЕДАКТОРА: ________________________________ -------------------------------------------------- ----------------------------- ИМЯ: SQLSAMPLE01 ТИП: СОСТОЯНИЕ SQL: ПУБЛИЧНЫЙ ОПИСАНИЕ: ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА __________________________________________ .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + .... 5. ... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ столбец1, столбец2, счетчик (столбец3) 02 ИЗ table1, table2 03 ГДЕ table1.column1 = table2.column2 и column3> 0 04 ORDER BY column1 .. =========================== ВНИЗ ==================== ============== -------------------------------------------------- ----------------------------- ПОМОЩЬ ВОЗВРАТ ДИСПЛЕЙНЫЕ КОЛОНКИ ДИСПЛЕЙНЫЕ КЛАВИШИ ОТОБРАЖАТЬ ВСЕ СПИСОК ТАБЛИЦ НАЗАД ВПЕРЕД ШАБЛОН ПРОВЕРЬТЕ ВПРАВО / ВЛЕВО РЕЖИМ ПРОЦЕССА

Ниже приводится руководство по другим вещам, которые вы можете делать при использовании шаблона SQL.

  • Посмотрите на синтаксис

    Вы можете использовать шаблон только как панель справки, ничего не вводя в поля шаблона.
  • Копировать по одному пункту за раз

    Вы можете обращаться к шаблону столько раз, сколько захотите, и копировать каждое предложение отдельно, где и когда вы решите, что оно вам нужно.
  • Не использовать шаблон

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

Шаг 4 Использование ключевых слов SQL

Когда пункты панели «Шаблон SQL», необходимые для запроса, копируются в панель «РЕДАКТОР», существует шаблон для нового запроса. Следующим шагом является использование РЕДАКТОРА для изменения шаблона и ввода определенных имен таблиц и столбцов для завершения написания запроса.

В оставшихся разделах этого шага обсуждается создание предложений, выбранных для примера запроса: SELECT, FROM, WHERE и ORDER BY. Информация, представленная в руководстве, обеспечивает хорошую основу для создания простых запросов.

Предложение GROUP BY создает результаты запроса, где каждая строка в таблице результатов состоит из результатов математических функций, примененных к группе данных. GROUP BY требуется только в том случае, если вы применяете математические функции к одним столбцам, а не к другим. Определения формата отчета, которые создаются во время выполнения запроса, могут предоставлять результаты, аналогичные GROUP BY, а также предоставлять подробные строки в выходных данных запроса; поэтому пример запроса и этот раздел не ссылаются на GROUP BY.

Ниже приводится общая информация о написании запросов.

  • Правила размещения:

    Неважно, сколько пробелов вы вводите между словами в предложении. Также не имеет значения, хотите ли вы вводить все предложения в одной строке (если они подходят) или расположить их в виде списка. Примеры в этом руководстве показывают форматированные запросы с одним пробелом между каждым словом, потому что их легче читать большинству людей.
  • Правила заказа:

    Порядок, в котором вы используете ключевые слова SQL, важен.Если вы не соблюдаете соглашения об упорядочивании, запрос не будет понят

    CA Dataquery

    или

    CA Datacom® / DB

    . Для предложений SQL используйте этот порядок:
    1. ВЫБРАТЬ

    2. ИЗ

    3. ГДЕ

    4. ГРУППА ПО

    5. ЗАКАЗАТЬ ПО

Предложение SELECT сообщает

CA Dataquery

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

.... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + ... .5 .... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ столбец1, столбец2, счетчик (столбец3) 02 ИЗ table1, table2 03 ГДЕ table1.column1 = table2.column2 и column3> 0 04 ORDER BY column1 .. =========================== ВНИЗ ==================== ==============

В следующих таблицах представлена ​​основная информация об операторах SELECT и определениях предложений SELECT, а также правилах предложений SELECT.

Ниже приводится общая информация о ключевом слове SELECT.

  • Операторы SELECT

    Запросы SQL всегда начинаются с оператора SELECT. Первое предложение оператора SELECT - это предложение SELECT. Оператор SELECT также может содержать дополнительные предложения, начиная с ключевых слов FROM, WHERE, GROUP BY и ORDER BY.
  • Назначение статьи SELECT

    Предложение SELECT называет столбцы, содержащие данные, которые должны появиться в отчете.

Ниже перечислены основные правила для предложений SELECT.

  • Пунктуация

    После слова SELECT ставьте пробел и название столбца. При необходимости добавьте дополнительные имена столбцов, разделив их запятыми. Пример: ВЫБРАТЬ column1, column2, column3, column4
  • ID таблицы

    Нет необходимости прикреплять идентификатор таблицы к имени столбца, если у вас нет повторяющихся имен столбцов (в нескольких таблицах) и вы хотите распечатать только одно из них.Чтобы прикрепить идентификатор таблицы, введите имя таблицы, точку и имя столбца как одно слово. Пример: ВЫБРАТЬ column1, column2, table2.column3, column4
  • Дублирующиеся строки

    Если запрос обнаруживает повторяющиеся строки и вам нужна только одна из них в таблице результатов, после слова SELECT следует слово DISTINCT перед перечислением имен столбцов. Пробел должен предшествовать DISTINCT и следовать за ним. Пример: SELECT DISTINCT column1, column2, column3
  • Вернуть все строки

    Чтобы явно указать, что все найденные строки должны быть включены в отчет, вставьте слово ALL между SELECT и именем первого столбца.В начале и после ВСЕ с пробелом. Пример: ВЫБРАТЬ ВСЕ столбец1, столбец2, столбец3
  • Выбрать все столбцы

    Чтобы выбрать данные из всех столбцов в ссылочных таблицах в отчете, используйте звездочку (*) вместо перечисления имен столбцов. Пример: ВЫБЕРИТЕ *
  • Столбцы отчета о заказе

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

Это шаги для редактирования предложения SELECT в соответствии с запросом:

  • Шаг 1

    Переместите курсор на букву c в слове column1. Нажмите клавишу EOF или используйте клавишу Delete, чтобы удалить оставшуюся часть строки.
  • Шаг 2

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

    REP_ID, ORD_AMT, NAME

Вот часть панели, показывающая, как теперь выглядит предложение SELECT.

 

ОПИСАНИЕ: ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА __________________________________________ .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + .... 5 .... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ table1, table2

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

  • Используйте онлайн-списки таблиц и столбцов.

    Вы можете отобразить список таблиц для вашего текущего идентификатора авторизации, если курсор находится в текстовой области. Вы также можете увидеть имена столбцов для любой из перечисленных таблиц. Вы можете использовать списки для информации или скопировать имена из них в текстовую область в точке курсора. См. Раздел Отображение имен и структур баз данных.
  • Используйте поле ТЕКУЩАЯ ТАБЛИЦА.

    Если поле ТЕКУЩАЯ ТАБЛИЦА содержит имя, вы можете отображать информацию о столбцах в этой таблице при создании запроса.Есть два способа получить имя в поле ТЕКУЩАЯ ТАБЛИЦА. Вы можете ввести его или поместить курсор в область ввода текста, нажать СПИСОК ТАБЛИЦ и выбрать имя таблицы, которое будет вставлено как в область ввода текста, так и в поле ТЕКУЩАЯ ТАБЛИЦА. См. Раздел Отображение имен и структур баз данных.
  • Изменить идентификатор авторизации.

    Если вы перейдете на другой известный идентификатор авторизации на панели «ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ» (команда «ПРОФИЛЬ»), вы сможете отображать списки таблиц и столбцов в других схемах.
  • Задайте математические функции для столбцов.

    Вы можете запросить, чтобы

    CA Dataquery

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

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

CA Dataquery

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

.. ================================ TOP ============= ======================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ table1, table2 03 ГДЕ table1.column1 = table2.column2 и column3> 0 04 ORDER BY column1 .. =========================== ВНИЗ ====================== ============

Ниже перечислены правила, касающиеся основных предложений FROM.

  • ИЗ Назначение статьи

    Предложение FROM называет таблицы, содержащие данные, которые должны быть прочитаны при создании отчета.
  • Пунктуация

    После слова FROM поставьте пробел и укажите имя таблицы. При необходимости добавьте дополнительные имена таблиц через запятую. Примеры: ИЗ table1, table2, table3, table4 FROM table1, table2, table3, table4
  • Идентификатор авторизации

    Нет необходимости прикреплять идентификатор авторизации к имени таблицы, если он не указан в текущей схеме.Чтобы прикрепить идентификатор авторизации, введите его перед именем таблицы и разделите точкой. Пример: FROM table1, table2, public.table3, table4
  • Порядок имен таблиц

    Порядок, в котором вы перечисляете таблицы в предложении FROM, не имеет значения.
  • Количество названий таблиц

    Вы можете перечислить до десяти имен таблиц в одном предложении FROM. Вы также можете использовать SQL для объединения и присвоения имен таблицам результатов или

    для просмотра

    . Всего можно ссылаться не более чем на десять таблиц, то есть ваше общее количество должно включать количество таблиц, составляющих представление.

Это шаги для редактирования предложения FROM в соответствии с образцом запроса:

  • Шаг 1

    Переместите курсор к букве t в слове table1. Нажмите EOF или используйте клавишу Delete, чтобы удалить оставшуюся часть строки.
  • Шаг 2

    Введите эти символы, начиная с позиции курсора:

    GLS_CUST_TABLE, GLS_ACCTS_TABLE

    Это сообщает

    CA Dataquery

    , что данные для печати в отчете берутся из двух названных таблиц.

Ниже приведен образец части панели, показывающей, как теперь выглядит предложение SELECT:

 

ОПИСАНИЕ: ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА __________________________________________ .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + .... 5 .... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ GLS_CUST_TABLE, GLS_ACCTS_TABLE

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

  • Используйте онлайн-списки таблиц и столбцов.

    Вы можете отобразить список таблиц для вашего текущего идентификатора авторизации, чтобы скопировать нужные имена таблиц прямо в текстовую область. Все, что вам нужно сделать, это поместить курсор в то место, куда вы хотите ввести имя, и нажать LIST TABLES. Из появившегося списка вы выбираете одно или несколько имен таблиц. См. Раздел Отображение имен и структур баз данных.
  • Изменить идентификатор авторизации.

    Если вы перейдете на другой известный идентификатор авторизации на панели «ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ» (команда «ПРОФИЛЬ»), вы сможете отображать списки таблиц в других схемах.
Предложение WHERE сообщает

CA Dataquery

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

.. ================================ TOP ============= ======================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ GLS_CUST_TABLE, GLS_ACCTS_TABLE 03 ГДЕ table1.column1 = table2.column2 и column3> 0 04 ORDER BY column1 .. =========================== ВНИЗ ==================== ==============

Ниже приводится основная информация о назначении пунктов WHERE и правилах их использования. Для комплексного использования существуют дополнительные правила.

  • Назначение

    Цель предложения WHERE:
    • Объединяйте таблицы, называя столбцы, содержащие данные, связанные, как показано оператором сравнения, даже если имена столбцов могут отличаться.

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

  • Расположение

    Предложения WHERE всегда следуют за оператором FROM.
  • Количество пунктов WHERE

    Вы можете использовать несколько предложений WHERE и объединять их с помощью AND, OR и круглых скобок для создания логических выражений.
  • Пунктуация

    После слова WHERE поставьте пробел и предикат.Используйте пробелы между словами и символами в предикате.
  • Основные предикаты

    Базовые предикаты сравнивают два значения и состоят из одного значения, за которым следует оператор сравнения и другое значение. Значение может быть именем столбца или выражением. (Второе значение также может быть SUBSELECT.) Результатом сравнения является либо истина, либо ложь. Если результат верен для данной строки, эта строка выбирается для таблицы результатов. Типы основных предикатов:
    • Объединения на основе логических выражений, включая операторы сравнения, сравнивающие два значения.

    • НЕ предшествует предикату, что означает, что

      CA Dataquery

      должен находить только строки, в которых предикат

      , а не

      найден.
    • Несколько выражений, которые представляют собой смесь вышеперечисленного, связанные с логическими операторами И и ИЛИ. Пример: ГДЕ table1.name-column = table2.name-column И (СУММА> = 100 ИЛИ СУММА OR (CURRENT_DATE_YEAR
  • Основные операторы сравнения предикатов

    Операторы сравнения определяют тип сравнения, которое должно производиться между одним выражением и другим.Допустимые операторы в базовом предикате предложения SQL WHERE:
    • = (Равно)

    • <(Меньше чем)

    • > (Больше чем)

    • <> (Не равно)

    • <= (Меньше или равно)

    • > = (Больше или равно)

    • ¬ = (Не равно)

    • ¬ <(Не меньше)

    • ¬> (Не больше)

  • Выражения

    Выражения могут быть простыми или сложными, с использованием арифметических операторов (+ - / * =) и круглых скобок.Используйте круглые скобки, чтобы указать, какие операции должны выполняться первыми в сложном вычислении (до 5 уровней вложенных выражений).
  • Другие типы предикатов

    Вы можете использовать другие типы предикатов в предложении WHERE:
    • ВСЕ

    • ЛЮБЫЕ

    • МЕЖДУ

    • СУЩЕСТВУЕТ

    • IN

    • КАК

    • NULL

    • 9001

      Это шаги для редактирования предложения WHERE в примере запроса:

      • Шаг 1

        Переместите курсор к букве t в слове table1.столбец1. Нажмите EOF или используйте клавишу Delete, чтобы удалить оставшуюся часть строки.
      • Шаг 2

        Чтобы указать, что столбец CUST_ID в обеих таблицах должен использоваться для объединения таблиц и что должны быть выбраны только строки, в которых ORD_AMT больше 1000 долларов США, введите эти символы, начиная с позиции курсора:

        GLS_CUST_TABLE.CUST_ID = GLS_ACCTS_TABLE.CUST_ID AND ORD_AMT> 1000.00

      Ниже приведен образец части панели, показывающей, как теперь выглядит оператор SELECT:

       

      ОПИСАНИЕ: ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА __________________________________________ .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + .... 5. ... + .... 6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ GLS_CUST_TABLE, GLS_ACCTS_TABLE 03 ГДЕ GLS_CUST_TABLE.CUST_ID = GLS_ACCTS_TABLE.CUST_ID И ORD_AMT> 1000.00

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

      • Объедините более двух таблиц с помощью предложения WHERE.

        Вы можете объединить до десяти таблиц (или таблиц результатов) в свои запросы, используя предложение WHERE.
      • Используйте ключевое слово UNION для объединения таблиц.

        Вы можете создавать более сложные объединения, используя ключевое слово UNION для объединения таблиц результатов, созданных двумя или более операторами SELECT.
      • Используйте различные операторы сравнения.

        Доступны операторы для создания очень специфических условий поиска.
      • Используйте особые условия поиска.

        Специальные ключевые слова, такие как BETWEEN, IN, LIKE и IS NULL, доступны для создания специализированных условий поиска.
      • Используйте круглые скобки.

        Создавайте сложные условия поиска, используя круглые скобки и И и ИЛИ, чтобы написать логическое выражение.
      • Используйте другой запрос в качестве объекта предложения WHERE.

        Например: ВЫБЕРИТЕ * ОТ ОПЛАТЫ, ГДЕ КОЛОНКА = (ВЫБЕРИТЕ * ИЗ PER)
      Предложение ORDER BY сообщает

      CA Dataquery

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

      .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ GLS_CUST_TABLE, GLS_ACCTS_TABLE 03 ГДЕ GLS_CUST_TABLE.CUST_ID = GLS_ACCTS_TABLE.CUST_ID И ORD_AMT> 1000.00 04 ORDER BY column1 .. =========================== ВНИЗ ==================== ==============

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

      Упорядочивание предыдущих строк выборки по ИМЕНИ и ИДЕНТИФИКАТОРУ ЗАКАЗА дает следующие результаты.

      Упорядочивание предыдущих выборочных строк по ORD_ID и NAME дает следующий результат:

      Ниже перечислены основные правила использования ключевого слова ORDER BY.

      • Расположение

        Предложение ORDER BY должно быть последним предложением в запросе SELECT.
      • Срок действия столбцов заказа

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

        Строки сортируются по возрастанию, если иное не указано с ключевым словом DESC для сортировки по убыванию.
      • Пунктуация

        После слов ORDER BY поставьте пробел и укажите одно или несколько имен столбцов. Используйте запятые между именами столбцов.
      • Указать идентификатор таблицы

        Если в запросе объединены две или более таблиц и существует дубликат столбца ORDER BY, прикрепите идентификатор таблицы к имени столбца, чтобы указать, какой столбец будет использоваться при упорядочивании.Пример:

        ЗАКАЗАТЬ ПО ACCT_TABLE.ORDER_DATE, CUST_ID

      Это шаги для редактирования предложения ORDER BY в соответствии с образцом запроса:

      • Шаг 1

        Переместите курсор на букву c в слове column1. Нажмите EOF или используйте клавишу Delete, чтобы удалить оставшуюся часть строки.
      • Шаг 2

        Введите эти символы, начиная с позиции курсора:

        REP_ID, ORD_AMT, NAME

        указать

        CA Dataquery

        , чтобы все строки в отчете были разделены на группы по REP_ID.В каждой группе REP_ID данные должны быть расположены в порядке возрастания по сумме заказа (ORD_AMT). Если существуют повторяющиеся суммы заказа, данные должны быть расположены в порядке возрастания по имени клиента (ИМЯ).

      Ниже приведен образец части панели, показывающей, как теперь выглядит оператор SELECT:

       

      ОПИСАНИЕ: ОБРАЗЕЦ БАЗОВОГО ЗАПРОСА __________________________________________ .... + .... 1 .... + .... 2 .... + .... 3 .... + .... 4 .... + .... 5 .... + ....6 .... + .... 7 .... +. .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ GLS_CUST_TABLE, GLS_ACCTS_TABLE 03 ГДЕ GLS_CUST_TABLE.CUST_ID = GLS_ACCTS_TABLE.CUST_ID И ORD_AMT> 1000.00 04 ORDER BY REP_ID, ORD_AMT, NAME

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

      • Заказ данных отчета по столбцам, которые не печатаются.

        Вы можете сгруппировать данные в отчете в соответствии с данными в столбце, который вам неинтересно видеть в распечатанном виде.Например, вы можете не захотеть видеть одну и ту же дату в каждой строке вывода, даже если вы хотите, чтобы данные были упорядочены по дате. Вы можете использовать столбец даты в предложении ORDER BY, опуская его в предложении SELECT.
      • Изменить порядок столбцов в предложении SELECT.

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

      Шаги 5 и 6 Проверка и сохранение запроса

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

      CA Dataquery

      подтвердил

      запрос.

      После проверки запроса его следует сохранить, если он будет использоваться повторно.

      Ниже приведен пример того, как отображается текстовая область панели РЕДАКТОР после завершения процедур на предыдущем шаге:

       

      .. ================================ TOP =============== ====================== 01 ВЫБРАТЬ REP_ID, ORD_AMT, NAME 02 ИЗ GLS_CUST_TABLE, GLS_ACCTS_TABLE 03 ГДЕ GLS_CUST_TABLE.CUST_ID = GLS_ACCTS_TABLE.CUST_ID И ORD_AMT> 1000.00 04 ORDER BY REP_ID, ORD_AMT, NAME .. =========================== ВНИЗ ==================== ==============

      Ниже приводится информация о процессе проверки.

      • Насколько безопасен мой текущий запрос?

        Запрос находится в активной области запроса до тех пор, пока вы не используете команду или выбор для активации другого запроса. Вам следует сохранить любой запрос, над которым вы, возможно, захотите работать позже или выполнить более одного раза.После сохранения запроса вы можете изменить его и нажать ОБНОВЛЕНИЕ в режиме обработки, чтобы сохранить изменения. Если вы уже создали формат отчета, вы должны определить, нужно ли также изменить формат. Если вы не сохранили запрос, над которым работаете, и покидаете панель РЕДАКТОР для выполнения другой функции, вы можете использовать команду EDIT *, чтобы вызвать его, если другой запрос не был активирован.
      • Сроки?

        Вы можете проверить запрос или диалог в любой момент во время строительства.

        CA Dataquery

        проверяет наличие ошибок, но не проверяет, завершен ли запрос.
      • Что проверяется

        CA Dataquery

        ?

        CA Dataquery

        проверяет, авторизован ли пользователь для выполнения функции, например, SELECT, DROP, CREATE.

        CA Dataquery

        затем передает запрос

        CA Datacom® / DB

        , который проверяет синтаксис. Если обнаружена синтаксическая ошибка,

        CA Dataquery

        отображает сообщение, начинающееся с букв DQ.Вы исправляете ошибку и снова подтверждаете.

        CA Dataquery

        затем передает запрос

        CA Datacom® / DB

        .
      • Что произойдет, если

        CA Datacom® / DB

        обнаружит ошибку?

        CA Datacom® / DB

        возвращает сообщение с кодом, который начинается с

        DQ093

        и описывает ошибку (например,

        DQ093 ILLEGAL TABLE NAME

        ). Вы исправляете ошибку и снова подтверждаете. Обратитесь к администратору

        CA Dataquery

        за помощью в случае возникновения ошибок

        CA Datacom® / DB

        .

      Рассмотрите возможность сохранения и обновления запросов по мере их роста, чтобы не потерять свою работу в случае ошибки.

      Ниже приводится информация о сохранении запросов.

      • Сроки?

        Вы должны сохранить любой запрос, который хотите использовать снова. Если вы создаете сложный запрос и тратите на него много времени, подумайте о его сохранении, прежде чем закончить. Если вы это сделаете, вы можете использовать кнопку UPDATE PF, чтобы сохранить его снова. Вы можете сохранить без предварительной проверки.
      • Что сохраняется?

        CA Dataquery

        сохраняет все, что написано в текстовой области панели РЕДАКТОР. Перед сохранением элемент должен иметь имя, тип (запрос или диалоговое окно) и статус (общедоступный или частный).
      • Что произойдет, если я выйду из панели РЕДАКТОР без сохранения?

        Запрос или диалоговое окно находится в активной области запроса до тех пор, пока вы не получите доступ к другому запросу или диалоговому окну. Вы можете вызвать активный запрос на панель РЕДАКТОРА с помощью команды РЕДАКТИРОВАТЬ *.
      • Как удалить ненужный запрос?

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

      Это шаги для проверки и сохранения образца запроса.

      • Шаг 1

        Нажмите в любом режиме во время отображения запроса.
      • Шаг 2

        Исправьте ошибки, если они есть, и повторяйте шаг 1 до тех пор, пока не появится сообщение ЗАПРОС ПРОВЕРКИ УСПЕШНО.
      • Шаг 3

        В режиме создания нажмите PROCESS MODE, чтобы изменить меню клавиши PF.
      • Шаг 4

        В режиме обработки нажмите СОХРАНИТЬ, если запрос не был сохранен ранее. Если запрос уже существует, нажмите ОБНОВЛЕНИЕ, чтобы сохранить изменения.

      Шаг 7 Форматирование отчета и выполнение запроса

      Меню клавиши PF режима процесса предоставляет клавишу PF для выполнения запроса.Мы рекомендуем выполнять новые запросы и проверять результаты. Вы можете изменить и обновить сохраненный запрос. Инструкции по выполнению отображаются в разделе «Выполнение в режиме SQL».

      Выполнение в режиме SQL позволяет указать спецификации отчета, который вы хотите создать во время выполнения. Эти характеристики:

      • Заголовок

      • Столбец или представление списка

      • Последовательность сортировки столбцов ORDER BY и контрольные разрывы для столбцов ORDER BY

      • Начало новой страницы

      • Порядок столбцов

      • Математические функции AVG , MAX, MIN, SUM, CNT и TOT

      • Обозначения результатов функции

      • Редактировать шаблоны результатов функции

      • Двухстрочные имена столбцов

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

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

      сохраненный

      в первый раз и вводите спецификации, они сохраняются и становятся значениями по умолчанию. Если вы не вводите никаких спецификаций,

      CA Dataquery

      устанавливает значения по умолчанию.

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

      Как запускать SQL-запросы в phpMyAdmin

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

      Что дает мне право на бесплатный перевод?

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

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

      Полные передачи cPanel - это количество включенных передач cPanel в cPanel.

      Макс. Ручные переводы - это максимальное количество ручных переводов, включенных в вашу учетную запись.

      Всего бесплатных переводов - это общее количество веб-сайтов, которые мы переместим для вас.

      Тип счета Всего бесплатных переводов Полный перевод cPanel Макс. Ручные переводы
      ? Общий 1 1 2 1
      ? Торговый посредник 30 30 2 30 1 Безлимитный 2 10 на уровень VPS
      ? Выделенный (базовый) Безлимитный 1 Безлимитный 2 75? ) Безлимит 1 Безлимит 2 100

      1 Хотя мы можем делать неограниченные переводы cPanel на cPanel для вас, в зависимости от вашей учетной записи, у вас будет ограниченное количество ручных переводов .

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

      Несколько примеров: Учетная запись торгового посредника Aluminium включает до 30 бесплатных переводов. Из этих 30 у вас может быть 20 переводов cPanel на cPanel и 10 переводов вручную, или любая комбинация этих двух, что в сумме составляет 30 или меньше веб-сайтов.Другой пример: профессиональный выделенный сервер включает неограниченное количество передач cPanel на cPanel, это означает, что вы можете перенести 150 сайтов (или даже больше). Кроме того, поскольку общее количество переводов не ограничено, вы можете использовать до 100 переводов вручную.

      Для получения дополнительной информации см. Нашу статью о поддержке переводов, свяжитесь с нашим отделом переводов по адресу [email protected] или позвоните по телефону 866.96.GATOR

      8 способов точной настройки ваших SQL-запросов (для производственных баз данных)

      Блог

      SQL - один из самых мощных инструментов обработки данных.В SQL Superstar мы даем вам действенные советы, которые помогут вам максимально эффективно использовать этот универсальный язык и создавать красивые и эффективные запросы.

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

      1. Сначала определите бизнес-требования

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

      • Определите соответствующие заинтересованные стороны. Убедитесь, что все необходимые стороны участвуют в обсуждении, чтобы разработать ваш запрос. Выполняя запросы к производственным базам данных, убедитесь, что команда администраторов баз данных включена.
      • Ориентация на результаты бизнеса. Дайте запросу конкретную и уникальную цель. Налогообложение производственной базы данных за поисковые или дублирующие отчеты - ненужный риск.
      • Обсуждение оптимальных требований. Определите функцию и объем отчета, указав его предполагаемую аудиторию. Это позволит сфокусировать запрос на таблицах с правильным уровнем детализации.
      • Задавайте отличные вопросы. Следуйте пяти буквам W: Кто? Какие? Где? Когда? Почему?
      • Напишите очень конкретные требования и подтвердите их заинтересованным лицам. Производительность производственной базы данных слишком важна, чтобы предъявлять неясные или неоднозначные требования. Убедитесь, что требования как можно более конкретны, и подтвердите их со всеми заинтересованными сторонами, прежде чем запускать запрос.

      2. Поля SELECT вместо использования SELECT *

      При выполнении исследовательских запросов многие разработчики SQL используют SELECT * (читается как «выбрать все») в качестве сокращения для запроса всех доступных данных из таблицы. Однако, если в таблице много полей и много строк, это требует ресурсов базы данных, запрашивая много ненужных данных.

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

      Неэффективно:

      ВЫБРАТЬ *
      ОТ КЛИЕНТОВ

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

      Эффективный:

      ВЫБЕРИТЕ имя, фамилию, адрес, город, штат, почтовый индекс
      ОТ клиентов

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

      Чтобы сохранить индекс всех таблиц и имен полей, запустите запрос из системной таблицы, такой как INFORMATION_SCHEMA или ALL_TAB_COLUMNS (для MS SQL Server прочтите это).

      Начните работу с нашим бесплатным стартовым набором SQL:

      Получить стартовый комплект

      3.Избегайте SELECT DISTINCT

      SELECT DISTINCT - удобный способ удалить дубликаты из запроса. SELECT DISTINCT работает с GROUP , обрабатывая все поля в запросе для создания отличных результатов. Однако для достижения этой цели требуется большая вычислительная мощность. Кроме того, данные могут быть сгруппированы до степени неточности. Чтобы избежать использования SELECT DISTINCT , выберите больше полей для создания уникальных результатов.

      Неэффективно и неточно:

      ВЫБРАТЬ РАЗЛИЧНЫЕ Имя, Фамилия, Состояние
      ОТ клиентов

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

      Эффективно и точно:

      ВЫБЕРИТЕ имя, фамилию, адрес, город, штат, почтовый индекс
      ОТ клиентов

      При добавлении дополнительных полей были возвращены недублированные записи без использования SELECT DISTINCT. База данных не должна группировать какие-либо поля, и количество записей является точным.


      См. Sisense в действии:

      Изучите приборную панель

      4. Создание объединений с помощью INNER JOIN (не WHERE)

      Некоторые разработчики SQL предпочитают создавать соединения с помощью предложений WHERE , например следующего:

      ВЫБРАТЬ Customers.CustomerID, Customers.Name, Sales.LastSaleDate
      FROM Customers, Sales
      WHERE Customers.CustomerID = Sales.CustomerID

      Этот тип соединения создает декартово соединение, также называемое декартовым произведением или CROSS JOIN .

      В декартовом соединении создаются все возможные комбинации переменных. В этом примере, если у нас было 1000 клиентов с общим объемом продаж 1000, запрос сначала сгенерировал бы 1000000 результатов, а затем отфильтровал бы 1000 записей, в которых CustomerID правильно соединен. Это неэффективное использование ресурсов базы данных, поскольку база данных выполнила в 100 раз больше работы, чем требовалось. Декартовы соединения особенно проблематичны в крупномасштабных базах данных, потому что декартово соединение двух больших таблиц может дать миллиарды или триллионы результатов.

      Чтобы предотвратить создание декартова соединения, используйте вместо этого INNER JOIN :

      ВЫБРАТЬ Customers.CustomerID, Customers.Name, Sales.LastSaleDate
      FROM Customers
      INNER JOIN Sales
      ON Customers.CustomerID = Sales.CustomerID

      База данных создаст только 1000 желаемых записей, где CustomerID равен.

      Некоторые СУБД могут распознавать WHERE и вместо этого автоматически запускать их как INNER JOIN s.В этих СУБД не будет разницы в производительности между WHERE join и INNER JOIN . Однако INNER JOIN распознается всеми системами СУБД. Ваш администратор базы данных посоветует вам, что лучше всего подходит для вашей среды.

      5. Используйте WHERE вместо HAVING для определения фильтров.

      Цель эффективного запроса - извлечь из базы данных только необходимые записи. Согласно порядку операций SQL, операторы HAVING вычисляются после операторов WHERE.Если целью является фильтрация запроса на основе условий, инструкция WHERE более эффективна.

      Например, предположим, что в 2016 году было совершено 200 продаж, и мы хотим запросить количество продаж на одного покупателя в 2016 году.

      ВЫБЕРИТЕ Customers.CustomerID, Customers.Name, Count (Sales.SalesID)
      FROM Customers
      INNER JOIN Sales
      ON Customers.CustomerID = Sales.CustomerID
      GROUP BY Customers.CustomerID, Customers.Name
      HAVING Sales.LastSaleDate МЕЖДУ № 1/1/2016 № И № 31/12/2016 №

      Этот запрос извлечет 1000 записей о продажах из таблицы «Продажи», затем отфильтрует 200 записей, созданных в 2016 году, и, наконец, посчитает записи в наборе данных.

      Для сравнения: WHERE предложения ограничивают количество извлекаемых записей:

      ВЫБЕРИТЕ Customers.CustomerID, Customers.Name, Count (Sales.SalesID)
      FROM Customers
      INNER JOIN Sales
      ON Customers.CustomerID = Sales.CustomerID
      ГДЕ Sales.LastSaleDate МЕЖДУ № 1/1/2016 № И № 31/12/2016 №
      GROUP BY Customers.CustomerID, Customers.Name

      Этот запрос извлечет 200 записей за 2016 год, а затем посчитает записи в наборе данных. Первый шаг в предложении HAVING полностью исключен.

      HAVING следует использовать только при фильтрации по агрегированному полю. В приведенном выше запросе мы могли дополнительно отфильтровать клиентов с более чем 5 продажами с помощью оператора HAVING.

      ВЫБРАТЬ Customers.CustomerID, Customers.Name, Count (Sales.SalesID)
      FROM Customers
      INNER JOIN Продажи
      ON Customers.CustomerID = Sales.CustomerID
      ГДЕ Sales.LastSaleDate МЕЖДУ № 1/1/2016 № И № 12 / 31/2016 #
      ГРУППА ПО Customers.CustomerID, Customers.Name
      HAVING Count (Sales.SalesID)> 5

      >> Бесплатный стартовый комплект: Начните сегодня с нашего бесплатного стартового набора SQL

      6. Используйте подстановочные знаки только в конце фразы

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

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

      Рассмотрим этот запрос, чтобы получить города, начинающиеся с "Char":

      ВЫБРАТЬ ГОРОД ИЗ клиентов
      ГДЕ Город КАК "% Char%"

      Этот запрос получит ожидаемые результаты для Char leston, Char lotte и Char lton.Однако он также даст неожиданные результаты, такие как Cape Char les, Crab Or char d и Rich ardson.

      Более эффективный запрос:

      ВЫБРАТЬ Город ИЗ клиентов
      ГДЕ Город КАК "Char%"

      Этот запрос извлечет только ожидаемые результаты для Char leston, Char lotte и Char lton.

      7. Используйте LIMIT для выборки результатов запроса

      Перед первым запуском запроса убедитесь, что результаты будут желательными и значимыми, используя оператор LIMIT .(В некоторых СУБД слово TOP используется как синоним LIMIT.) Оператор LIMIT возвращает только указанное количество записей. Использование оператора LIMIT предотвращает обложение производственной базы данных большим запросом только для того, чтобы узнать, что запрос нуждается в редактировании или уточнении.

      В приведенном выше запросе на продажу 2016 года мы исследуем ограничение в 10 записей:

      ВЫБЕРИТЕ Customers.CustomerID, Customers.Name, Count (Sales.SalesID)
      FROM Customers
      INNER JOIN Sales
      ON Customers.CustomerID = Sales.CustomerID
      ГДЕ Sales.LastSaleDate МЕЖДУ №1 / 1/2016 # И № 31/12/2016 #
      ГРУППА ПО Customers.CustomerID, Customers.Name
      LIMIT 10

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

      8. Выполняйте запрос в нерабочие часы

      Чтобы свести к минимуму влияние ваших аналитических запросов на производственную базу данных, поговорите с администратором баз данных о планировании выполнения запроса в непиковое время. Запрос должен выполняться, когда количество одновременных пользователей достигает минимального количества, которое обычно приходится на середину ночи (3-5 a.м.).

      Чем больше в вашем запросе следующих критериев, тем больше вероятность того, что он будет выполняться ночью:

      • Выбор из больших таблиц (> 1000000 записей)
      • Декартовы соединения или CROSS JOINs
      • Циклические операторы
      • Операторы SELECT DISTINCT
      • Вложенные подзапросы
      • Поиск по шаблонам в длинных текстовых или мемо-полях
      • Множественные запросы схемы

      Запрос уверенно

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