Как сделать фильтр sql

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

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

Фильтрация записей

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

Базовый синтаксис предложения WHERE может быть задан следующим образом:

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

Предложение WHERE работает как условие if на любом языке программирования. Это предложение используется для сравнения данного значения со значением поля, доступным в таблице MySQL. Если данное значение извне равно доступному значению поля в таблице MySQL, то он возвращает эту строку.

Давайте сделаем SQL-запрос с использованием предложения WHERE , после чего мы выполним этот запрос, передав его функции PHP mysqli_query() для получения отфильтрованных данных.

У нас есть таблица persons внутри базы данных demo, в которой есть следующие записи:

Выбор данных из таблиц базы данных MySQL

Следующий код PHP выбирает все строки из таблицы persons, где first_name = 'john':

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

Создание встроенных и именованных фильтров

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

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

Создание встроенного фильтра на панели "Выбранные столбцы" на вкладке "Критерии"

Откройте результаты анализа для редактирования.

Выберите вкладку "Критерии" на панели "Выбранные столбцы", нажмите Параметры рядом с именем столбца и выберите Фильтр .

Создание встроенного фильтра на панели "Фильтры" на вкладке "Критерии"

Откройте результаты анализа для редактирования.

Нажмите Создать фильтр для текущей предметной области на вкладке "Критерии" панели "Фильтры".

В меню выберите имя столбца.

Создание именованного фильтра на домашней странице

На классической домашней странице на панели Создать нажмите Дополнительно в разделе Анализ и интерактивные отчеты , затем нажмите Фильтр .

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

Указание значений для фильтров

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

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

  1. В диалоговом окне "Новый фильтр" выберите соответствующий оператор, например равно/находится в .
  • Встроенные фильтры отображаются на панели "Фильтры" на вкладке "Критерии".

Встраивание функции EVALUATE_PREDICATE в фильтр

Можно добавить функцию EVALUATE_PREDICATE в качестве фразы встроенного фильтра.

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

  1. Откройте результаты анализа для редактирования.
  2. На панели "Фильтры" выберите вкладку "Критерии", нажмите Дополнительные параметры и выберите Добавить функцию EVALUATE_PREDICATE .
  3. Введите формулу функции в диалоговом окне "Новая функция EVALUATE_PREDICATE".
  4. Нажмите ОК , чтобы добавить функцию EVALUATE_PREDICATE на панель "Фильтры".

Например, можно добавить следующую фразу фильтра с функцией EVALUATE_PREDICATE для исключения значений, содержащих менее шести букв, из столбца "Products.P4 - Бренд".

Объединение и группирование фильтров

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

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

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

  1. Откройте для редактирования именованный фильтр или анализ, содержащий встроенные фильтры.
  2. Убедитесь, что на панели "Фильтры" на вкладке "Критерии" в анализе есть два или более встроенных фильтра. Также можно перейти к панели "Сохраненный фильтр" и проверить именованный фильтр, который должен содержать два или более встроенных фильтра.
  3. На панели "Сохраненный фильтр" или панели "Фильтры" на вкладке "Критерии" отображаются фильтры, объединенные с помощью логических операторов AND или OR .
  4. Нажмите на слово AND перед встроенным фильтром, чтобы изменить оператор AND на оператор OR . Таким образом, можно переключаться между операторами AND и OR .
  5. Измените операторы AND и OR для других встроенных фильтров, чтобы создать требуемые комбинации фильтров. Можно также создать дополнительные встроенные фильтры и изменить операторы AND и OR .
  6. Нажмите Сохранить анализ или Сохранить фильтр , чтобы сохранить комбинации фильтров.

Сохранение фильтров

Вы можете сохранять встроенные и именованные фильтры.

При создании встроенного фильтра на панели "Фильтры" встроенный фильтр можно по желанию сохранить как именованный. Если встроенный фильтр сохранен как именованный, другие пользователи из вашей команды смогут использовать этот фильтр в новом анализе. Также можно создать именованный фильтр в виде автономного объекта в общем заголовке.

Например, вы можете сохранить фильтр для столбца "Квартал" в общей папке каталога. В результате этот фильтр будет доступен для вашего руководителя. Предположим, что вы сохранили фильтр, ограничивающий выбор кварталов значениями КВ1 2011, КВ1 2012 и КВ1 2013. Ваш руководитель может использовать этот фильтр в анализе "Доход от реализации продуктов" для определения эффективности продаж продуктов в течение указанных кварталов.

Чтобы сохранить именованный фильтр, нажмите Сохранить как на панели инструментов, укажите папку в каталоге и нажмите ОК .

Перейдем к созданию статических запросов. В обозревателе объектов " Microsoft SQL Server 2008 " все запросы БД находятся в папке "Views" ( рис. 8.1).


Создадим запрос "Запрос Студенты+Специальности", связывающий таблицы "Студенты" и "Специальности" по полю связи "Код специальности". Для создания нового запроса необходимо в обозревателе объектов в БД "Students" щелкнуть ПКМ по папке "Views", затем в появившемся меню выбрать пункт "New View". Появится окно "Add Table" (Добавить таблицу), предназначенное для выбора таблиц и запросов, участвующих в новом запросе ( рис. 8.2).


