Запросы в sql примеры: SELECT SQL — Примеры запросов SELECT в СУБД MySQL, Oracle, Access

Содержание

Сложные SQL-запросы

Сложные SQL-запросы Пожалуйста, включите JavaScript в браузере!

Сложные SQL-запросы

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

Чтобы сформировать SQL-запрос вручную:

  1. Перейдите в раздел События веб-интерфейса KUMA.

    Откроется форма с полем ввода.

  2. Введите SQL-запрос в поле ввода.
  3. Нажмите на кнопку .

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

Поддерживаемые функции и операторы

  • SELECT – поля событий, которые следует возвращать.

    Для SELECT в программе поддержаны следующие функции и операторы:

    • Функции агрегации: count, avg, max, min, sum.
    • Арифметические операторы: +, -, *, /, <, >, =, !=, >=, <=.

      Вы можете комбинировать эти функции и операторы.

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

  • FROM – источник данных.

    При создании запроса в качестве источника данных вам нужно указать значение events.

  • WHERE – условия фильтрации событий.
    • AND, OR, NOT, =, !=, >, >=, <, <=
    • IN
    • BETWEEN
    • LIKE
    • ILIKE
    • inSubnet
    • match (в запросах используется синтаксис регулярных выражений re2)
  • GROUP BY – поля событий или псевдонимы, по которым следует группировать возвращаемые данные.

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

  • ORDER BY – столбцы, по которым следует сортировать возвращаемые данные.

    Возможные значения:

    • DESC – по убыванию.
    • ASC – по возрастанию.
  • OFFSET – пропуск указанного количества строк перед выводом результатов запроса.
  • LIMIT – количество отображаемых в таблице строк.

    Значение по умолчанию – 250.

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

    Примеры запросов:

    • SELECT * FROM `events` WHERE Type IN ('Base', 'Audit') ORDER BY Timestamp DESC LIMIT 250

      Все события таблицы events с типом Base и Audit, отсортированные по столбцу Timestamp в порядке убывания. Количество отображаемых в таблице строк – 250.

    • SELECT * FROM `events` WHERE BytesIn BETWEEN 1000 AND 2000 ORDER BY Timestamp ASC LIMIT 250

      Все события таблицы events, для которых в поле BytesIn значение полученного трафика находится в диапазоне от 1000 до 2000 байт, отсортированные по столбцу Timestamp в порядке возрастания. Количество отображаемых в таблице строк – 250.

    • SELECT * FROM `events` WHERE Message LIKE '%ssh:%' ORDER BY Timestamp DESC LIMIT 250

      Все события таблицы events, которые в поле Message содержат данные, соответствующие заданному шаблону

      %ssh:% в нижнем регистре, и отсортированы по столбцу Timestamp в порядке убывания. Количество отображаемых в таблице строк – 250.

    • SELECT * FROM `events` WHERE inSubnet(DeviceAddress, '10.0.0.1/24') ORDER BY Timestamp DESC LIMIT 250

      Все события таблицы events для хостов, которые входят в подсеть 10.0.0.1/24, отсортированные по столбцу Timestamp в порядке убывания. Количество отображаемых в таблице строк – 250.

    • SELECT * FROM `events` WHERE match(Message, 'ssh.*') ORDER BY Timestamp DESC LIMIT 250

      Все события таблицы events, которые в поле Message содержат текст, соответствующий шаблону ssh.*, и отсортированы по столбцу Timestamp в порядке убывания. Количество отображаемых в таблице строк – 250.

    • SELECT max(BytesOut) / 1024 FROM `events`

      Максимальный размер исходящего трафика (КБ) за выбранный период времени.

    • SELECT count(ID) AS "Count", SourcePort AS "Port" FROM `events` GROUP BY SourcePort ORDER BY Port ASC LIMIT 250

      Количество событий и номер порта. События сгруппированы по номеру порта и отсортированы по столбцу Port в порядке возрастания. Количество отображаемых в таблице строк – 250.

      Столбцу ID в таблице событий присвоено имя Count, столбцу SourcePort присвоено имя Port.

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

