Если столбец имеет ограничение CREATE INDEX, то данные извлекаются быстрее, если мы используем именно этот столбец для извлечения данных.
Индекс — это объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путем последовательного просмотра таблицы строка за строкой может занимать много времени. Словно закладка в книге, индекс помогает быстро получить доступ к требуемым данным в таблице, согласно SQL-запросу. Таким образом, использование индексов позволяет ускорить получение данных.
Например:
-- Создаем таблицу
CREATE TABLE Colleges (
college_id INT PRIMARY KEY,
college_code VARCHAR(20) NOT NULL,
college_name VARCHAR(50)
);
-- Создаем индекс
CREATE INDEX college_index
ON Colleges(college_code);
Здесь мы создаем индекс с именем college_index в таблице Colleges, используя столбец college_code.
Примечание: Увидеть разницу в скорости при малом количестве данных в таблице проблематично. Однако при большом количестве данных можно легко заметить разницу в скорости между использованием индексов и без них.
CREATE UNIQUE INDEX
для уникальных значенийЕсли нужно создать индексы для уникальных значений в столбце, следует использовать ограничение CREATE UNIQUE INDEX.
Например:
-- Создаем уникальный индекс
CREATE UNIQUE INDEX college_index
ON Colleges(college_code);
Здесь мы создаем уникальный индекс с именем college_index в таблице Colleges, используя столбец college_code.
Удалить индекс из таблиц
Для удаления индекса из таблицы используется оператор DROP INDEX.
Например:
SQL Server
DROP INDEX Colleges.college_index;
PostgreSQL, Oracle
DROP INDEX college_index;
MySQL
ALTER TABLE Colleges
DROP INDEX college_index;
Здесь мы удаляем ограничение college_index из таблицы Colleges.
Примечание: Удаление индекса означает, что удаляется только индекс. Данные в исходной таблице остаются неизменными.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤3🔥3
Тренажеры, которые могут пригодится для "оттачивания" навыков и подготовки к собеседованиям. Конечно, нет ничего лучше реальных задач, но иногда реальных нет. Когда у меня была такая ситуация, я прорешала задачи на Hakerrank и это помогло мне в дальнейшем пройти собеседование. Там же, например на Hakerrank, можно получить сертификаты для подтверждения своего уровня.
● Hakerrank
● Strata scratch
● SQLBolt
● W3schools
● Курс по основам SQL, состоящий из 19 небольших уроков с лёгкой подачей
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤2🔥2
📌Скачать
Еще мы собрали для вас подборку свежих и актуальных книг, по всем языкам программирования.
👇 Папка с книгами:
https://t.me/addlist/BkskQciUW_FhNjEy
Сохраняем себе, чтобы не потерять
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3❤1👎1
Полностью очистить таблицу, не удаляя её можно с помощью запроса DELETE. Мы указываем имя таблицы, но опускаем блок WHERE. Тогда удаляются абсолютно все записи, вне зависимости от условий.
DELETE FROM wiped_table_name;
-- Мы очистили таблицу wiped_table_name
Кроме DELETE без условий можно использовать TRUNCATE. У неё есть свои особенности. Самая главная, она быстрее DELETE, так как не сканирует таблицы перед очисткой и наиболее полезна для очистки больших таблиц.
TRUNCATE cars, cups, parrots;
-- Тут можно перечислять сколько угодно таблиц
Крайне рекомендую глянуть документацию по TRUNCATE, она очень подробная: https://postgrespro.ru/docs/postgrespro/9.5/sql-truncate
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥2
Какой из следующих SQL запросов позволит получить среднее значение из колонки "sales", сгрупированной по годам из колонки "date", при этом выведет только те года, в которые среднее значение продаж больше $100.000?
Anonymous Quiz
19%
SELECT YEAR(date), AVG(sales) FROM table_name WHERE AVG(sales) > 100000 GROUP BY YEAR(date);
59%
SELECT YEAR(date), AVG(sales) FROM table_name GROUP BY YEAR(date) HAVING AVG(sales) > 100000;
14%
SELECT YEAR(date), AVG(sales) FROM table_name HAVING AVG(sales) > 100000 GROUP BY YEAR(date);
8%
SELECT YEAR(date), AVG(sales) FROM table_name GROUP BY YEAR(date) WHERE AVG(sales) > 100000;
👍17🔥6❤3
При проектировании запросов на изменение данных в SQL необходимо следовать нескольким рекомендациям:
Сделайте резервную копию данных перед выполнением запроса на изменение данных. Это поможет избежать потери данных в случае ошибки.
Определите, какие таблицы и столбцы вы собираетесь изменять, и какие условия будут определять строки, которые вы хотите изменить. Используйте ключевое слово UPDATE для обновления данных в таблице.
Используйте оператор SET для задания новых значений столбцов в таблице.
Например:
UPDATE orders
SET order_status = 'Completed'
WHERE order_id = 12345;
Здесь мы обновляем столбец order_status таблицы orders, устанавливая значение Completed для заказа с order_id равным 12345.
Обратите внимание на условие WHERE, которое определяет, какие строки будут изменены. Если условие не указано, запрос обновит все строки в таблице.
Если вы хотите изменить несколько столбцов в таблице, используйте оператор SET для каждого столбца, например:
UPDATE orders
SET order_status = 'Completed',
order_total = 100.00
WHERE order_id = 12345;
Здесь мы обновляем значения столбцов order_status и order_total таблицы orders для заказа с order_id равным 12345.
После выполнения запроса на изменение данных убедитесь, что данные были изменены корректно, проверив их с помощью запроса на выборку данных SELECT.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5❤2
Задачу часто спрашивают на собеседованиях в формулировке “как удалить дубли / копии строк”, и решить ее можно несколькими способами. Я привык мыслить в терминах историзации данных в Хранилище, и удаление мне ни к чему, поэтому для решения задачи я воспользуюсь ранжирующей функцией ROWNUMBER().
SQL Fiddle (Oracle 11g R2): http://sqlfiddle.com/#!4/ad305/1
with decoded as (
select
"transaction_id"
,"is_successful"
,"ts"
,decode("is_successful", 'true', 0, 'false', 1, 2) as "order_is_successful"
from transactions
),
ordered as (
select
"transaction_id"
,"is_successful"
,"ts"
,row_number() over(partition by "transaction_id" order by "order_is_successful" asc, "ts" desc) as rn
from decoded
)
select
"transaction_id"
,"is_successful"
,"ts"
from ordered
where rn = 1
;
Результат
Пишите свое решение в комментариях👇
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2🥰1
Большой сборник теоретического материала по работе с базами данных.
▪основы: http://phpclub.ru/mysql/doc/tutorial.html
▪отношения между таблицами в БД: http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html
▪внешние ключи: http://denis.in.ua/foreign-keys-in-mysql.htm
▪большой учебник по SQL: http://www.pyramidin.narod.ru/rusql/index.htm
▪сборник запросов на все случаи жизни (англ): http://www.artfulsoftware.com/infotree/queries.php
▪таблицы отличий в диалектах SQL в разных СУБД (англ): http://en.wikibooks.org/wiki/SQL_dialects_reference
▪манга-учебник про SQL в картинках: http://www.nostarch.com/mg_databases.htm
👉 делитесь с коллегами полезным материалом
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥5❤3
Подстановочный знак (wildcard) в SQL используется с оператором LIKE для замены одного или набора символов в строке. Например:
SELECT *
FROM Customers
WHERE last_name LIKE 'R%';
Здесь % (означает ноль или более символов) является подстановочным знаком (wildcard). Мы выбираем клиентов, чья фамилия (last_name) начинается с буквы R, за которой следует ноль или более символов.
▪Читать дальше
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥5❤2
Речь пойдет о так называемых analytic functions, которые оперируют над партициями данных (окна, windows), возвращая результат для каждой строки. В отличие от aggregate functions, “схлопывающих” строки, оконные функции оставляют все строки выборки.
Окно определяется спецификацией (выражение OVER) и основывается на трех основных концепциях:
▪Разбиение строк на группы (выражение PARTITION BY)
▪Порядок сортировки строк в каждой группе (выражение ORDER BY)
▪Рамки, которые определяют ограничения по количеству строк относительно каждой строки (выражение ROWS)
Таких функций существует немало, от аналитических: всем известные SUM, AVG, COUNT, менее известные LAG, LEAD, CUMEDIST, и до ранжирующих: RANK, ROWNUMBER, NTILE. Я же приведу несколько простых примеров часто встречающихся запросов:
▪Ко всем транзакциям пользователя вывести дату первой покупки
▪К каждой транзакции добавить дату предыдущей транзакции пользователя
▪Показать сумму покупок пользователя нарастающим итогом
▪Присвоить всем транзакциям пользователя / продавца / отделения порядковый номер
SQL Fiddle: http://sqlfiddle.com/#!17/ee00f/13
Решения:
select
salesid
,dateid
,sellerid
,buyerid
,qty
,first_value(dateid) over (partition by buyerid order by dateid) as first_purchase_dt
,lag(dateid) over (partition by buyerid order by dateid) as previous_purchase_dt
,sum(qty) over (partition by buyerid order by dateid rows between unbounded preceding and current row) as moving_qty
,row_number() over (partition by buyerid order by dateid) as order_number
from winsales
;
Пишите свое решение в комментариях👇
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥4❤2🤔1
Команда SELECT TOP используется для выбора фиксированного количества строк из базы данных. Например:
SELECT TOP 2 *
FROM Customers;
Здесь мы выбираем первые 2 строки из таблицы Customers (картинка1).
Еще один пример:
SELECT TOP 2 first_name, last_name
FROM Customers;
Здесь мы выбираем поля first_name и last_name из первых 2 строк таблицы Customers.
Примечание: Ключевое слово TOP поддерживается не во всех системах управления базами данных (СУБД). Различные СУБД используют разные ключевые слова для выбора фиксированного количества строк. Например:
LIMIT в SQL
Ключевое слово LIMIT используется для выбора фиксированного количества строк в MySQL, PostgreSQL и SQLite.
Например:
SELECT first_name, age
FROM Customers
LIMIT 2;
Здесь мы выбираем первые 2 строки из таблицы Customers.
LIMIT с OFFSET в SQL
Ключевое слово OFFSET используется для указания места, откуда следует выбирать строки.
Например:
SELECT first_name, last_name
FROM Customers
LIMIT 2 OFFSET 3;
Здесь мы выбираем две строки, начиная с четвертой строки. OFFSET 3 означает, что первые 3 строки исключены (картинка 2).
FETCH FIRST в SQL
Предложение FETCH FIRST <количество_строк> ROWS ONLY используется в СУБД Oracle для выбора фиксированного количества строк. Например:
SELECT *
FROM Customers
FETCH FIRST 2 ROWS ONLY;
Здесь мы выбираем первые 2 строки из таблицы Customers.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤8🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥4❤2
Ограничение DEFAULT используется для установки значений по умолчанию при попытке вставить пустое (NULL) значение в столбец. Например:
CREATE TABLE Colleges (
college_id INT PRIMARY KEY,
college_code VARCHAR(20),
college_country VARCHAR(20) DEFAULT 'Japan'
);
Здесь значением по умолчанию для столбца college_country является Japan.
Если мы попытаемся сохранить значение NULL в столбце college_country, то значением станет Japan. Например:
-- Вставляем значение 'Japan' в столбец college_country
INSERT INTO Colleges (college_id, college_code)
VALUES (1, 'ARP76');
-- Вставляем значение 'UAE' в столбец college_country
INSERT INTO Colleges (college_id, college_code, college_country)
VALUES (2, 'JWS89', 'UAE');
Ограничение DEFAULT с ALTER TABLE
Мы также можем добавить ограничение DEFAULT к существующему столбцу с помощью оператора ALTER TABLE. Например:
SQL Server
ALTER TABLE Colleges
ADD CONSTRAINT country_default
DEFAULT 'Japan' FOR college_country;
PostgreSQL
ALTER TABLE Colleges
ALTER COLUMN college_code SET DEFAULT 'Japan';
MySQL
ALTER TABLE Colleges
ALTER college_country SET DEFAULT 'Japan';
Oracle
ALTER TABLE Colleges
MODIFY college_country DEFAULT 'Japan';
Здесь значением по умолчанию для столбца college_country является Japan, если кто-то попытается вставить NULL.
Удалить ограничение DEFAULT
Мы можем удалить ограничение DEFAULT, используя оператор DROP. Например:
SQL Server, PostgreSQL, Oracle
ALTER TABLE Colleges
ALTER COLUMN college_country DROP DEFAULT;
MySQL
ALTER TABLE Colleges
ALTER college_country DROP DEFAULT;
Здесь мы удаляем ограничение DEFAULT из столбца college_country.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3🔥1
🔥 Полезные бесплатные инструменты для работы с базами данных
Инструменты ориентированы на разработку под Microsoft SQL Server.
SQLCheck - мониторинг производительности сервера в реальном времени.
SQL Server Maintenance Solution - набор хранимых процедур от MVP Ola Hallengren для обслуживания как пользовательских, так и служебных баз данных на стороне SQL Server.
SQL Scripts Manager - бесплатный набор из 28 must–have скриптов от экспертов компании Redgate, который поможет автоматизировать общие задачи устранения неполадок, диагностики и обслуживания бд.
Набор хранимых процедур от Brent Ozar Unlimited
sp_Blitz — хранимые процедуры, для мониторинга состояния SQL Server–а и проблем производительности.
sp_BlitzCache — хранимыя процедура, с кучей опций, которая показывает малоэффективные запросы, и многое другое.
sp_BlitzIndex — это инструмент, который поможет вам проанализировать индексы: узнать есть ли у вас повторяющиеся индексы, или индексы, которые не используются, и многое другое.
sp_BlitzRS – процедура для поиска потенциальных проблем и анализа производительности и запросов SQL Server Reporting Services.
sp_BlitzTrace – хранимая процедура, которая позволит вам легко и быстро использовать SQL Server Extended Events.
SqlBak - онлайн сервис от разработчиков популярного решения для бэкапа SQLBackupAndFTP. Инструмент позволяет создавать резервные копии MS SQL вручную или по расписанию (поддерживается полный и дифференциальный бэкап и сохранение журнала транзакций.)
SQLFuse - это файловая система пользовательского режима, основанная на FUSE, которая отображает объекты сервера SQL на файловую систему: схемы, таблицы, представления, хранимые процедуры, функции, колонки, триггеры и др.
tSQLt - бесплатный фреймворк с открытым исходным кодом для проведения T-SQL unit тестов. О том, как работать с данным инструментом очень подробно изложено в следующей статье: tSqlt — модульное тестирование в Sql Server
BIDS Helper - плагин для Visual Studio c открытым исходным кодом.
SQL Server Partition Management - данный инструмент позволяет работать с секционированными (партиционированными) таблицами.
@sqlhub
Инструменты ориентированы на разработку под Microsoft SQL Server.
SQLCheck - мониторинг производительности сервера в реальном времени.
SQL Server Maintenance Solution - набор хранимых процедур от MVP Ola Hallengren для обслуживания как пользовательских, так и служебных баз данных на стороне SQL Server.
SQL Scripts Manager - бесплатный набор из 28 must–have скриптов от экспертов компании Redgate, который поможет автоматизировать общие задачи устранения неполадок, диагностики и обслуживания бд.
Набор хранимых процедур от Brent Ozar Unlimited
sp_Blitz — хранимые процедуры, для мониторинга состояния SQL Server–а и проблем производительности.
sp_BlitzCache — хранимыя процедура, с кучей опций, которая показывает малоэффективные запросы, и многое другое.
sp_BlitzIndex — это инструмент, который поможет вам проанализировать индексы: узнать есть ли у вас повторяющиеся индексы, или индексы, которые не используются, и многое другое.
sp_BlitzRS – процедура для поиска потенциальных проблем и анализа производительности и запросов SQL Server Reporting Services.
sp_BlitzTrace – хранимая процедура, которая позволит вам легко и быстро использовать SQL Server Extended Events.
SqlBak - онлайн сервис от разработчиков популярного решения для бэкапа SQLBackupAndFTP. Инструмент позволяет создавать резервные копии MS SQL вручную или по расписанию (поддерживается полный и дифференциальный бэкап и сохранение журнала транзакций.)
SQLFuse - это файловая система пользовательского режима, основанная на FUSE, которая отображает объекты сервера SQL на файловую систему: схемы, таблицы, представления, хранимые процедуры, функции, колонки, триггеры и др.
tSQLt - бесплатный фреймворк с открытым исходным кодом для проведения T-SQL unit тестов. О том, как работать с данным инструментом очень подробно изложено в следующей статье: tSqlt — модульное тестирование в Sql Server
BIDS Helper - плагин для Visual Studio c открытым исходным кодом.
SQL Server Partition Management - данный инструмент позволяет работать с секционированными (партиционированными) таблицами.
@sqlhub
👍20❤2🔥2
NocoDB — альтернатива AirTable с открытым исходным кодом
Создавайте и управляйте базами данных с помощью простого, но мощного интерфейса
С помощью инструмента вы сможете гибко определять схему данных, устанавливать связи между таблицами, выполнять сложные запросы и настраивать права доступа
NocoDB подходит для различных типов данных, будь то реляционные, документоориентированные или графовые. Интеграция с различными типами баз данных обеспечивает максимальную гибкость и удобство.
Стоимость: #бесплатно
#базы_данных #web
Создавайте и управляйте базами данных с помощью простого, но мощного интерфейса
С помощью инструмента вы сможете гибко определять схему данных, устанавливать связи между таблицами, выполнять сложные запросы и настраивать права доступа
NocoDB подходит для различных типов данных, будь то реляционные, документоориентированные или графовые. Интеграция с различными типами баз данных обеспечивает максимальную гибкость и удобство.
Стоимость: #бесплатно
#базы_данных #web
👍7🔥3❤2
🔥 6 бесплатных ресурсов для практики в SQL
SQLZoo - рекомендуем тем, кто начинает изучать язык. На сайте 9 разделов с задачами по sql. Их решение займет 18–20 часов. Среди тем — вложенные запросы или обработка значений null. Также доступны разборы решений. В SQLZoo есть справочник терминов.
SQLTest - здесь можно изменять или замещать значения и масштабировать их. Это позволяет имитировать взаимодействие с БД произвольного количества пользователей или запросов. Сервис генерирует запросы к базе данных SQL Server и поддерживает MySQL и Oracle.
SQLTest доступен в десктопной и облачной версии.
Pgexercises - Сайт состоит из 80 упражнений для работы с объектно-реляционной системой PostgreeSQL. Доступен один набор данных, который состоит из 3 таблиц: members, booking и facilities. Упражнения начинаются с предложений select и where, затем рассматриваются оконные функции и рекурсивные запросы. Курс разделен на блоки:
▪Простые запросы SQL;
▪Присоединение и подзапросы;
▪Изменения данных;
▪Агрегация;
▪Работа с метками времени;
▪Операции с рядами;
▪Рекурсивные запросы.
SQL Fiddle — сервис с открытым исходным кодом. Сайт позволяет делиться информацией с другими пользователями.
Он поддерживает БД Oracle, SQLite, MySQL. Также есть возможность экспортировать данные в разных форматах: иерархические файлы (например, XML-документы), текстовые и таблицы.
Oracle LiveSQL — это облачная платформа для тестирования и обмена сценариями SQL и PL/SQL. Среди функций — инструмент меню Quick SQL, который позволяет создавать операторы с помощью сокращенного синтаксиса.
Система сохраняет информацию о предыдущих сеансах, наборах операторов, которые можно перезапустить или сохранить как сценарии. Также сценарии можно воспроизвести повторно или загрузить созданные на сторонних ресурсах.
В последней версии СУБД Oracle Database 19c разработчики добавили функцию Automatic Indexing, которая автоматически создает индексы к БД.
HackerRank - социальная платформа для соревновательного программирования предлагает упражнения для разных языков. Среди них — сложные практические задачи по SQL. К некоторым задачам нет опубликованных ответов, а за лучшие решения пользователь получает больше баллов в рейтинге сообщества.
@sqlhub
SQLZoo - рекомендуем тем, кто начинает изучать язык. На сайте 9 разделов с задачами по sql. Их решение займет 18–20 часов. Среди тем — вложенные запросы или обработка значений null. Также доступны разборы решений. В SQLZoo есть справочник терминов.
SQLTest - здесь можно изменять или замещать значения и масштабировать их. Это позволяет имитировать взаимодействие с БД произвольного количества пользователей или запросов. Сервис генерирует запросы к базе данных SQL Server и поддерживает MySQL и Oracle.
SQLTest доступен в десктопной и облачной версии.
Pgexercises - Сайт состоит из 80 упражнений для работы с объектно-реляционной системой PostgreeSQL. Доступен один набор данных, который состоит из 3 таблиц: members, booking и facilities. Упражнения начинаются с предложений select и where, затем рассматриваются оконные функции и рекурсивные запросы. Курс разделен на блоки:
▪Простые запросы SQL;
▪Присоединение и подзапросы;
▪Изменения данных;
▪Агрегация;
▪Работа с метками времени;
▪Операции с рядами;
▪Рекурсивные запросы.
SQL Fiddle — сервис с открытым исходным кодом. Сайт позволяет делиться информацией с другими пользователями.
Он поддерживает БД Oracle, SQLite, MySQL. Также есть возможность экспортировать данные в разных форматах: иерархические файлы (например, XML-документы), текстовые и таблицы.
Oracle LiveSQL — это облачная платформа для тестирования и обмена сценариями SQL и PL/SQL. Среди функций — инструмент меню Quick SQL, который позволяет создавать операторы с помощью сокращенного синтаксиса.
Система сохраняет информацию о предыдущих сеансах, наборах операторов, которые можно перезапустить или сохранить как сценарии. Также сценарии можно воспроизвести повторно или загрузить созданные на сторонних ресурсах.
В последней версии СУБД Oracle Database 19c разработчики добавили функцию Automatic Indexing, которая автоматически создает индексы к БД.
HackerRank - социальная платформа для соревновательного программирования предлагает упражнения для разных языков. Среди них — сложные практические задачи по SQL. К некоторым задачам нет опубликованных ответов, а за лучшие решения пользователь получает больше баллов в рейтинге сообщества.
@sqlhub
❤14👍11🔥4