Data Science. SQL hub
35.8K subscribers
922 photos
49 videos
37 files
980 links
По всем вопросам- @workakkk

@itchannels_telegram - 🔥лучшие ит-каналы

@ai_machinelearning_big_data - Machine learning

@pythonl - Python

@pythonlbooks- python книги📚

@datascienceiot - ml книги📚

РКН: https://vk.cc/cIi9vo
Download Telegram
🖥 Ограничение CHECK в SQL

Ограничение CHECK используется для указания условия, которое должно быть выполнено для вставки значения в таблицу.

Например:

CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT CHECK (amount > 0)
);


Здесь столбец amount принимает значения только больше 0, это является условием для проверки. Теперь давайте попробуем вставить данные в таблицу Orders.

Пример №1

-- Вставляем значение 100.
-- Данные добавлены
INSERT INTO Orders(amount) VALUES(100);


Пример №2

-- Вставляем значение -5.
-- Ошибка при добавлении данных
INSERT INTO Orders(amount) VALUES(-5);

Примечание: Ограничение CHECK используется для проверки данных только при вставке. Чтобы проверить, существует ли строка, следует использовать оператор EXISTS.

❗️Создать именованное ограничение CHECK

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

Например:

-- Создаем именнованое ограничение amountCK для столбца amount.
-- Ограничение проверяет, чтобы значение для вставки было больше 0
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
amount INT,
CONSTRAINT amountCK CHECK (amount > 0)
);

❗️Ограничение CHECK в существующей таблице

Мы можем добавить ограничение CHECK к существующей таблице, используя оператор ALTER TABLE.

Например:

-- Добавляем неименованное ограничение CHECK
ALTER TABLE Orders
ADD CHECK (amount > 0);


Также можно добавить и именованное ограничение CHECK:

-- Добавляем именованное ограничение CHECK - amountCK
ALTER TABLE Orders
ADD CONSTRAINT amountCK CHECK (amount > 0);


Примечание: Если мы попытаемся добавить ограничение amount > 0 к столбцу, значение которого уже меньше 0, мы получим ошибку.

❗️Удалить ограничение CHECK

Мы можем удалить ограничение CHECK, используя оператор DROP.

Например:

SQL Server, PostgreSQL, Oracle

-- Удаляем ограничение CHECK - amountCK
ALTER TABLE Orders
DROP CONSTRAINT amountCK;


MySQL

-- Удаляем ограничение CHECK - amountCK
ALTER TABLE Orders
DROP CHECK amountCK;
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2🔥2
🖥 CREATE INDEX в SQL

Если столбец имеет ограничение 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
👍173🔥3
🖥 Advanced SQL Injection Cheatsheet

Этот репозиторий содержит расширенную методологию всех типов SQL иньекций.

🖥 Github

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥43
🖥 Полезные тренажеры SQL

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

Hakerrank
Strata scratch
SQLBolt
W3schools
Курс по основам SQL, состоящий из 19 небольших уроков с лёгкой подачей

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍222🔥2
🖥 Большой справочник по SQL на русском

📌Скачать

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

👇 Папка с книгами:
https://t.me/addlist/BkskQciUW_FhNjEy

Сохраняем себе, чтобы не потерять

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥31👎1
🖥 Как полностью очистить таблицу sql

Полностью очистить таблицу, не удаляя её можно с помощью запроса 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
👍94🔥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🔥63
🖥 Как проектировать запросы на изменение данных sql

При проектировании запросов на изменение данных в 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
👍141🔥1
🖥 Большая шпарглака по psql

Полезные советы с примерами.

Шпаргалка

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥52
🖥 Задача: Выбрать самую актуальную запись с учетом статуса (успешная / отмененная транзакция) и временной метки

Задачу часто спрашивают на собеседованиях в формулировке “как удалить дубли / копии строк”, и решить ее можно несколькими способами. Я привык мыслить в терминах историзации данных в Хранилище, и удаление мне ни к чему, поэтому для решения задачи я воспользуюсь ранжирующей функцией 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🔥53
🖥 Подстановочные знаки (wildcards) в SQL

Подстановочный знак (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🔥52
🖥 Аналитические функции при сохранении всех строк выборки

Речь пойдет о так называемых 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🔥42🤔1
🖥 LIMIT, TOP и FETCH FIRST в SQL

Команда 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 поддерживается не во всех системах управления базами данных (СУБД). Различные СУБД используют разные ключевые слова для выбора фиксированного количества строк. Например:

➡️ ключевое слово TOP используется в SQL Server, MS Access;

➡️ ключевое слово LIMIT используется в MySQL, PostgreSQL, SQLite;

➡️ ключевое слово FETCH FIRST используется в Oracle.

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
👍148🔥2
Python_plus_MySQL-Database.pdf
123.5 KB
🖥 Полезная шпаргалка по связке Python + MySQL

Создание БД и таблиц
Внесение, чтение, обновление и удаление данных

#doc #python #sql #mysql

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥42
SQLAlchemy Основные базовые операции: SELECT-запросы

В этом посте мы обсудим сложные SELECT-запросы, используя как SQLite, так и SQLAlchemy с Python. Наслаждайтесь!

Читать

@sqlhub
👍142🔥1
🖥 Ограничение DEFAULT в SQL

Ограничение 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
👍103🔥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
👍202🔥2