Пример:

SELECT * FROM `events` WHERE match(Message, 'ssh:\'connection.*') ORDER BY Timestamp DESC LIMIT 250

Все события таблицы events, которые в поле Message содержат текст, соответствующий шаблону ssh: 'connection', и отсортированы по столбцу Timestamp в порядке убывания. Количество отображаемых в таблице строк – 250.

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

После обновления KUMA до версии 1.6 при фильтрации событий с помощью SQL-запроса, содержащего условие inSubnet, может возвращаться ошибка Code: 441. DB::Exception: Invalid IPv4 value.

В таких случаях необходимо на серверах хранилища (на каждой машине кластера ClickHouse) в файле /opt/kaspersky/kuma/clickhouse/cfg/config.d/users.xml в разделе profiles → default добавить директиву <cast_ipv4_ipv6_default_on_conversion_error>true</cast_ipv4_ipv6_default_on_conversion_error>.

Подробнее об SQL см. в справке ClickHouse.

В начало

SQL запрос | Community Creatio

Есть потребность выводить в реестр Контрагентов юридическое наименование и ИНН. Я в запросе для контрагента делаю следующее:
SELECT
[tbl_Account].[ID] AS [ID],
[tbl_Account].[Name] AS [Name],
[tbl_Account].[OfficialAccountName] AS [OfficialAccountName],
[tbl_Account].[AnnualRevenue] AS [AnnualRevenue],
[tbl_Account].[EmployeesNumber] AS [EmployeesNumber],
[tbl_Account].[Address] AS [Address],
[tbl_Account].[AddressTypeID] AS [AddressTypeID],
[tbl_Account].[Communication1] AS [Communication1],
[tbl_Account].