Добавим в новый запрос таблицы "Студенты" и "Специальности". Для этого в окне "Add Table" выделите таблицу "Студенты" и нажмите кнопку "Add" (Добавить). Аналогично добавьте таблицу "Специальности". После добавления таблиц участвующих в запросе закройте окно "Add Table" нажав кнопку "Close" (Закрыть). Появится окно конструктора запросов ( рис. 8.3).


Замечание: Окно конструктора запросов состоит из следующих панелей:

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





Замечание: Если необходимо снова отобразить окно "Add Table" для добавления новых таблиц или запросов, то для этого на панели инструментов "Microsoft SQL Server 2008" нужно нажать кнопку


Замечание: Если необходимо удалить таблицу или запрос из схемы данных, то для этого нужно щелкнуть ПКМ и в появившемся меню выбрать пункт "Remove" (Удалить).

Теперь перейдем к связыванию таблиц "Студенты" и "Специальности" по полям связи "Код специальности". Чтобы создать связь необходимо в схеме данных перетащить мышью поле "Код специальности" таблицы "Специальности" на такое же поле таблицы "Студенты". Связь отобразится в виде ломаной линии соединяющей эти два поля связи ( рис. 8.3).

Замечание: Если необходимо удалить связь , то для этого необходимо щелкнуть по ней ПКМ и в появившемся меню выбрать пункт "Remove".

Замечание: После связывания таблиц (а также при любых изменениях в запросе) в области кода T- SQL будет отображаться T- SQL код редактируемого запроса.

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

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

Замечание: Если необходимо отобразить все поля таблицы, то необходимо установить галочку слева от пункта "* (All Columns)" (Все поля), принадлежащего соответствующей таблице на схеме данных.

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

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


Либо щелкните ПКМ в любом месте окна конструктора запросов и в появившемся меню выберите пункт "Execute SQL" (Выполнить SQL ). Результат выполнения запроса появиться в виде таблицы в области результата ( рис. 8.3).

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

Условие WHERE в SQL запросе

Получение всех записей в таблице в одном запросе - это очень редкий случай в реальных проектах. Зачастую нужна либо одна запись, либо диапазон, к примеру из 10 или 100 записей либо отвечающее определённому условию. Такую выборку можно сделать с помощью команды условия WHERE в SQL запросе (слово WHERE переводится с английского как "ГДЕ").

Сравнение (=, !=, , =)

Продемонстрируем это условие на ограничении выборки по ID пользователя. Приведём сразу несколько примеров запросов: Как можно догадаться по математическим символам в этих запросах, выборка ограничена по ID пользователя (по целому числу). При каждом условии может возвращаться разное количество строк из таблицы. К примеру, если указано "WHERE `ID` = 2", то вернётся только одна строка, потому что поле "ID" зачастую уникально (то есть у столбца установлено свойство "PRIMARY KEY"). Если в запросе есть символ неравенства "!=" или сравнения " , headline" >Поиск подстроки (LIKE) и полное соответствие (=)

Знак равенства "=" можно использовать в SQL запросах не только для чисел, но и для строк. Представим что нам нужно получить выборку из базы, в которой будут содержаться данные о пользователе с именем "Мышь". Запрос получится такой: В результате мы получим все строки, в которых в столбце имени пользователя "NAME" содержится строка "Мышь". Обратите внимание, что совпадение должно быть полным. То есть в выборку не попадут пользователи, имена которых "Мышь серая", "Мышь белая", "Мышь чёрная". Чтобы выбрать и этих пользователей, необходимо сделать текстовый поиск по значению столбца. Для этого используется команда "LIKE" (в переводе с английского этот предлог звучит как "ПОДОБНО", "ВРОДЕ" или "СЛОВНО").

С помощью команды "LIKE" можно искать подстроку в столбце. Чтобы сделать это поставьте знак процента "%" с той стороны подстроки, с которой могут находиться другие символы. К примеру: В результаты выборки попадёт не только пользователь с именем "Мышь", но и "Мышь серая", "Мышь белая", "Мышь чёрная". Если поставить знак процента ещё и до подстроки: то в выборку попадут не только все предыдущие результаты, но и пользователь с именем "Большая мышь".

LIKE делает поиск независимо от регистра. То есть результаты от '%мышь%' и '%МЫШЬ%' будут одинаковыми.

Логика "и" (AND) и "или" (OR)

Бывают случаи, когда необходимо задать несколько ограничений, связанных логикой. К примеру, если надо выбрать пользователей с ID от 2 до 5, то можно использовать условие с "AND": Количество условий и "AND" неограниченно: Существует возможность использовать логику "ИЛИ" благодаря условию "OR". Продемонстрируем это: С помощью круглых скобок ( ) можно группировать условия OR и AND:

Выбор определённых столбцов в SELECT

В этой статье во всех SELECT запросах к базе запрашивались все поля. Потому что после слова SELECT стояла звёздочка *. Но чем больше объём данных вы выборке, тем медленнее база данных возвращает ответ. Поэтому старайтесь запрашивать у базы только то, что будете использовать. К примеру, если нужно получить только ID пользователя и имя 'NAME', то перечислите эти поля через запятую после слова SELECT: Базы данных сайтов не приспособлены к получению больших выборок. Быстрее всего они работают на объёмах до 100 строк. Если попробовать запросить 100 000 строк из базы и указать вместо конкретных полей *, то можно будет увидеть значительное падение производительности. А чем медленнее загружается ваш сайт, тем меньше посетителей на него будут заходить. Поэтому всегда старайтесь оптимизировать свои запросы к базе.

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