⚙️ MySQL разбор функции FIELD
Определение и использование
Функция FIELD() возвращает индексную позицию значения в списке значений.
Эта функция выполняет поиск без учета регистра.
Примечание: Если указанное значение не найдено в списке значений, то эта функция вернет 0. Если значение равно NULL, то эта функция вернет 0.
➡️ Читать дальше
@sqlhub
Определение и использование
Функция FIELD() возвращает индексную позицию значения в списке значений.
Эта функция выполняет поиск без учета регистра.
Примечание: Если указанное значение не найдено в списке значений, то эта функция вернет 0. Если значение равно NULL, то эта функция вернет 0.
➡️ Читать дальше
@sqlhub
👍8
💼 Руководство по архитектуре обработки запросов
Компонент Компонент SQL Server Database Engine обрабатывает запросы к различным архитектурам хранения данных, таким как локальные таблицы, секционированные таблицы и таблицы, распределенные по нескольким серверам. В следующих разделах описано, как SQL Server обрабатывает запросы и оптимизирует повторное использование запросов с помощью кэширования плана выполнения.
Режимы выполнения
Компонент SQL Server Database Engine может обрабатывать инструкции Transact-SQL в двух разных режимах:
выполнение в построчном режиме;
выполнение в пакетном режиме.
➡️ Читать дальше
@sqlhub
Компонент Компонент SQL Server Database Engine обрабатывает запросы к различным архитектурам хранения данных, таким как локальные таблицы, секционированные таблицы и таблицы, распределенные по нескольким серверам. В следующих разделах описано, как SQL Server обрабатывает запросы и оптимизирует повторное использование запросов с помощью кэширования плана выполнения.
Режимы выполнения
Компонент SQL Server Database Engine может обрабатывать инструкции Transact-SQL в двух разных режимах:
выполнение в построчном режиме;
выполнение в пакетном режиме.
➡️ Читать дальше
@sqlhub
👍7
Как сделать Case Sensitive сравнение в MySQL. Решение
Небинарные строки (CHAR, VARCHAR, TEXT) в MySQL по умолчанию не чувствительны к регистру. Поэтому запрос
Для вывода только одной записи с ‘SPG’ существуют следующие решения:
1. Приведение столбца к типу
2. Выбор чувствительного к регистру набора символов с помощью
Детальную документацию смотрите здесь.
#tips
@sqlhub
Небинарные строки (CHAR, VARCHAR, TEXT) в MySQL по умолчанию не чувствительны к регистру. Поэтому запрос
SELECT * FROM enterprise WHERE company = ‘SPG‘
выведет все три строки. Для вывода только одной записи с ‘SPG’ существуют следующие решения:
1. Приведение столбца к типу
BINARY
(т.к. тип BINARY чувствителен к регистру): SELECT * FROM enterprise WHERE BINARY company = ‘SPG‘;
2. Выбор чувствительного к регистру набора символов с помощью
COLLATE
:SELECT * FROM enterprise WHERE company COLLATE utf8mb4_0900_as_cs = ‘SPG‘;
Детальную документацию смотрите здесь.
#tips
@sqlhub
❤6👍1🔥1
Выберите корректно составленный запрос с функцией GROUP BY:
Anonymous Quiz
4%
select count(*) from Orders GROUP seller_id;
4%
select seller_id, count(*) from Orders GROUP seller_id;
90%
select seller_id, count(*) from Orders GROUP BY seller_id;
2%
select count(*) from Orders GROUP ON seller_id;
👍11👎2🤔2
SQL запросы быстро. Шпаргалка Часть 1.
Язык SQL очень прочно влился в жизнь бизнес-аналитиков и требования к кандидатам благодаря простоте, удобству и распространенности. Из собственного опыта могу сказать, что наиболее часто SQL используется для формирования выгрузок, витрин (с последующим построением отчетов на основе этих витрин) и администрирования баз данных. И поскольку повседневная работа аналитика неизбежно связана с выгрузками данных и витринами, навык написания SQL запросов может стать фактором, из-за которого кандидат или получит преимущество, или будет отсеян. Печальная новость в том, что не каждый может рассчитывать получить его на студенческой скамье. Хорошая новость в том, что в изучении SQL нет ничего сложного, это быстро, а синтаксис запросов прост и понятен. Особенно это касается тех, кому уже доводилось сталкиваться с более сложными языками.
Обучение SQL запросам я разделил на три части. Эта часть посвящена базовому синтаксису, который используется в 80-90% случаев. Следующие две части будут посвящены подзапросам, Join’ам и специальным операторам. Цель гайдов: быстро и на практике отработать синтаксис SQL, чтобы добавить его к арсеналу навыков.
➡️ Читать дальше
@sqlhub
Язык SQL очень прочно влился в жизнь бизнес-аналитиков и требования к кандидатам благодаря простоте, удобству и распространенности. Из собственного опыта могу сказать, что наиболее часто SQL используется для формирования выгрузок, витрин (с последующим построением отчетов на основе этих витрин) и администрирования баз данных. И поскольку повседневная работа аналитика неизбежно связана с выгрузками данных и витринами, навык написания SQL запросов может стать фактором, из-за которого кандидат или получит преимущество, или будет отсеян. Печальная новость в том, что не каждый может рассчитывать получить его на студенческой скамье. Хорошая новость в том, что в изучении SQL нет ничего сложного, это быстро, а синтаксис запросов прост и понятен. Особенно это касается тех, кому уже доводилось сталкиваться с более сложными языками.
Обучение SQL запросам я разделил на три части. Эта часть посвящена базовому синтаксису, который используется в 80-90% случаев. Следующие две части будут посвящены подзапросам, Join’ам и специальным операторам. Цель гайдов: быстро и на практике отработать синтаксис SQL, чтобы добавить его к арсеналу навыков.
➡️ Читать дальше
@sqlhub
👍12🔥1
💻 Экспериментируем с пользовательскими функциями JavaScript на Trino
Trino — это быстрый дистрибутивный механизм SQL-запросов, предназначенный для аналитики больших данных. Он позволяет подключаться ко всем данным и запрашивать их в полном объеме без необходимости копировать их в унифицированную систему хранения.
➡️ Читать дальше
⚙️ Trino
@sqlhub
Trino — это быстрый дистрибутивный механизм SQL-запросов, предназначенный для аналитики больших данных. Он позволяет подключаться ко всем данным и запрашивать их в полном объеме без необходимости копировать их в унифицированную систему хранения.
➡️ Читать дальше
⚙️ Trino
@sqlhub
🔥5
📖 Алекс Кригель и др. "SQL. Библия пользователя"
Книга уникальна тем, что в каждой главе приводится сравнение реализаций тех или иных запросов на диалектах трех ведущих СУБД. Благодаря этому она представляет собой исчерпывающий и практичный справочник по языку SQL для разработчиков от новичков до профессионалов.
📕 Книга
@sqlhub
Книга уникальна тем, что в каждой главе приводится сравнение реализаций тех или иных запросов на диалектах трех ведущих СУБД. Благодаря этому она представляет собой исчерпывающий и практичный справочник по языку SQL для разработчиков от новичков до профессионалов.
📕 Книга
@sqlhub
👍7😁1
⚙️ Хранимые процедуры SQL
Нередко операция с данными представляет набор инструкций, которые необходимо выполнить в определенной последовательности. Например, при добавлении данных покупки товара необходимо внести данные в таблицу заказов. Однако перед этим надо проверить, а есть ли покупаемый товар в наличии. Возможно, при этом понадобится проверить еще ряд дополнительных условий. То есть фактически процесс покупки товара охватывает несколько действий, которые должны выполняться в определенной последовательности. И в этом случае более оптимально будет инкапсулировать все эти действия в один объект - хранимую процедуру (stored procedure).
То есть по сути хранимые процедуры представляют набор инструкций, которые выполняются как единое целое. Тем самым хранимые процедуры позволяют упростить комплексные операции и вынести их в единый объект. Изменится процесс покупки товара, соответственно достаточно будет изменить код процедуры. То есть процедура также упрощает управление кодом.
Также хранимые процедуры позволяют ограничить доступ к данным в таблицах и тем самым уменьшить вероятность преднамеренных или неосознанных нежелательных действий в отношении этих данных.
И еще один важный аспект - производительность. Хранимые процедуры обычно выполняются быстрее, чем обычные SQL-инструкции. Все потому что код процедур компилируется один раз при первом ее запуске, а затем сохраняется в скомпилированной форме.
Для создания хранимой процедуры применяется команда CREATE PROCEDURE или CREATE PROC.
➡️ Читать дальше
@sqlhub
Нередко операция с данными представляет набор инструкций, которые необходимо выполнить в определенной последовательности. Например, при добавлении данных покупки товара необходимо внести данные в таблицу заказов. Однако перед этим надо проверить, а есть ли покупаемый товар в наличии. Возможно, при этом понадобится проверить еще ряд дополнительных условий. То есть фактически процесс покупки товара охватывает несколько действий, которые должны выполняться в определенной последовательности. И в этом случае более оптимально будет инкапсулировать все эти действия в один объект - хранимую процедуру (stored procedure).
То есть по сути хранимые процедуры представляют набор инструкций, которые выполняются как единое целое. Тем самым хранимые процедуры позволяют упростить комплексные операции и вынести их в единый объект. Изменится процесс покупки товара, соответственно достаточно будет изменить код процедуры. То есть процедура также упрощает управление кодом.
Также хранимые процедуры позволяют ограничить доступ к данным в таблицах и тем самым уменьшить вероятность преднамеренных или неосознанных нежелательных действий в отношении этих данных.
И еще один важный аспект - производительность. Хранимые процедуры обычно выполняются быстрее, чем обычные SQL-инструкции. Все потому что код процедур компилируется один раз при первом ее запуске, а затем сохраняется в скомпилированной форме.
Для создания хранимой процедуры применяется команда CREATE PROCEDURE или CREATE PROC.
➡️ Читать дальше
@sqlhub
👍9
Миграция кода с Oracle на PostgreSQL: особенности и пути обхода, средства конвертации, вспомогательные модули
Эта статья завершает цикл о миграции с СУБД Oracle на СУБД PostgreSQL. В первых двух статьях рассматривались вопросы и устоявшиеся способы переноса данных из одной СУБД в другую (часть 1, часть 2). В третьей статье представлена часть особенностей, которые нужно учесть при переводе хранимого кода с PL/SQL на PL/pgSQL. В сегодняшнем материале рассматриваются:
- Оставшаяся часть особенностей.
- Адаптация и конвертация кода .
- Выбор средств для конвертации кода.
➡️ Читать дальше
@sqlhub
Эта статья завершает цикл о миграции с СУБД Oracle на СУБД PostgreSQL. В первых двух статьях рассматривались вопросы и устоявшиеся способы переноса данных из одной СУБД в другую (часть 1, часть 2). В третьей статье представлена часть особенностей, которые нужно учесть при переводе хранимого кода с PL/SQL на PL/pgSQL. В сегодняшнем материале рассматриваются:
- Оставшаяся часть особенностей.
- Адаптация и конвертация кода .
- Выбор средств для конвертации кода.
➡️ Читать дальше
@sqlhub
👍6
🔥 Полезнейшая Подборка каналов
🦾 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
🐍 Python
@pythonl – python для датасаентиста
@pro_python_code – python на русском
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
☕️ Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
💡 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
🦫 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
🐧 Linux
@inux_kal - чат kali linux
@inuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
🔋 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
🦾 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
🐍 Python
@pythonl – python для датасаентиста
@pro_python_code – python на русском
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
☕️ Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
💡 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
🦫 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
🐧 Linux
@inux_kal - чат kali linux
@inuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
🔋 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
👍6
💡 Оператор PIVOT
Несколько статей будут посвящены тому как в SQL Server реализован оператор PIVOT и UNPIVOT. Начнем с оператора PIVOT. Оператор PIVOT берет нормализованную таблицу и преобразует ее в другой вид, в котором столбцы результирующей таблицы получаются из значений исходной таблицы. Например, предположим, что мы хотим хранить данные о суммарной выручке от продаж за год по каждому из сотрудников.
➡️ Читать дальше
@sqlhub
Несколько статей будут посвящены тому как в SQL Server реализован оператор PIVOT и UNPIVOT. Начнем с оператора PIVOT. Оператор PIVOT берет нормализованную таблицу и преобразует ее в другой вид, в котором столбцы результирующей таблицы получаются из значений исходной таблицы. Например, предположим, что мы хотим хранить данные о суммарной выручке от продаж за год по каждому из сотрудников.
➡️ Читать дальше
@sqlhub
👍12🔥1
Поменять местами соседние записи
В таблице seat хранятся имена учеников и сведениях об их местах в классе.
Напишите MySQL запрос, который поменяет местами соседних учеников.
Если количество учеников нечётное — последнего ученика никуда пересаживать не надо.
Исходная таблица:
id student
1 Abbot
2 Doris
3 Emerson
4 Green
5 Jeames
Что должно получиться:
id student
1 Doris
2 Abbot
3 Green
4 Emerson
5 Jeames
Решение
SELECT
CASE
WHEN ((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
WHEN id%2 = 1 THEN id + 1
ELSE id - 1
END AS id, student
FROM seat
ORDER BY id;
@sqlhub
В таблице seat хранятся имена учеников и сведениях об их местах в классе.
Напишите MySQL запрос, который поменяет местами соседних учеников.
Если количество учеников нечётное — последнего ученика никуда пересаживать не надо.
Исходная таблица:
id student
1 Abbot
2 Doris
3 Emerson
4 Green
5 Jeames
Что должно получиться:
id student
1 Doris
2 Abbot
3 Green
4 Emerson
5 Jeames
Решение
SELECT
CASE
WHEN ((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
WHEN id%2 = 1 THEN id + 1
ELSE id - 1
END AS id, student
FROM seat
ORDER BY id;
@sqlhub
👍17🤔1
Трюк дня. Возвратить 0 для функции
Перепишите запрос так, чтобы он возвратил 0, если для функции SUM не найдено ни одного значения, кроме
И возвратил сумму, если значения найдены.
#tips
SUM
если не найдено ни одного значения в MySQL Перепишите запрос так, чтобы он возвратил 0, если для функции SUM не найдено ни одного значения, кроме
NULLs
. И возвратил сумму, если значения найдены.
SELECT SUM (column_1)
FROM table
WHERE column_2 = ‘Test‘;
Решение будет вечером. #tips
👍11
В чем разница между функциями
Единственная разница между функциями
В таких случаях
Тогда как
Например, рассмотрим набор
Для такого набора RANK() вернет
@sqlhub
RANK()
и DENSE_RANK()
? Единственная разница между функциями
RANK()
и DENSE_RANK()
заключается в случаях, когда несколько значений в наборе имеют одинаковый ранг. В таких случаях
RANK()
будет назначать непоследовательные «ранги» значениям в наборе.Тогда как
DENSE_RANK()
будет назначать последовательные ранги значениям в наборе.Например, рассмотрим набор
{25, 25, 50, 75, 75, 100}
. Для такого набора RANK() вернет
{1, 1, 3, 4, 4, 6}
(обратите внимание, что значения 2 и 5 пропущены), тогда как DENSE_RANK()
вернет {1, 1, 2, 3, 3, 4}
.
#вопросы #собеседование@sqlhub
👍20
Функция overlay (Databricks SQL)
Заменяет input на replace, который начинается с pos и имеет длину len.
Синтаксис
Копировать
overlay(input, replace, pos[, len])
Копировать
overlay(input PLACING replace FROM pos [FOR len])
Аргументы
input: выражение STRING или BINARY.
replace: выражение того же типа, что и input.
pos: выражение INTEGER.
len: необязательное выражение INTEGER.
Возвращаемое значение
Тип результата соответствует типу input.
Если pos имеет отрицательное значение, отсчет положения начинается с конца. len должно быть иметь значение не меньше 0. len задает длину фрагмента в input, который будет заменен. По умолчанию len имеет значение, совпадающее с длиной replace.
Примеры
SQL
@sqlhub
Заменяет input на replace, который начинается с pos и имеет длину len.
Синтаксис
Копировать
overlay(input, replace, pos[, len])
Копировать
overlay(input PLACING replace FROM pos [FOR len])
Аргументы
input: выражение STRING или BINARY.
replace: выражение того же типа, что и input.
pos: выражение INTEGER.
len: необязательное выражение INTEGER.
Возвращаемое значение
Тип результата соответствует типу input.
Если pos имеет отрицательное значение, отсчет положения начинается с конца. len должно быть иметь значение не меньше 0. len задает длину фрагмента в input, который будет заменен. По умолчанию len имеет значение, совпадающее с длиной replace.
Примеры
SQL
> SELECT overlay('Spark SQL', 'ANSI ', 7, 0);
Spark ANSI SQL
> SELECT overlay('Spark SQL' PLACING '_' FROM 6);
Spark_SQL
> SELECT overlay('Spark SQL' PLACING 'CORE' FROM 7);
Spark CORE
> SELECT overlay('Spark SQL' PLACING 'ANSI ' FROM 7 FOR 0);
Spark ANSI SQL
> SELECT overlay('Spark SQL' PLACING 'tructured' FROM 2 FOR 4);
Structured SQL
> SELECT overlay(encode('Spark SQL', 'utf-8') PLACING encode('_', 'utf-8') FROM 6);
[53 70 61 72 6B 5F 53 51 4C]
@sqlhub
👍6
PostgreSQL. Основы языка SQL
В пособии рассматриваются следующие темы:
- Введение в базы данных и SQL
- Создание рабочей среды
- Основные операции с таблицами
- Типы данных СУБД PostgreSQL
- Основы языка определения данных
- Запросы
- Изменение данных
- Индексы
- Транзакции
- Повышение производительности
📓 Книга
@sqlhub
В пособии рассматриваются следующие темы:
- Введение в базы данных и SQL
- Создание рабочей среды
- Основные операции с таблицами
- Типы данных СУБД PostgreSQL
- Основы языка определения данных
- Запросы
- Изменение данных
- Индексы
- Транзакции
- Повышение производительности
📓 Книга
@sqlhub
👍9❤2🥰1😁1
🏄♀️ 5 примеров атаки SQL-инъекций и их предотвращение
Эта атака позволяет хакерам выполнять вредоносные действия в онлайн-свойствах, где проверка входных данных немного ниже среднего.
Согласно отчету Positive Technology, SQL-инъекция по-прежнему остается одной из основных лазеек в мире.
➡️ Читать дальше
@sqlhub
Эта атака позволяет хакерам выполнять вредоносные действия в онлайн-свойствах, где проверка входных данных немного ниже среднего.
Согласно отчету Positive Technology, SQL-инъекция по-прежнему остается одной из основных лазеек в мире.
➡️ Читать дальше
@sqlhub
👍7❤2🔥1
Выберите пример правильно составленного запроса с использованием агрегирующей функции SUM:
Anonymous Quiz
64%
select sum(price) from Orders;
10%
select sum(price), customer_name from Orders;
8%
select * from Orders where price=sum();
18%
select sum() from Orders group by price desc;
❤6👍4🤯3🔥1
Как хранить сеть дорог в БД для построения маршрута?
И так, формулировка задачи следующая: есть база данных, в ней хранится информация о дорогах, включая координаты, нужно реализовать построение маршрутов из начальной точки к конечной.
Построение маршрутов - задача распространенная, и, как для каждой распространённой задачи, для неё давно существуют реализации. Мне нравится GraphHopper. Да так нравится, что моя первая статья на Хабре была про то, как создать для него собственные правила построения графа дорог.
➡️ Читать дальше
@sqlhub
И так, формулировка задачи следующая: есть база данных, в ней хранится информация о дорогах, включая координаты, нужно реализовать построение маршрутов из начальной точки к конечной.
Построение маршрутов - задача распространенная, и, как для каждой распространённой задачи, для неё давно существуют реализации. Мне нравится GraphHopper. Да так нравится, что моя первая статья на Хабре была про то, как создать для него собственные правила построения графа дорог.
➡️ Читать дальше
@sqlhub
👍10❤2🔥1