пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅ
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Написать SQL-код с несколькими условиями может быть не так просто, особенно если вам нужно выполнить целый ряд проверок. Например, выражение альтернативы  if () else if () else {} обрабатывает все условные операторы SQL. Если первое условие выполняется, то запрос прекращает свое выполнение и возвращает значение. Значение, которое было указано в  else , возвращается только в случае, если ни одно условие не выполнилось. В этой статье мы с вами рассмотрим:  Что такое оператор SQL CASE и как он работает Как решить задачу с помощью оператора SQL CASE Что означают такие немаловажные термины, такие как ORDER BY, LIMIT, OFFSET, LEFT JOIN и ALIAS. Что такое оператор SQL CASE? В программировании при заданном наборе условий для того, чтобы узнать, какой блок кода необходимо выполнить, вы используете условные операторы ( switch или  if else ).  В SQL это можно сделать с помощью оператора CASE. Для того, чтобы выполнить блок кода условного оператора, ключевое слово CASE нужно использовать вместе с оператором WHEN. Чтобы вернуть результат выражения, вам понадобиться также оператор THEN. Если не выполняется ни одно из условий, то в игру вступает последний оператор ELSE для того, чтобы вернуть резервный результат. Оператор SQL CASE имеет следующий синтаксис: CASE    WHEN conditional_statement1 THEN result1    .    .    .    .    WHEN condition_statementN THEN resultN       ELSE result END; Синтаксис оператора SQL CASE Когда вы используете оператор CASE, следующим должен быть WHEN, затем THEN и результат, который возвращается при выполнении первого условия. Если первое условие не выполняется, то проверяются следующие условия вплоть до n-го (или последнего) условия. Если они также не выполняются, то выполняется условие ELSE. При этом здесь конструкция ELSE не является обязательной. В тех случаях, когда его нет, результат запроса просто возвращает NULL. Задача Здесь мы рассмотрим реальный пример, чтобы помочь вам научится решать задачи в SQL с помощью оператора CASE. С этой задачей я столкнулся на Coderbyte. Это платформа для отработки задач по программированию. Ее было не так просто решить, и сейчас я разберу решение этой задачи пошагово. В чем заключается задача? Задача заключается в следующем: необходимо придумать такой SQL-запрос, который бы вернул из таблицы строку сотрудника с третьей по величине заработной платой.  Вам нужно построить запрос таким образом, чтобы найти этого сотрудника и вернуть его строку. Также вы должны заменить значение DivisionID соответствующим значением DivisionName из таблицы company_divisions. Затем, если значение ID есть в таблице и не равен NULL, то вам нужно заменить это значение на значение ManagerName. Какую проблему решает оператор SQL CASE в этой задаче? В этой задаче мы будем использовать оператор CASE для того, чтобы выполнить следующее: Проверить, что ManagerID не равен NULL Сопоставить ManagerID из таблицы company и ID из таблицы company и вернуть Name в качестве значения ManagerName Сделать так, чтобы, если Name не возвращается, то в качестве значения ManagerName по умолчанию возвращается имя Susan Wall Вот, что должно получиться: ID Name DivisionName ManagerName Salary 222 Mark Red Sales Susan Wall 86000 А ниже представлены данные, которые вам нужны для решения этой задачи: Таблица 1: company ID Name DivisionID ManagerID Salary 356 Daniel smith 100 133 40000 122 Arnold Sully 101 null 60000 467 Lisa Roberts 100 null 80000 112 Mary Dial 105 467 65000 775 Dennis Front 103 null 90000 111 Larry Weis 104 35534 75000 222 Mark Red 102 133 86000 577 Robert Niger 105 12353 76000 133 Susan Wall 105 577 110000 Таблица 2: company_divisions ID    DivisionName  100    Accounting  101    IT  102    Sales  103    Marketing  104    Engineering  105    Customer Support  Как решить задачу с помощью оператора SQL CASE? Здесь мы рассмотрим пошаговый процесс решения этой задачи. Шаг 1: получение строки сотрудника с третьей по величине заработной платой Для начала нам нужно построить запрос, который вернет строку сотрудника с третьей по величине заработной платой. Вы можете сделать это следующим образом: упорядочить таблицу company по значениям заработной платы (так как именно это значение нас интересует) и выбрать третью строку сверху. Выглядеть это будет примерно так: SELECT * FROM company ORDER BY salary DESC limit 1 offset 2; Выбор строки с третьим по величине значением заработной платы Как и ожидалось, запрос вернул строку сотрудника с третьей по величине заработной платой. ID Name DivisionID ManagerID Salary 222 Mark Red 102 133 86000 Итак, что же творится в этом запросе? SELECT : команда SELECT со звездочкой (*) (также известной как подстановочный знак) извлекает все столбцы из таблицы company. ORDER BY : команда ORDER BY упорядочивает столбцы в порядке возрастания или убывания. По умолчанию SQL упорядочивает по возрастанию (ASC), но мы упорядочим столбец заработной платы по убыванию (DESC). Мы делаем именно так, поскольку нам нужен убывающий список заработных плат, от самой высокой до самой низкой, то есть от 110 000 до 40 000. limit : команда limit ограничивает количество записей, которые будут возвращены, с помощью установленного значения. Так как нас интересует строка конкретного сотрудника, то мы ограничим вывод одной строкой и установим значение равное 1. Это гарантирует нам, что при каждом выполнении запроса мы будем получать только одну запись.  offset : оператор offset помогает нам указать количество строк, которые необходимо пропустить, прежде чем возвращать строки из запроса. С помощью offset мы можем пропустить две строки с самыми высокими заработными платами (Susan Wall и Dennis Front) и вернуть строку с третьей по величине заработной платой (Mark Red). Шаг 2: замена DivisionID на DivisionName Теперь нам нужно изменить запрос так, чтобы он выбирал только нужные нам столбцы – ID, Name, ManagerID, DivisionName и Salary. И затем заменить столбец Division ID соответствующим столбцом DivisionName из таблицы company_divisions. Вы можете сделать это так: SELECT c.ID, c.Name, c.ManagerID, c.salary, cd.DivisionName FROM company as c LEFT JOIN company_divisions as cd ON c.DivisionId = cd.id ORDER BY salary DESC limit 1 offset 2; Выбор столбцов и объединение с таблицей company_division Вот результат: ID Name DivisionName ManagerID Salary 222 Mark Red Sales 133 86000 Давайте обсудим, что же творится в запросе выше: LEFT JOIN : так как записи возвращаются с левой стороны (company), то мы сопоставляем их с правой стороны (company_division) с помощью  company_division.id и  company.DivisionID . В случае, если была обнаружена совпадающая запись, то есть если ID из таблицы company также есть и в таблице company_division, то столбец DivisionName заполнятся фактическим значение из левого соединения (в нашем случае это Sales). Если записи нет, то ничего не возвращается.  as   (alias): alias используется для задания временного псевдонима таблицы. Таким образом, с учетом того, что у таблицы company есть псевдоним (c), вместо company.name мы можем использовать c.name. Использование таких псевдонимов помогает улучшить читаемость кода.  Шаг 3: Замена ManagerID на ManagerName За основу возьмем результат запроса из шага 2. Мы будем использовать оператор CASE, который мы уже изучили, для того, чтобы добавить условия: равен ли ManagerID NULL и существует ли ManagerID.  В первую очередь нам нужно проверить, не является ли значение company.ManagerID   нулевым, и убедиться, что ID существует в таблице. Для этого мы применим оператор CASE. CASE WHEN c.ManagerID IS NOT NULL AND c.ManagerID = c.ID Первый шаг оператора CASE Вторая часть оператора CASE нам нужна для того, чтобы заменить столбец ManagerID на столбец ManagerName. Для этой цели мы будем использовать блок THEN, который мы уже изучили ранее: CASE WHEN c.ManagerID IS NOT NULL AND c.ManagerID = c.ID THEN Name ELSE 'Susan Wall' END AS 'ManagerName' Готовый оператор CASE для решения задачи И наконец, мы должны добавить блок CASE в уже имеющийся фрагмент кода, который у нас получился на шаге 2. И теперь он будет выглядеть примерно так: SELECT c.ID, c.Name, c.salary, cd.DivisionName CASE WHEN c.ManagerID IS NOT NULL AND c.ManagerID = c.ID THEN Name ELSE 'Susan Wall' END AS 'ManagerName' FROM company as c LEFT JOIN company_divisions as cd ON c.DivisionId = cd.id ORDER BY salary DESC limit 1 offset 2; Оператор SQL CASE вместе с операторами SELECT и JOIN Результат шага 3 – это то, что мы и хотели получить, а именно строку сотрудника с третьей по величине заработной платой.  ID Name DivisionName ManagerName Salary 222 Mark Red Sales Susan Wall 86000 Подводим итоги Я надеюсь, что эта статья помогла понять, что такое оператор SQL CASE и как можно с его помощью решать реальные задачи. Также мы рассмотрели и другие команды SQL, такие как SELECT, ORDER BY, LIMIT, OFFSET, LEFT JOIN и ALIAS. 
img
Рассказываем как быстро и просто поднять свой NFS сервер на Ubuntu Linux Server 14-04.1, а также разберёмся с принципами работы протокола NFS и рассмотрим теорию. Теория Аббревиатура NFS расшифровывается как Need for Speed - Network File System. Это протокол для доступа к распределённым сетевым файловым системам, с помощью которого можно подмонтировать удалённые директории к своему серверу. Это позволяет использовать дисковое пространство другого сервера для хранения файлов и регулярно производить запись данных на него с нескольких серверов. Протокол имеет клиент-серверную модель, то есть один сервер (ещё его называют “шара” от слова share), с установленным пакетом NFS, будет обеспечивать доступ к своим каталогам и файлам, а клиентские компьютеры будут подключаться к нему по сети. Закрепим прочитанное схемкой: Обращения к серверу NFS осуществляются в виде пакетов протокола RPC (Remote Call Procedure), который позволяет выполнить различные функции или процедуры в другом сетевом пространстве, то есть на удалённом сервере. Авторизация пользователей, которые подключаются к серверу осуществляется по IP-адресу, а также по специальным идентификаторам пользователя UID и группы GID. Это не лучший способ относительно безопасности хранимых файлов, в сравнении с классической моделью «логин/пароль». Зато, благодаря такой архитектуре и тому, что NFS использовал протокол UDP без установления сессии, он практически невосприимчив к сбоям сети и самих клиентских компьютеров. Так, при каком-либо сбое, передача файла просто приостановится, а когда связь будет налажена, то передача возобновиться без необходимости какой-либо перенастройки. Настройка Думаю, с теорией понятно, так что давайте переходить к практике. Как было сказано, все настройки будет проводить на Ubuntu 14.04.1 Прежде всего, на компьютер, который будет выступать в роли сервера NFS, нужно установить необходимые компоненты. Итак, скачиваем пакет nfs-kernel-server, с помощью которого мы сможем раздать доступ (“расшарить”) директории. Для этого на будущем NFS сервере вводим команды: sudo apt-get update sudo apt-get install nfs-kernel-server Теперь создаём собственно директорию к которой хотим раздать доступ. Стоит отметить, что можно также “расшарить” уже имеющиеся на сервере директории, но мы создадим новую: sudo mkdir /var/nfs Далее мы должны сделать так, чтобы владельцем директории /var/nfs и группе, к которой он принадлежит стали все пользователи в нашей системе. Для этого вводим на сервере команду: sudo chown nobody:nogroup /var/nfs Вводите эту команду только для тех директорий, которые создали сами, не надо вводить её для уже имеющихся директорий, например /home . Следующим шагом необходимо изменить конфигурацию самого NFS, она лежит в файле /etc/exports, открываем его для редактирования любимым редактором: sudo nano /etc/exports Перед вами откроется конфигурационный файл с закомментированными строками, которые содержат примеры настройки для разных версий NFS. Закомментированные – это те, в начале которых стоит символ #, и это значит, что параметры, указанные в них, не имеют силы. Нам необходимо внести в этот файл следующие не закомментированные строки: /var/nfs 10.10.0.10/24(rw,sync,no_subtree_check) Где: /var/nfs - Директория, которую мы хотим расшарить 10.10.0.10 - IP-адрес и маска клиентского компьютера, которому нужно раздать доступ к директории rw - Разрешает клиенту читать (r) и записывать (w) файлы в директории sync - Этот параметр заставляет NFS записывать изменения на диск перед ответом клиенту. no_subtree_check - Данная опция отключает проверку того, что пользователь обращается именно к файлу в определённом подкаталоге. Если это проверка включена, то могут возникнуть проблемы, когда, например, название файла или подкаталога было изменено и пользователь попробует к ним обратиться. После этого, нужно создать таблицу соответствия расшаренных директорий и клиентов, а затем запустить NFS сервис. Для этого вводим следующие команды: sudo exportfs –a sudo service nfs-kernel-server start После выполненных действий расшаренные директории должны стать доступными для доступа с клиентов.
img
В продолжение нашей статьи про настройку Netflow на маршрутизаторах Mikrotik, сегодня мы расскажем про Ntopng — приложение, которое анализирует трафик в вашей сети. Устанавливать будем на CentOS 7. Установка Ntopng не доступен в дефолтных репозиториях CentOS 7, поэтому предварительно нам нужно будет выполнить определенные действия по их добавлению. Сперва, выполните команду по добавлению EPEL репозитория: sudo yum install epel-release Затем необходимо создать ntop репозиторий. Для этого нужно будет создать файл ntop.repo внутри директории /etc/yum.repos.d - для этого введите команду sudo nano /etc/yum.repos.d/ntop.repo. В данный файл добавьте следующие строки: [ntop] name=ntop packages baseurl=http://www.nmon.net/centos-stable/$releasever/$basearch/ enabled=1 gpgcheck=1 gpgkey=http://www.nmon.net/centos-stable/RPM-GPG-KEY-deri [ntop-noarch] name=ntop packages baseurl=http://www.nmon.net/centos-stable/$releasever/noarch/ enabled=1 gpgcheck=1 gpgkey=http://www.nmon.net/centos-stable/RPM-GPG-KEY-deri Для создания файла, конечно же, можно использовать любой текстовый редактор — не только nano. Но если хотите дотошно следовать инструкции, то, вероятно, сначала текстовый редактор придется установить с помощью команды yum install nano -y. После добавления нужных строк в файл сохраните изменения с помощью сочетания клавиш CTRL+O, и выйдите из файла командой CTRL+X. Теперь переходим к непосредственно установке — выполните команду sudo yum --enablerepo=epel install redis ntopng -y . После этого просто соглашайтесь со всеми пунктами, и, спустя минут 5, все должно быть установлено. Запуск сервисов и настройка ntopng После установки ntopng, необходимо установить hiredis-devel пакет и запустить redis сервер до старта ntopng: sudo yum --enablerepo=epel install hiredis-devel Затем запускаем redis сервис и разрешаем ему автозапуск — и тоже самое делаем с ntopng. sudo systemctl start redis.service sudo systemctl enable redis.service sudo systemctl start ntopng.service sudo systemctl enable ntopng.service Далее, проверим, работает ли ntopng командой sudo systemctl status ntopng. Затем, превратим наш ntopng в бесплатную версию — для этого нужно отредактировать конфиг командой sudo nano /etc/ntopng/ntopng.conf и изменить строку: -G=/var/tmp/ntopng.pid на строку: -G=/var/tmp/ntopng.pid --community После чего, сохраним и выйдем из файла и перезапустим ntopng: sudo systemctl restart ntopng Последний шаг — настроим фаерволл и перезагрузим его. Настройка заключается в разрешении порта 3000. sudo firewall-cmd --permanent --add-port=3000/tcp sudo firewall-cmd --reload Первый запуск ntopng Теперь осталось перейти по следующему адресу: http://yourhostip:3000. Логин и пароль по умолчанию — admin. Сразу после этого вам предложат изменить пароль. Далее, вы увидите дэшборд, с разнообразной информацией, примерно как на скриншоте ниже: Для понимания возможностей данного приложения — попробуйте посмотреть хосты, сети и прочие — в общем, попробуйте освоиться с функционалом. Заключение Всем спасибо за внимание, многие крупные вендоры сейчас уделяют особое внимание протоколу Netflow и придумывают различные сценарии применения. Как это может быть полезно именно для вас, пара примеров: после недельного анализа вашей сети вы поймете, что она была недостаточно сегментирована, или увидите какие-то подозрительные потоки. Дайте нам знать, если вам интересна более подробная настройка ntopng и софта, подобного ему — обязательно напишем про это статью! :).
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59