[Communication1TypeID] AS [Communication1TypeID],
[tbl_Account].[Communication2] AS [Communication2],
[tbl_Account].[Communication2TypeID] AS [Communication2TypeID],
[tbl_Account].[Communication3] AS [Communication3],
[tbl_Account].[Communication3TypeID] AS [Communication3TypeID],
[tbl_Account].[Communication4] AS [Communication4],
[tbl_Account].[Communication4TypeID] AS [Communication4TypeID],
[tbl_Account].[Communication5] AS [Communication5],
[tbl_Account].[Communication5TypeID] AS [Communication5TypeID],
[tbl_City].[Name] AS [CityName],
[tbl_Account].[CityID] AS [CityID],
[tbl_Account].[ZIP] AS [ZIP],
[tbl_Campaign].[Name] AS [CampaignName],
[tbl_Account].[CampaignID] AS [CampaignID],
[tbl_Contact].[Name] AS [PrimaryContactName],
[tbl_Account].[PrimaryContactID] AS [PrimaryContactID],
[tbl_Country].[Name] AS [CountryName],
[tbl_Account].[CountryID] AS [CountryID],
[tbl_State].[Name] AS [StateName],
[tbl_Account]. [StateID] AS [StateID],
[tbl_Territory].[Name] AS [TerritoryName],
[tbl_Account].[TerritoryID] AS [TerritoryID],
[Owner].[Name] AS [OwnerName],
[tbl_Account].[OwnerID] AS [OwnerID],
[tbl_Account].[ActivityID] AS [ActivityID],
[tbl_Activity].[Name] AS [ActivityName],
[tbl_Account].[FieldID] AS [FieldID],
[tbl_Field].[Name] AS [FieldName],
[tbl_Account].[AccountTypeID] AS [AccountTypeID],
[tbl_AccountType].[Name] AS [AccountTypeName],
[tbl_AddressType].[Name] AS [AddressTypeName],
[CommunicationType1].[Name] AS [Communication1TypeName],
[CommunicationType2].[Name] AS [Communication2TypeName],
[CommunicationType3].[Name] AS [Communication3TypeName],
[CommunicationType4].[Name] AS [Communication4TypeName],
[CommunicationType5].[Name] AS [Communication5TypeName],
[tbl_Account].[Code] AS [Code],
[tbl_Account].[TaxRegistrationCode] AS [TaxRegistrationCode],
[tbl_Account].[CreatedOn] AS [CreatedOn],
[tbl_Account].[CreatedByID] AS [CreatedByID],
[CreatedBy]. [Name] AS [CreatedByName],
[tbl_Account].[ModifiedOn] AS [ModifiedOn],
[tbl_Account].[ModifiedByID] AS [ModifiedByID],
[ModifiedBy].[Name] AS [ModifiedByName],
[tbl_Job].[NameOf] AS [JobNameOf],
[tbl_Account].[SettledCredit] AS [SettledCredit],
[tbl_Account].[PostponementPayment] AS [PostponementPayment],
NULL AS [UID1C],
NULL AS [Object1C],
[tbl_Account].[SiteID] AS [SiteID],
[tbl_Account].[IsActive] AS [IsActive],
[tbl_Account].[DoNotCall] AS [DoNotCall],
[vw_AppealInfo].[AppealDate] AS [AppealDate],
[vw_AppealInfo].[AppealStatusID] AS [AppealStatusID],
[AITaskStatus].[Status] AS [AppealStatus],
[vw_AppealInfo].[AppealTypeID] AS [AppealTypeID],
[AITaskType].[Name] AS [AppealTypeName],
[vw_LoyaltyInfo].[LoyContDate] AS [LoyContDate],
[vw_LoyaltyInfo].[LoyContTypeID] AS [LoyContTypeID],
[LITaskType].[Name] AS [LoyContTypeName],
[vw_LoyaltyInfo].[LoyOrderNum] AS [LoyOrderNum],
[vw_LoyaltyInfo].[LoyResultID] AS [LoyResultID],
[LITaskResult]. [Result] AS [LoyResultName],
[vw_LoyaltyInfo].[LoyComment] AS [LoyComment],
[vw_LoyaltyRepInfo].[LoyRepCallDate] AS [LoyRepCallDate],
[vw_ReminderInfo].[RemContDate] AS [RemContDate],
[vw_ReminderInfo].[RemContTypeID] AS [RemContTypeID],
[RITaskType].[Name] AS [RemContTypeName],
[vw_ReminderInfo].[RemOrderNum] AS [RemOrderNum],
[vw_ReminderInfo].[RemResultID] AS [RemResultID],
[RITaskResult].[Result] AS [RemResultName],
[vw_ReminderInfo].[RemComment] AS [RemComment],
[vw_ReminderRepInfo].[RemRepCallDate] AS [RemRepCallDate],
[tbl_Account].[SitePaymentRecID] AS [SitePaymentRecID],
[tbl_AccountBillingInfo].[INN] AS [INN],
[tbl_AccountBillingInfo].[Name] AS [NameUr]

