Вы можете легко выполнить запрос MySQL из командной строки, используя команду MySQL вместе с опцией
-e.
mysql -h [хост] -u [имя пользователя] -p [пароль] [база данных] -e [SQL_запрос]
В приведенной выше команде необходимо указать имя пользователя, пароль, имя базы данных для соединения с базой данных MySQL. После опции
-e
необходимо указать SQL-запрос, который будет выполняться.Вот простой пример выполнения SQL-запроса при подключении к локальной базе данных.
mysql -utest_user -ptest_password -hlocalhost db -e "SELECT * FROM table;".
Вы также можете опустить аргумент имени базы данных
'db',
если вы ссылаетесь на нее в SQL-запросе.mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;"
Добавление точки с запятой в конце SQL-запроса необязательно. Но если вы хотите выполнить несколько SQL-запросов, вам необходимо разделить их с помощью точки с запятой, как показано в следующем примере.
mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table; SELECT * from db.table2;"
Вы также можете выполнять отдельные команды MySQL с опцией
-e,
если хотите.mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;"
mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table2;"
Вы также можете хранить свои SQL-запросы в файле и указать MySQL прочитать этот файл. Допустим, у вас есть файл queries.txt
nano queries.txt
со следующими запросами.
SELECT * FROM db.table;
SELECT * FROM db.table2;
Теперь, если вы хотите выполнить запросы в файле queries.txt, вы можете сделать это с помощью следующей команды. В этом случае MySQL будет читать входные данные из файла queries.txt.
mysql -utest_user -ptest_password -hlocalhost < queries.txt
Ключевым моментом, на который следует обратить внимание, является то, что вы должны указать ваш SQL-запрос в двойных кавычках. Если приведенный выше синтаксис команды вам не подходит, попробуйте заключить SQL-запрос в одинарные кавычки.
Также, если ваш SQL-запрос сам содержит двойные кавычки, то их нужно убрать, добавив перед ними обратную косую черту.
Результат вышеприведенного запроса будет выведен на консоль. Если вы хотите сохранить этот результат в другом файле, вам нужно будет использовать операторы перенаправления. Вот пример сохранения результата запроса MySQL в файл test.txt.
mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;" > /home/user/test.txt
Одним из преимуществ выполнения запросов MySQL в командной строке является то, что вы можете передавать вывод другим командам Linux в соответствии с вашими требованиями. Вот простой пример, в котором мы передаем вывод запроса MySQL команде grep.
$ mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;" | grep 'abc'
Заключение
В этом посте мы рассмотрели, как выполнять запросы MySQL из командной строки, сохранять их вывод в файлы и даже передавать их другим командам Linux для дальнейшей обработки. Вы можете эффективно использовать их в сценарии оболочки для автоматического получения данных, их обработки и принятия мер в зависимости от полученной информации.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥5❤1
🔍Где и как учить SQL бесплатно?
SQLZoo - это бесплатный онлайн ресурс, который предлагает интерактивные уроки и задания для изучения SQL. Уроки начинаются с простых запросов и постепенно усложняются по мере продвижения в обучении.
W3Schools SQL - известный онлайн-ресурс, предлагающий уроки и примеры для изучения SQL и других языков программирования. Здесь пользователи могут найти множество материалов, которые помогут им углубить свои знания и применить их на практике.
Codecademy SQL - интерактивный курс для изучения SQL с возможностью практического применения на практике.
SQLBolt - это ресурс, который помогает начинающим и опытным пользователям SQL с помощью бесплатных уроков и задач.
Udacity SQL - курс известного онлайн-образовательного ресурса, позволит вам освоить основы языка SQL и показать, как применять его для анализа данных
Khan Academy SQL - бесплатный курс SQL, предоставляющий уроки и задачи для изучения языка.
LearnSQL - платный ресурс для изучения SQL. Содержит большое количество уроков и практических заданий.
SQLCourse - представляет собой бесплатную платформу, где можно овладеть навыками SQL. Здесь предоставлены обучающие уроки, практические задания и тесты, позволяющие проверить свои знания.
SQL Tutorial - это русскоязычный бесплатный ресурс, предоставляющий возможность изучения SQL. Здесь можно найти уроки и задания, которые помогут вам применять полученные знания на практике.
SQL Zoo - бесплатный ресурс для изучения SQL, содержащий уроки и задания на основе базы данных AdventureWorks.
Mode Analytics SQL Tutorial - бесплатный курс, который предлагает обучение базовым и продвинутым навыкам работы с языком SQL.
SQL Exercises - это бесплатный онлайн-ресурс, который предлагает задачи и упражнения для изучения и практики SQL. Ресурс содержит множество заданий, которые помогут вам развить практические навыки работы с SQL.
SQL Fiddle – это интернет-сервис, который предоставляет возможность создавать, тестировать и отлаживать SQL-запросы совершенно бесплатно.
Learn SQL the Hard Way - книга для изучения SQL, содержащая уроки и задания для практической работы.
DataCamp SQL- курс SQL от DataCamp, который научит Вас основам языка SQL и его применению в анализе данных. Содержит уроки и практические задания на практике.
@sqlhub
SQLZoo - это бесплатный онлайн ресурс, который предлагает интерактивные уроки и задания для изучения SQL. Уроки начинаются с простых запросов и постепенно усложняются по мере продвижения в обучении.
W3Schools SQL - известный онлайн-ресурс, предлагающий уроки и примеры для изучения SQL и других языков программирования. Здесь пользователи могут найти множество материалов, которые помогут им углубить свои знания и применить их на практике.
Codecademy SQL - интерактивный курс для изучения SQL с возможностью практического применения на практике.
SQLBolt - это ресурс, который помогает начинающим и опытным пользователям SQL с помощью бесплатных уроков и задач.
Udacity SQL - курс известного онлайн-образовательного ресурса, позволит вам освоить основы языка SQL и показать, как применять его для анализа данных
Khan Academy SQL - бесплатный курс SQL, предоставляющий уроки и задачи для изучения языка.
LearnSQL - платный ресурс для изучения SQL. Содержит большое количество уроков и практических заданий.
SQLCourse - представляет собой бесплатную платформу, где можно овладеть навыками SQL. Здесь предоставлены обучающие уроки, практические задания и тесты, позволяющие проверить свои знания.
SQL Tutorial - это русскоязычный бесплатный ресурс, предоставляющий возможность изучения SQL. Здесь можно найти уроки и задания, которые помогут вам применять полученные знания на практике.
SQL Zoo - бесплатный ресурс для изучения SQL, содержащий уроки и задания на основе базы данных AdventureWorks.
Mode Analytics SQL Tutorial - бесплатный курс, который предлагает обучение базовым и продвинутым навыкам работы с языком SQL.
SQL Exercises - это бесплатный онлайн-ресурс, который предлагает задачи и упражнения для изучения и практики SQL. Ресурс содержит множество заданий, которые помогут вам развить практические навыки работы с SQL.
SQL Fiddle – это интернет-сервис, который предоставляет возможность создавать, тестировать и отлаживать SQL-запросы совершенно бесплатно.
Learn SQL the Hard Way - книга для изучения SQL, содержащая уроки и задания для практической работы.
DataCamp SQL- курс SQL от DataCamp, который научит Вас основам языка SQL и его применению в анализе данных. Содержит уроки и практические задания на практике.
@sqlhub
👍22🔥4❤3
Жестовый язык, квази-эксперименты и коды на PySpark Pipeline: Х5 Tech проведет Data Science Meetup #2
На онлайн-митапе 5 июля выступят спикеры из X5 Tech, Яндекс Маркет и SberDevices, чтобы поделиться своим опытом и обсудить несколько тем:
➖ Как с помощью PySpark Pipeline писать читаемый, легко тестируемый и поддерживаемый код?
➖ Как оценить эффект без стандартных A/B-тестов с помощью квази-экспериментов методом Propensity Score?
➖ Какие есть проблемы и решения в распознавании жестового языка?
🔔5 июля в 18:00
Участие бесплатно, нужна регистрация
На онлайн-митапе 5 июля выступят спикеры из X5 Tech, Яндекс Маркет и SberDevices, чтобы поделиться своим опытом и обсудить несколько тем:
➖ Как с помощью PySpark Pipeline писать читаемый, легко тестируемый и поддерживаемый код?
➖ Как оценить эффект без стандартных A/B-тестов с помощью квази-экспериментов методом Propensity Score?
➖ Какие есть проблемы и решения в распознавании жестового языка?
🔔5 июля в 18:00
Участие бесплатно, нужна регистрация
🔍 MySQL vs MongoDB
MySQL
Классическая реляционная база, известная практически каждому. Рассмотрим ее основные плюсы:
1. Проверенное временем решение. Действительно сложно с этим спорить. К тому же, современная MySQL — очень развитая и надежная СУБД, имеющая большое сообщество и множество примеров реализации.
2. Высокая совместимость. MySQL доступна на основных платформах: Linux, Mac, Windows, BSD, Solaris. Еще существуют библиотеки для Node.js, C++, Ruby, C#, Java, PHP, Perl, Python.
3. Окупаемость. Не секрет, что СУБД имеет открытый исходный код, который находится в свободном доступе.
4. Реплицируемость. Вы можете распределять БД между несколькими узлами, понижая нагрузку и повышая масштабируемость и доступность.
5. Шардинг. Если шардинг на многих SQL-базах и невозможен, то к MySQL это не относится.
MongoDB
Яркий представитель нереляционных БД, имеющий свои плюсы:
1. Динамическая схема. Позволяет более гибко работать со схемами данных без надобности в изменении самих данных.
2. Масштабируемость. MongoDB масштабируется горизонтально, поэтому вы сможете легко снизить нагрузку на серверы при наличии больших объемов данных.
3. Удобное управление. Отдельный администратор не нужен, а повышенное удобство применения позволяет использовать эту БД как разработчикам, так и системным администраторам.
4. Скорость. База отличается повышенной производительностью при выполнении простых запросов.
5. Гибкость. Вы можете добавлять поля либо колонки без какого-либо вреда для уже существующих данных и производительности СУБД.
Что же выбрать?
На эту тему можно написать отдельную статью, но мы ограничимся несколькими предложениями:
— MySQL — отличный выбор для любого проекта, если у нас предопределена структура и заданы схемы;
— MongoDB — прекрасный вариант для быстрорастущих проектов, не имеющих определенной схемы данных. И особенно она подходит, если вы никак не можете определить схему своей БД либо вам не годится ни одна из существующих схем из других СУБД.
@sqlhub
MySQL
Классическая реляционная база, известная практически каждому. Рассмотрим ее основные плюсы:
1. Проверенное временем решение. Действительно сложно с этим спорить. К тому же, современная MySQL — очень развитая и надежная СУБД, имеющая большое сообщество и множество примеров реализации.
2. Высокая совместимость. MySQL доступна на основных платформах: Linux, Mac, Windows, BSD, Solaris. Еще существуют библиотеки для Node.js, C++, Ruby, C#, Java, PHP, Perl, Python.
3. Окупаемость. Не секрет, что СУБД имеет открытый исходный код, который находится в свободном доступе.
4. Реплицируемость. Вы можете распределять БД между несколькими узлами, понижая нагрузку и повышая масштабируемость и доступность.
5. Шардинг. Если шардинг на многих SQL-базах и невозможен, то к MySQL это не относится.
MongoDB
Яркий представитель нереляционных БД, имеющий свои плюсы:
1. Динамическая схема. Позволяет более гибко работать со схемами данных без надобности в изменении самих данных.
2. Масштабируемость. MongoDB масштабируется горизонтально, поэтому вы сможете легко снизить нагрузку на серверы при наличии больших объемов данных.
3. Удобное управление. Отдельный администратор не нужен, а повышенное удобство применения позволяет использовать эту БД как разработчикам, так и системным администраторам.
4. Скорость. База отличается повышенной производительностью при выполнении простых запросов.
5. Гибкость. Вы можете добавлять поля либо колонки без какого-либо вреда для уже существующих данных и производительности СУБД.
Что же выбрать?
На эту тему можно написать отдельную статью, но мы ограничимся несколькими предложениями:
— MySQL — отличный выбор для любого проекта, если у нас предопределена структура и заданы схемы;
— MongoDB — прекрасный вариант для быстрорастущих проектов, не имеющих определенной схемы данных. И особенно она подходит, если вы никак не можете определить схему своей БД либо вам не годится ни одна из существующих схем из других СУБД.
@sqlhub
👍15🔥2❤1
Думаю, каждый хоть раз использовал команду explain или хотя бы слышал про нее. Эта команда демонстрирует план выполнения запроса, но как именно СУБД приходит к нему остается загадкой. Да и как вообще СУБД понимает, что выбранный запрос оптимален? Неужели она проверяет все возможные варианты?
В этой статье я постараюсь дать небольшое представление о том, как работают оптимизаторы запросов с теоретической точки зрения.
Начнем с того, что можно выделить два основных подхода к поиску наиболее эффективного варианта выполнения: эвристический и стоимостной.
📌 Читать
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤3👍3
При выборе баз данных для текущего проекта (или при замене тех, которые не отвечают вашим текущим потребностям) количество возможных вариантов очень велико. Это и хорошо, и плохо, ведь нужны какие-то критерии фильтрации.
Сегодня есть гораздо больше баз данных, чем когда-либо. В декабре 2012 года, когда DB-Engines.com впервые начал ранжировать базы данных, у него получился список из 73 систем (существенный рост по сравнению с самым первым списком из 18 систем). Спустя десять лет, на декабрь 2022 года в списке было уже почти четыреста систем. За последнее десятилетие произошёл настоящий кембрийский взрыв технологий баз данных.
Нужно ориентироваться в обширном пространстве вариантов: SQL, NoSQL, множество «многомодельных» баз данных, которые могут быть сочетанием SQL и NoSQL, или множественные модели данных NoSQL (сочетающие две или более опций: документы, ключи-значения, широкие столбцы, графы и так далее).
Кроме того, пользователи не должны путать популярность с применимостью для них. Хотя сетевой эффект имеет свои преимущества («Все пользуются X, поэтому не ошибусь, если выберу её»), он также может привести к групповому мышлению, торможению инноваций и конкуренции.
▪ Читать статью
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🥰1
Два продвинутых SQL-метода, которые могут значительно улучшить ваши запросы
SQL — это основа для каждого специалиста по работе с данными. Неважно, являетесь ли вы аналитиком данных, специалистом по данным или инженером по обработке данных, вам необходимо иметь четкое представление о том, как писать чистые и эффективные SQL-запросы.
Это связано с тем, что за любым тщательным анализом данных или любой сложной моделью машинного обучения стоят базовые данные, и эти данные должны откуда-то поступать.
Cегодня мы рассмотрим две новые техники SQL, которые вы можете добавить в свой набор инструментов, чтобы вывести ваши запросы на новый уровень. Эти методы называются Обобщённое табличное выражение (CTE) и Оконные функции.
▪ Читать
@sqlhub
SQL — это основа для каждого специалиста по работе с данными. Неважно, являетесь ли вы аналитиком данных, специалистом по данным или инженером по обработке данных, вам необходимо иметь четкое представление о том, как писать чистые и эффективные SQL-запросы.
Это связано с тем, что за любым тщательным анализом данных или любой сложной моделью машинного обучения стоят базовые данные, и эти данные должны откуда-то поступать.
Cегодня мы рассмотрим две новые техники SQL, которые вы можете добавить в свой набор инструментов, чтобы вывести ваши запросы на новый уровень. Эти методы называются Обобщённое табличное выражение (CTE) и Оконные функции.
▪ Читать
@sqlhub
👍18❤3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍6🥰2
🕵♂Использование CROSS JOIN для задач поиска пересечений в исторических данных
🔵 CROSS JOIN (или полное соединение таблиц без условий) — декартова перемножение множеств. Говоря простым языком — для каждого варианта первого множества будет сопоставлены все варианты второго множества.
• Правильное использование этого типа соединения может помочь в решении сложных задач, например, нахождении пересечений в исторических данных.
• Структура таблиц представленных примеров в изображении 1.
📕 Допустим: клиент Сидоров Степан Павлович подал заявку на кредит. На некотором этапе рассмотрения потребовался анализ платежеспособности клиента андеррайтером.
Заявка автоматически распределилась на сотрудника Петрова Екатерина Павловна.
На первый взгляд ничего подозрительного нет — в ФИО людей совпадает только отчество, что является широко распространенной ситуацией.
❗️ Однако, при детальном анализе выясняется, что девичья фамилия андеррайтера и клиента совпадают (Сидорова / Сидоров) изображение 2.
В таком случае заявка клиента должна была распределиться на другого сотрудника, чтобы решение, вынесенное по заявке, было не предвзятым.
• Для решения данной задачи можно использовать простой запрос с CROSS JOIN изображение 3.
➡️ Продолжение
• Правильное использование этого типа соединения может помочь в решении сложных задач, например, нахождении пересечений в исторических данных.
• Структура таблиц представленных примеров в изображении 1.
Заявка автоматически распределилась на сотрудника Петрова Екатерина Павловна.
На первый взгляд ничего подозрительного нет — в ФИО людей совпадает только отчество, что является широко распространенной ситуацией.
В таком случае заявка клиента должна была распределиться на другого сотрудника, чтобы решение, вынесенное по заявке, было не предвзятым.
• Для решения данной задачи можно использовать простой запрос с CROSS JOIN изображение 3.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
📌 SQL SELECT TOP, LIMIT, ROWNUM
TOP
Инструкция SELECT TOP используется для указания количества возвращаемых записей.
Она полезна для больших таблиц с тысячами записей. Возврат большого количества записей может повлиять на производительность.
Не все базы данных поддерживают SELECT TOP. MySQL поддерживает предложение LIMIT для выбора ограниченного числа записей, в то время как Oracle использует ROWNUM.
▪ Синтаксис SQL Server / MS Access:
▪ Синтаксис MySQL:
▪ Синтаксис Oracle:
Примеры SQL TOP, LIMIT и ROWNUM
▪ Следующая инструкция SQL выбирает первые три записи из таблицы "Customers":
▪ Следующий оператор SQL показывает эквивалентный пример использования предложения LIMIT:
▪ Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
Пример SQL TOP PERCENT
▪ Следующая инструкция SQL выбирает первые 50% записей из таблицы "Customers":
Добавить WHERE
▪ Следующая инструкция SQL выбирает первые три записи из таблицы "Customers", где страна - "Germany":
▪ Следующий оператор SQL показывает эквивалентный пример использования LIMIT:
▪ Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
@sqlhub
TOP
Инструкция SELECT TOP используется для указания количества возвращаемых записей.
Она полезна для больших таблиц с тысячами записей. Возврат большого количества записей может повлиять на производительность.
Не все базы данных поддерживают SELECT TOP. MySQL поддерживает предложение LIMIT для выбора ограниченного числа записей, в то время как Oracle использует ROWNUM.
▪ Синтаксис SQL Server / MS Access:
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
▪ Синтаксис MySQL:
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
▪ Синтаксис Oracle:
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
Примеры SQL TOP, LIMIT и ROWNUM
▪ Следующая инструкция SQL выбирает первые три записи из таблицы "Customers":
SELECT TOP 3 * FROM Customers;
▪ Следующий оператор SQL показывает эквивалентный пример использования предложения LIMIT:
SELECT * FROM Customers
LIMIT 3;
▪ Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
SELECT * FROM Customers
WHERE ROWNUM <= 3;
Пример SQL TOP PERCENT
▪ Следующая инструкция SQL выбирает первые 50% записей из таблицы "Customers":
SELECT TOP 50 PERCENT * FROM Customers;
Добавить WHERE
▪ Следующая инструкция SQL выбирает первые три записи из таблицы "Customers", где страна - "Germany":
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
▪ Следующий оператор SQL показывает эквивалентный пример использования LIMIT:
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
▪ Следующая инструкция SQL показывает соответствующий пример использования параметра ROWNUM:
SELECT * FROM Customers
WHERE Country='Germany' AND ROWNUM <= 3;
@sqlhub
👍18❤2🔥2
🏃Как ускорить базу данных при помощи шардирования
• Шардирование было одним из первых механизмов, позволяющих распределять базы данных для повышения их производительности. Последние инновации превратили шардирование в один из лучших механизмов в своем роде.
🤔 Для чего требуется шардирование?
• Традиционные базы данных порой не справляются с обработкой растущих объемов данных и нарастающего трафика запросов. Сегодня очень популярны концепции NoSQL и NewSQL – соответственно, на рынке баз данных появляется все больше продуктов, вдохновленных этими новыми концепциями. Но их одних недостаточно, чтобы решить все более серьезные проблемы с данными.
Шардирование – это прием, позволяющий разбивать данные на отдельные строки и столбцы, хранимые на отдельных инстансах серверов базы данных. Так удается распределить нагрузку, оказываемую трафиком. Каждая такая малая таблица называется «шард». Некоторые NoSQL-продукты шардируются, таковы, например, Apache HBase или MongoDB. Шардинговая архитектура встроена в NewSQL-системы.
👀Как шардировать базу данных?
Один из наилучших способов создания шардов таков: данные нужно разделять на множество небольших таблиц. Они также называются «сегментами» (partitions).
Вот две ключевые составляющие шардирования:
▪Шардинговый ключ: конкретное значение в столбце, указывающее, в каком шарде хранится данная строка.
▪Шардинговый алгоритм: алгоритм, согласно которому ваши данные распределяются в одном или нескольких шардах.
Шаг 1: Проанализировать сценарий запроса и распределение данных, чтобы найти шардинговый ключ и шардинговый алгоритм
Шаг 2: Миграция имеющихся данных
Шаг 3: Перебросить трафик на новый кластер
Более детально тут. 👈
@sqlhub
• Шардирование было одним из первых механизмов, позволяющих распределять базы данных для повышения их производительности. Последние инновации превратили шардирование в один из лучших механизмов в своем роде.
🤔 Для чего требуется шардирование?
• Традиционные базы данных порой не справляются с обработкой растущих объемов данных и нарастающего трафика запросов. Сегодня очень популярны концепции NoSQL и NewSQL – соответственно, на рынке баз данных появляется все больше продуктов, вдохновленных этими новыми концепциями. Но их одних недостаточно, чтобы решить все более серьезные проблемы с данными.
Шардирование – это прием, позволяющий разбивать данные на отдельные строки и столбцы, хранимые на отдельных инстансах серверов базы данных. Так удается распределить нагрузку, оказываемую трафиком. Каждая такая малая таблица называется «шард». Некоторые NoSQL-продукты шардируются, таковы, например, Apache HBase или MongoDB. Шардинговая архитектура встроена в NewSQL-системы.
👀Как шардировать базу данных?
Один из наилучших способов создания шардов таков: данные нужно разделять на множество небольших таблиц. Они также называются «сегментами» (partitions).
Вот две ключевые составляющие шардирования:
▪Шардинговый ключ: конкретное значение в столбце, указывающее, в каком шарде хранится данная строка.
▪Шардинговый алгоритм: алгоритм, согласно которому ваши данные распределяются в одном или нескольких шардах.
Шаг 1: Проанализировать сценарий запроса и распределение данных, чтобы найти шардинговый ключ и шардинговый алгоритм
Шаг 2: Миграция имеющихся данных
Шаг 3: Перебросить трафик на новый кластер
Более детально тут. 👈
@sqlhub
👍10🔥3❤1
🧠 Основы SQL: работа с SELECT TOP
• При работе с большими базами данных часто возникает необходимость ограничить количество результатов, возвращаемых запросом. Для этого в SQL существует запрос SELECT TOP.
👀3 примера, как можно использовать эту мощную функцию:
1. Выбор определенного количества записей
Простейшее использование SELECT TOP заключается в указании количества записей, которые необходимо вернуть.
2. Выбор части записей
SELECT TOP может также возвращать определенный процент записей. Это может быть полезно, когда необходимо получить подмножество данных.
3. Использование SELECT TOP с TIES
В некоторых случаях требуется вернуть все записи, имеющие общее значение с последней записью в выборке TOP. SELECT TOP WITH TIES позволяет это сделать.
• Предложение SELECT TOP является универсальным инструментом SQL для ограничения и уточнения результатов запросов!
@sqlhub
• При работе с большими базами данных часто возникает необходимость ограничить количество результатов, возвращаемых запросом. Для этого в SQL существует запрос SELECT TOP.
👀3 примера, как можно использовать эту мощную функцию:
1. Выбор определенного количества записей
Простейшее использование SELECT TOP заключается в указании количества записей, которые необходимо вернуть.
-- Select the top 5 employees based on salary
SELECT TOP 5 *
FROM Employees
ORDER BY Salary DESC;
2. Выбор части записей
SELECT TOP может также возвращать определенный процент записей. Это может быть полезно, когда необходимо получить подмножество данных.
-- Select the top 10% employees based on salary
SELECT TOP 10 PERCENT *
FROM Employees
ORDER BY Salary DESC;
3. Использование SELECT TOP с TIES
В некоторых случаях требуется вернуть все записи, имеющие общее значение с последней записью в выборке TOP. SELECT TOP WITH TIES позволяет это сделать.
-- Select the top 5 employees based on salary, include ties
SELECT TOP 5 WITH TIES *
FROM Employees
ORDER BY Salary DESC;
• Предложение SELECT TOP является универсальным инструментом SQL для ограничения и уточнения результатов запросов!
@sqlhub
👍12❤4🔥3
В начале 2023 года вышла SQLAlchemy 2.0 — библиотека на Python для работы с реляционными СУБД, которая работает с Object Relational Mapper (объектно-реляционным отображением). Основная задача SQLAlchemy — синхронизация объектов Python с данными в БД.
То есть с помощью SQLAlchemy можно описывать структуры БД и работать с их данными на объектно-ориентированном коде на Python без использования чистого SQL. Другая важная особенность SQLAlchemy — код для работы с базой данных будет одинаковым вне зависимости от БД, которую использует разработчик. Такой подход позволяет без проблем мигрировать с одной базой данных на другую.
Полный список нововведений в SQLAlchemy 2.0 можно посмотреть в официальной документации сервиса.
▪ Читать
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3👍2👎1
🤔 10 аргументов “за” и “против” SQL
• Вторая по обсуждаемости тема в среде специалистов по SQL: как произносить то, что большинство людей называют Sequel ([сиквел] вместо [эс кью эл]). Это удивительно, поскольку язык существует более 40 лет.
• Но, пожалуй, самая обсуждаемая тема, связанная с SQL, — это вопрос о том, считается ли он языком программирования.
Почему SQL не является языком программирования
🟢 Создание и выполнение запросов, а не скриптов
🟢 Не изменяет состояние
🟢 Отсутствие циклирования
🟢 Репутация в отрасли
Почему SQL является языком программирования
🟣 Соответствие критерию Тьюринга
🟣 Переменные, условная логика, определения функций
🟣 Возможность создавать приложения (хотя это сложно)
🟣 Так считают в Google
Подробное разъяснение читай тут
@sqlhub
• Вторая по обсуждаемости тема в среде специалистов по SQL: как произносить то, что большинство людей называют Sequel ([сиквел] вместо [эс кью эл]). Это удивительно, поскольку язык существует более 40 лет.
• Но, пожалуй, самая обсуждаемая тема, связанная с SQL, — это вопрос о том, считается ли он языком программирования.
Почему SQL не является языком программирования
Почему SQL является языком программирования
Подробное разъяснение читай тут
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍3🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1🔥1
Иногда то, что кажется нам сложным, оказывается гораздо проще, чем мы думали, и в этом заключается сила использования T-SQL для решения повторяющихся задач.
Одной из таких задач может быть необходимость создания резервных копий всех баз данных на вашем сервере. Если баз не много, это не проблема, но я видел несколько серверов, где на одном экземпляре SQL Server было 100+ баз данных.
Вы можете использовать SQL Server Management Studio для резервного копирования баз данных или даже использовать Maintenance Plans, но использование T-SQL — гораздо более простой и быстрый подход.
Решение
С помощью языка T-SQL вы можете создавать скрипты резервного копирования, а с помощью мышки вы можете просматривать все базы данных для их резервного копирования по очереди. Можно также использовать цикл while, если вы предпочитаете не использовать мышь. Это очень простой процесс, и для его выполнения вам понадобится всего несколько команд.
Как создать резервные копии всех баз данных SQL Server
▪Укажите путь для хранения бэкапов баз данных
▪Укажите формат имени файла резервной копии
▪Выберите список баз данных для резервного копирования
▪Цикличность
▪Программно создаем команду резервного копирования базы данных, используя имя базы данных, путь и формат имени файла
Формат имени файла бэкапа базы данных DBname_YYYYDDMM.BAK
Вот скрипт, который позволит вам создать резервную копию каждой базы данных в вашем экземпляре SQL Server. Вам нужно будет изменить @path на соответствующий директорию резервного копирования.
DECLARE @name NVARCHAR(256) -- database name
DECLARE @path NVARCHAR(512) -- path for backup files
DECLARE @fileName NVARCHAR(512) -- filename for backup
DECLARE @fileDate NVARCHAR(40) -- used for file name
-- specify database backup directory
SET @path = 'C:\test\'
-- specify filename format
SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR READ_ONLY FOR
SELECT name
FROM master.sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases
AND state = 0 -- database is online
AND is_in_standby = 0 -- database is not read only for log shipping
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Формат имени файла бэкапа базы данных DBname_YYYYDDMM_HHMMSS.BAK
Если вы хотите также включить время в название файла, вы можете заменить эту строку в приведенном выше сценарии:
-- specify filename format
SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112)
этой строкой:
-- specify filename format
SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112) + '_' + REPLACE(CONVERT(NVARCHAR(20),GETDATE(),108),':','')
Добавление дополнительных элементов в команду резервного копирования
Чтобы добавить дополнительные параметры, такие как прогресс резервного копирования (статистика) и сжатие, вы можете изменить эту строку в скрипте:
BACKUP DATABASE @name TO DISK = @fileName
этой строкой:
BACKUP DATABASE @name TO DISK = @fileName WITH STATS=10, COMPRESSION
Примечания
В этом скрипте мы обходим системные базы данных, но их также можно легко включить. Вы также можете превратить его в хранимую процедуру и передать имя базы данных или, если оставить NULL, создать резервные копии всех баз данных. В любом случае, этот скрипт даст вам отправную точку для простого резервного копирования всех ваших баз данных.
Кроме того, если вы хотите обойти некоторые пользовательские базы данных, вы можете включить их в раздел NOT IN.
Следующие шаги
Добавьте этот сценарий в свой набор инструментов (toolbox)
Измените этот сценарий и сделайте его хранимой процедурой, чтобы включить один или несколько параметров
Усовершенствуйте сценарий для использования дополнительных опций BACKUP
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥4❤1
Написание неправильного синтаксиса SQL не так страшно, потому что вы сразу же узнаете об этом, исправите то, что упустили, и вуаля, все работает как ни в чем не бывало.
А вот что действительно плохо, так это когда код выполняется и выдает результат, но не правильный тогда вы можете не заметить проблему.
Возьмем две таблицы, первая содержит клиентов вашего сайта, а вторая – заказы, сделанные на сайте.
customers table:
+-------------+---------------+-------------+
| customer_id | customer_name | visit_count |
+-------------+---------------+-------------+
| 1 | John Doe | 5 |
| 2 | Jane Smith | 8 |
| 3 | Mike Johnson | 3 |
+-------------+---------------+-------------+
orders table:
+----------+-------------+------------+--------------+
| order_id | customer_id | order_date | total_amount |
+----------+-------------+------------+--------------+
| 1 | 1 | 2023-07-10 | 50.00 |
| 2 | 1 | 2023-07-12 | 75.00 |
| 3 | 2 | 2023-07-11 | 120.50 |
| 4 | 3 | 2023-07-15 | 25.75 |
+----------+-------------+------------+--------------+
Чаще всего мы работаем с таблицами не по отдельности, а с их объединениями. Приведенные выше таблицы можно объединить по столбцу customer_id.
• Теперь, если мы захотим вычислить что-то простое, например, общее количество посещений сайта или общее количество посещений по пользователям, то, если мы не будем очень внимательны, то, сами того не замечая, получим неверные результаты.
SELECT SUM(c.visit_count) AS total_visits
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
В результате будет получено 21 посещение, что неверно.
• И даже когда мы пытаемся просуммировать общее количество посещений на одного пользователя :
SELECT c.customer_id, c.customer_name, SUM(c.visit_count) AS total_visits
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name;
• Мы получаем неверные значения для одного из клиентов (клиента, имеющего более одного заказа):
customers table:
+-------------+---------------+--------------+
| customer_id | customer_name | total_visits |
+-------------+---------------+--------------+
| 1 | John Doe | 10 |
| 2 | Jane Smith | 8 |
| 3 | Mike Johnson | 3 |
+-------------+---------------+--------------+
• Мы можем увидеть, что пошло не так, взглянув на таблицу, полученную в результате объединения:+-------------+---------------+--------------+----------+------------+--------------+
| customer_id | customer_name | visit_count | order_id | order_date | total_amount |
+-------------+---------------+--------------+----------+------------+--------------+
| 1 | John Doe | 5 | 1 | 2023-07-10 | 50.00 |
| 1 | John Doe | 5 | 2 | 2023-07-12 | 75.00 |
| 2 | Jane Smith | 8 | 3 | 2023-07-11 | 120.50 |
| 3 | Mike Johnson | 3 | 4 | 2023-07-15 | 25.75 |
+-------------+---------------+--------------+----------+------------+--------------+
Это явление называется fanout, и его трудно заметить, поскольку результаты получаются частично корректными.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥4👎2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
VisiDatahttps://github.com/saulpw/visidata является многофункциональным инструментом для обработки и просмотра табличных данных.
Этот интерактивный и эффективный инструмент предоставляет возможность работать с большими объемами данных.
VisiData работает с CSV файлами, электронными таблицами Excel, базами данных SQL и многими другими источниками данных.
pip3 install visidata
▪Github
▪Проект
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3❤1
При построении индекса можно указать условие попадания строки в индекс, к примеру, одна из колонок не пустая, а другая равна заданному значению.
create index idx_partial on tab1(a, b) where a is not null and b = 5;
select * from tab1 where a is not null and b = 5; --> search table tab1 using index
Если в запросах к таблице часто используется выражение, то можно построить индекс по нему. Однако следует иметь в виду, что пока оптимизатор не очень гибок и перестановка столбцов в выражении приведет к отказу от использования индекса.
create index idx_expression on tab1(a + b);
select * from tab1 where a + b > 10; --> search table tab1 using index ...
select * from tab1 where b + a > 10; --> scan table
Если данные столбца представляют собой результат вычисления выражения по другим столбцам, то можно создать виртуальный столбец. Есть два вида: VIRTUAL (вычисляется каждый раз при чтении таблицы и не занимает места) и STORED (вычисляется при записи данных в таблицу и место занимает). Разумеется записывать данные в такие столбцы напрямую нельзя.
create table tab1 (
a integer primary key,
b int,
c text,
d int generated always as (a * abs(b)) virtual,
e text generated always as (substr(c, b, b + 1)) stored
);
Индекс предназначен для быстрого поиска в диапазоне значений/вложенности объектов, т.е. задачи типичной для гео-систем, когда объекты-прямоугольники заданы своей позицией и размером и требуется найти все объекты, которые пересекаются с текущим. Данный индекс реализован в виде виртуальной таблицы (см. ниже) и это индекс только по своей сути. Для поддержки R-Tree индекса требуется собрать SQLite с флагом SQLITE_ENABLE_RTREE (по умолчанию не установлен).
create virtual table idx_rtree using rtree (
id, -- ключ
minx, maxx, -- мин и макc x координаты
miny, maxy, -- мин и макc y координаты
data -- дополнительные данные
);
insert into idx_rtree values (1, -80.7749, -80.7747, 35.3776, 35.3778);
insert into idx_rtree values (2, -81.0, -79.6, 35.0, 36.2);
select id from idx_rtree
where minx >= -81.08 and maxx <= -80.58 and miny >= 35.00 and maxy <= 35.44;
Остальные возможности можно тут
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4❤2