Ограничение 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
Собрали для вас список бесплатных курсов по SQL от базовых до продвинутых.
1. SQL for Data Analysis
2. Интерактивный тренажер по SQL
3. Kaggle: Intro to SQL
4. Advanced SQL
5. Introduction to Structured Query Language (SQL)
6. Advanced Databases and SQL Querying
7. Databases and SQL for Data Science with Python
8. Oracle SQL – A Complete Introduction
9. Intro to SQL
10. Advanced SQL
11. Oracle SQL Basics
12. Beginners Guide to SQL
13. SQL for Data Science
14. Introduction to Databases and SQL Querying
15. Intro to Relational Databases
#SQL #курсы #бд
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤33🔥16🥰3
Если столбец имеет ограничение 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