FROM
[dbo].[tbl_Account] AS [tbl_Account]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[ID] = [tbl_Account].[PrimaryContactID]
LEFT OUTER JOIN
[dbo].[tbl_Territory] AS [tbl_Territory] ON [tbl_Territory].[ID] = [tbl_Account]. [TerritoryID]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [Owner] ON [Owner].[ID] = [tbl_Account].[OwnerID]
LEFT OUTER JOIN
[dbo].[tbl_Campaign] AS [tbl_Campaign] ON [tbl_Campaign].[ID] = [tbl_Account].[CampaignID]
LEFT OUTER JOIN
[dbo].[tbl_City] AS [tbl_City] ON [tbl_City].[ID] = [tbl_Account].[CityID]
LEFT OUTER JOIN
[dbo].[tbl_State] AS [tbl_State] ON [tbl_State].[ID] = [tbl_Account].[StateID]
LEFT OUTER JOIN
[dbo].[tbl_Country] AS [tbl_Country] ON [tbl_Country].[ID] = [tbl_Account].[CountryID]
LEFT OUTER JOIN
[dbo].[tbl_Activity] AS [tbl_Activity] ON [tbl_Activity].[ID] = [tbl_Account].[ActivityID]
LEFT OUTER JOIN
[dbo].[tbl_Field] AS [tbl_Field] ON [tbl_Field].[ID] = [tbl_Account].[FieldID]
LEFT OUTER JOIN
[dbo].[tbl_AccountType] AS [tbl_AccountType] ON [tbl_AccountType].[ID] = [tbl_Account].[AccountTypeID]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_Account].[CreatedByID]
LEFT OUTER JOIN
[dbo]. [tbl_Contact] AS [ModifiedBy] ON [ModifiedBy].[ID] = [tbl_Account].[ModifiedByID]
LEFT OUTER JOIN
[dbo].[tbl_AddressType] AS [tbl_AddressType] ON [tbl_AddressType].[ID] = [tbl_Account].[AddressTypeID]
LEFT OUTER JOIN
[dbo].[tbl_CommunicationType] AS [CommunicationType1] ON [CommunicationType1].[ID] = [tbl_Account].[Communication1TypeID]
LEFT OUTER JOIN
[dbo].[tbl_CommunicationType] AS [CommunicationType2] ON [CommunicationType2].[ID] = [tbl_Account].[Communication2TypeID]
LEFT OUTER JOIN
[dbo].[tbl_CommunicationType] AS [CommunicationType3] ON [CommunicationType3].[ID] = [tbl_Account].[Communication3TypeID]
LEFT OUTER JOIN
[dbo].[tbl_CommunicationType] AS [CommunicationType4] ON [CommunicationType4].[ID] = [tbl_Account].[Communication4TypeID]
LEFT OUTER JOIN
[dbo].[tbl_CommunicationType] AS [CommunicationType5] ON [CommunicationType5].[ID] = [tbl_Account].[Communication5TypeID]
LEFT OUTER JOIN
[dbo].[tbl_Job] AS [tbl_Job] ON [tbl_Job]. [ID] = [tbl_Contact].[JobID]
LEFT OUTER JOIN
[dbo].[vw_AppealInfo] AS [vw_AppealInfo] ON [vw_AppealInfo].[AccountID] = [tbl_Account].[ID]
LEFT OUTER JOIN
[dbo].[vw_LoyaltyInfo] AS [vw_LoyaltyInfo] ON [vw_LoyaltyInfo].[AccountID] = [tbl_Account].[ID]
LEFT OUTER JOIN
[dbo].[vw_LoyaltyRepInfo] AS [vw_LoyaltyRepInfo] ON [vw_LoyaltyRepInfo].[AccountID] = [tbl_Account].[ID]
LEFT OUTER JOIN
[dbo].[vw_ReminderInfo] AS [vw_ReminderInfo] ON [vw_ReminderInfo].[AccountID] = [tbl_Account].[ID]
LEFT OUTER JOIN
[dbo].[vw_ReminderRepInfo] AS [vw_ReminderRepInfo] ON [vw_ReminderRepInfo].[AccountID] = [tbl_Account].[ID]
LEFT OUTER JOIN
[dbo].[tbl_TaskStatus] AS [AITaskStatus] ON [AITaskStatus].[ID] = [vw_AppealInfo].[AppealStatusID]
LEFT OUTER JOIN
[dbo].[tbl_TaskType] AS [AITaskType] ON [AITaskType].[ID] = [vw_AppealInfo].[AppealTypeID]
LEFT OUTER JOIN
[dbo].[tbl_TaskType] AS [LITaskType] ON [LITaskType].[ID] = [vw_LoyaltyInfo].[LoyContTypeID]
LEFT OUTER JOIN
[dbo]. [tbl_TaskResult] AS [LITaskResult] ON [LITaskResult].[ID] = [vw_LoyaltyInfo].[LoyResultID]
LEFT OUTER JOIN
[dbo].[tbl_TaskType] AS [RITaskType] ON [RITaskType].[ID] = [vw_ReminderInfo].[RemContTypeID]
LEFT OUTER JOIN
[dbo].[tbl_TaskResult] AS [RITaskResult] ON [RITaskResult].[ID] = [vw_ReminderInfo].[RemResultID]
LEFT OUTER JOIN
[dbo].[tbl_AccountBillingInfo] AS [tbl_AccountBillingInfo] ON [tbl_AccountBillingInfo].[AccountID] = [tbl_Account].[ID]

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

Нравится 0

Нравится

Избранное

sql-запросов для практики | расширенные sql-запросы

Написал: — Иша Малхотра

  • SQL Интервью Вопрос
  • Технический Альтум

SQL-запросы с ответом

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

Для этого урока я использую следующие таблицы: —

Имя таблицы: — Сотрудник

 
Empid EmpName Отдел ContactNo EmailId EmpHeadId
101 Иша E-101 1234567890 [email protected] 105
102 Прия E-104 1234567890 [email protected] 103
103 Неха E-101 1234567890 [email protected] 101
104 Рахул E-102 1234567890 [email protected] 105
105 Абхишек E-101 1234567890 abhishek@gmail. com 102
Схема:- создать таблицу сотрудников (empid int первичный ключ, empname varchar (100), отдел varchar (50), contactno bigint, emaildid varchar (100), empheadid int)

Таблица :- EmpDept

 
DeptId DeptName Dept_off DeptHead
E-101 ЧАС Понедельник 105
E-102 Разработка Вторник 101
E-103 Жилищное хозяйство Суббота 103
E-104 Отдел продаж Воскресенье 104
E-105 Покупка Вторник 104
Схема:- создать таблицу empdept(deptid varchar(50) первичный ключ,deptname varchar(100), dept_off varchar(100), deepead int ссылки на внешние ключи employee(empid))

Таблица: — Оклад

 
EmpId Зарплата Постоянный
101 2000 Да
102 10000 Да
103 5000 Нет
104 1900 Да
105 2300 Да
Схема:- создать таблицу empsalary (empid int ссылки на внешние ключи employee (empid), зарплата bigint, ispermanent varchar (3))

Таблица :- Проект

 
Идентификатор проекта Продолжительность
стр-1 23
стр-2 15
стр-3 45
стр-4 2
стр-5 30
Схема:- создать табличный проект (projectid varchar (50) первичный ключ, продолжительность int)

Таблица :- Страна

 
идентификатор псевдоним
c-1 Индия
c-2 США
c-3 Китай
c-4 Пакистан
с-5 Россия
Схема:- создать таблицу страны (первичный ключ cid varchar (50), cname varchar (100))

Таблица :- ClientTable

 
ClientId ClientName cid
кл-1 ABC Group кл-1
кл-2 PQR кл-1
кл-3 XYZ с-2
cl-4 технический альтум c-3
кл-5 мнп кл-5
Схема:- создать таблицу clienttable (первичный ключ clientid varchar (50), clientname varchar (100), cid varchar (50) ссылается на страну (cid))

Таблица: — EmpProject

 
EmpId ProjectId ClientID StartYear Конец Года
101 стр-1 Кл-1 2010 2010
102 р-2 Кл-2 2010 2012
103 стр-1 Кл-3 2013
104 р-4 Кл-1 2014 2015
105 п-4 Кл-5 2015
Схема:- создать таблицу empproject (empid int ссылки на внешние ключи employee (empid), projectid varchar (50) ссылки на внешние ключи project (projectid), clientid varchar (50) ссылки на внешние ключи clienttable (clientid), startyear int, endyear int)

Запросы:-

Простые запросы

1.

   Выберите сведения о сотруднике, имя которого начинается с P.
выберите * из сотрудника, где empname как «p%»
вывод:-
 

2.   Сколько постоянных кандидатов берут зарплату больше 5000.

выберите количество (зарплата) как количество из empsalary, где ispermanent = 'да' и зарплата> 5000
вывод:-
 

3.   Выберите сведения о сотруднике, чей адрес электронной почты указан в gmail.

выберите * у сотрудника, где электронная почта похожа на «%@gmail.com»
вывод:-
 

4.   Выберите сведения о сотруднике, который работает в отделе E-104 или E-102.

выберите * из сотрудника, где отдел = «E-102» или отдел = «E-104»
или же
выберите * у сотрудника, где находится отдел ('E-102','E-104')
вывод:-
 

5.   Как называется отдел для DeptID E-102?

выберите имя отдела из empdept, где deptid = 'E-102'
вывод:-
 

6. Какая общая заработная плата выплачивается постоянным сотрудникам?

выберите сумму (зарплату) в качестве зарплаты из empsalary, где ispermanent = 'да'
вывод:-
 

7.

Перечислите имена всех сотрудников, чьи имена заканчиваются на a.
выберите * из сотрудника, где empname как «%a»
вывод:-
 

8. Укажите количество сотрудников отдела в каждом проекте.

выберите количество (empid) в качестве сотрудника, идентификатор проекта из группы empproject по идентификатору проекта
вывод:-
 

9.  Сколько проектов было начато в 2010 году.

выберите count(projectid) в качестве проекта из empproject, где startyear=2010
вывод:-
 

10. Сколько проектов было начато и завершено в одном и том же году.

выберите count (projectid) в качестве проекта из empproject, где startyear = endyear
вывод:-
 

11.  выберите имя сотрудника, в имени которого третий символ — «h».

выберите * из сотрудника, где empname как «__h%»
вывод:-
 


Вложенные запросы

1.   Выберите название отдела компании, которое назначено сотруднику, чей идентификатор больше 103.

выберите имя отдела из empdept, где находится deptid (выберите отдел из сотрудника, где empid > 103)
вывод:-
 

2.   Выберите имя сотрудника, который работает под началом Абхишека.

выберите empname от сотрудника, где empheadid = (выберите empid от сотрудника, где empname = 'abhishek')
вывод:-
 

3.   Выберите имя сотрудника, который является начальником отдела кадров.

выберите empname из сотрудника, где empid = (выберите deepead из empdept, где deptname = 'hr')
вывод:-
 

4.   Выберите имя постоянного руководителя сотрудника.

выберите empname из сотрудника, где empid in (выберите empheadid из сотрудника) и empid in (выберите empid из empsalary, где ispermanent = 'да')
вывод:-
 

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

выберите empname, emaildid от сотрудника, где empid (выберите depthead из empdept) и empid (выберите empid из empsalary, где ispermanent = 'нет')
вывод:-
 

6.

   Выберите сотрудника, чей отдел не работает в понедельник .
выберите * из сотрудника, в котором находится отдел (выберите deptid из empdept, где dept_off = 'понедельник')
вывод:-
 


7.   выберите сведения об индийских клиентах.

выберите * из клиентской таблицы, где находится cid (выберите cid из страны, где cname='india')
вывод:-
 

8.   выберите сведения обо всех сотрудниках, работающих в отделе разработки.

выберите * из сотрудника, в котором находится отдел (выберите deptid из empdept, где deptname='development')
вывод:-
 

Видеоруководство по базовым SQL-запросам



SQL-запросы на основе агрегатной функции




Подключение к пользовательскому SQL-запросу

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

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

Для источников данных Excel и текстовых файлов этот параметр доступен только в книгах, созданных до Tableau Desktop 8.2, или при использовании Tableau Desktop в Windows с устаревшим подключением. Чтобы подключиться к Excel или текстовым файлам с помощью устаревшего подключения, подключитесь к файлу и в диалоговом окне «Открыть» щелкните раскрывающееся меню «Открыть», а затем выберите «Открыть с помощью устаревшего подключения».

ПРИМЕЧАНИЕ. Начиная с Tableau 2020.2, устаревшие соединения Excel и Text больше не поддерживаются. См. документ «Альтернативы устаревшего подключения» в сообществе Tableau, чтобы узнать об альтернативах использованию устаревшего подключения.

Подключиться к пользовательскому SQL-запросу

  1. После подключения к данным дважды щелкните параметр «Новый пользовательский SQL» на странице «Источник данных».

  2. Введите или вставьте запрос в текстовое поле. Запрос должен быть одним оператором SELECT*.

  3. Когда закончите, нажмите OK.

При нажатии кнопки «ОК» запрос выполняется, и на логическом уровне холста появляется таблица настраиваемых запросов SQL. Только релевантные поля из пользовательского SQL-запроса, отображаемого в сетке данных на странице «Источник данных».

Дополнительные сведения о логических и физических слоях холста см. в разделе Модель данных Tableau.

Примеры пользовательских SQL-запросов

Объединение таблиц по вертикали (объединение)

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

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

9 ноября0031 декабря

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

SELECT * FROM ноября UNION ALL SELECT * FROM 9 декабря0628

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

Дополнительные сведения о параметре объединения см. в разделе Объединение ваших данных.

Изменить тип данных поля, чтобы выполнить соединение между базами данных

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

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

ВЫБЕРИТЕ [Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
ОТ [Основной]

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

Дополнительные сведения о соединениях и соединениях между базами данных см. в разделе Объединение ваших данных.

Уменьшите размер ваших данных

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

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

ВЫБЕРИТЕ
[FischerIris].[Виды] AS [Виды],
[FischerIris].[Ширина] AS [Ширина лепестка],
COUNT([FischerIris].[ID]) AS [Количество видов]
ОТ [FischerIris]
ГДЕ [FischerIris].[Орган] = 'Лепесток'
И [FischerIris].[Ширина] > 15,0000
ГРУППА ПО [FischerIris].[Виды], [FischerIris].[Ширина]

Реструктуризация данных (сводка)

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

Например, предположим, что у вас есть следующая таблица:

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

ВЫБРАТЬ Table1.Season ID AS [ID сезона],
Table1.Items - Не нравится AS [Количество],
"Не нравится" AS [Причина]
ИЗ Таблицы 1
СОЕДИНЕНИЕ ВСЕ
ВЫБРАТЬ Table1.Season ID AS [Season ID],
Table.Items - Дефектный AS [Количество],
"Дефектный" AS [Причина]
ИЗ Таблицы 1
СОЕДИНЕНИЕ ВСЕ
ВЫБРАТЬ Table1.Season ID AS [Season ID],
Table1. Items — Слишком большой AS [Количество],
"Слишком большой" AS [Причина]
ИЗ Таблицы 1
СОЕДИНЕНИЕ ВСЕ
SELECT Table1.Season ID AS ID сезона,
Table1.Items - Слишком мал AS [Количество]
"Слишком маленький" AS [Причина]
ИЗ Таблицы 1

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

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

Объединить (объединить) и агрегировать данные

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

Например, предположим, что у вас есть следующие две таблицы: Orders и Vendors.

Заказы Продавцы

Вы можете использовать следующий пользовательский SQL-запрос, чтобы подсчитать количество заказов и выполнить левое соединение в таблицах Orders и Vendors:

ВЫБЕРИТЕ Vendors.Name,COUNT(Orders.Order) AS количество заказов
ОТ Заказы
ЛЕВОЕ СОЕДИНЕНИЕ Поставщики
ON Заказы.VendorID=Vendors.VendorID
ГРУППИРОВАТЬ ПО Имени;

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

Дополнительные сведения о объединениях см. в разделе Объединение ваших данных.

Ошибки при обращении к повторяющимся столбцам

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

. ВЫБЕРИТЕ * ОТ авторы, название автора ГДЕ authors.au_id = titleauthor.au_id

запрос корректен, но поле au_id неоднозначно потому что в этом случае он существует как в таблице "authors", так и в таблице "titleauthor" Таблица. Tableau подключится к запросу, но вы получите сообщение об ошибке в любое время вы пытаетесь использовать поле au_id. Это потому что Tableau не знает, о какой таблице вы говорите.

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

Изменить пользовательский запрос SQL

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

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

Чтобы изменить имя пользовательского запроса SQL

Когда вы перетаскиваете пользовательский SQL-запрос на логический слой холста, Tableau присваивает ему имя по умолчанию: Пользовательский SQL-запрос, Пользовательский SQL-запрос1 и т. д. Вы можете изменить имя по умолчанию на более значимое.

  1. На странице источника данных в логическом слое холста выберите стрелку раскрывающегося списка в пользовательской таблице SQL-запросов и выберите «Переименовать».

  2. Введите имя, которое вы хотите использовать для своего пользовательского SQL-запроса.

Использование параметров в пользовательском запросе SQL

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

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

Для веб-разработки (в Tableau Cloud или Tableau Server) вы можете использовать существующий параметр, опубликованный из Tableau Desktop. Вы не можете создать новый параметр в веб-разработке.

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

  1. На странице источника данных на холсте наведите указатель мыши на таблицу, пока не отобразится значок редактирования, а затем нажмите кнопку редактирования.
  2. В нижней части диалогового окна нажмите «Вставить параметр».
  3. Выберите постоянное значение в операторе SQL, а затем в раскрывающемся меню «Вставить параметр» выберите параметр, который вы хотите использовать вместо этого. Если вы еще не создали параметр, выберите Создать новый параметр. Следуйте инструкциям в разделе Создание параметров, чтобы создать параметр.

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

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

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

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

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

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

Поддержка каталога Tableau для пользовательского SQL

Начиная с 2019.3, каталог Tableau доступен как часть предложения по управлению данными для Tableau Server и Tableau Cloud. Дополнительные сведения о каталоге Tableau см. в разделе «О каталоге Tableau» в справке Tableau Server или Tableau Cloud.

Поддерживаемые запросы

Каталог поддерживает пользовательские запросы SQL, соответствующие стандарту ANSI SQL-2003, за тремя известными исключениями:

  • Выражения часовых поясов
  • Мультимножественные выражения
  • Параметры таблицы

Начиная с 2021.4, каталог Tableau также поддерживает использование диалекта Transact-SQL (T-SQL) в пользовательском SQL со следующими исключениями:

  • Подсказки
  • ЗА статьи
  • Функции OPENROWSET, OPENXML и OPENJSON
  • Скалярные функции ODBC
  • ДЛЯ СИСТЕМНОГО_ВРЕМЕНИ
  • TABLESAMPLE
  • ПОИСКПОЗ выражения
  • СОДЕРЖИТ выражение
  • Выражение FREETEXT

Поддерживаемые возможности и функции

Каталог поддерживает следующие дополнительные функции для источников данных, рабочих книг и потоков с соединениями, использующими драйверы MySQL или PostgreSQL, например, Amazon Aurora для MySQL, Amazon RedShift, Pivotal Greenplum Database, MemSQL, Denodo , и другие.

  • Функция MySQL GROUP_CONCAT
  • Массивы PostgreSQL
  • Функция PostgreSQL EXTRACT()

Другие пользовательские сценарии и функции SQL могут работать, но Tableau специально не тестирует и не поддерживает их.

Поддерживаемое происхождение

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

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

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

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

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

Оставить комментарий

Добавить комментарий

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