Чтобы заменить значение NULL на 0 в SQL, можно использовать функцию COALESCE. Эта функция принимает несколько аргументов и возвращает первый не NULL аргумент.
Если все аргументы NULL, функция вернет NULL. Вот пример использования COALESCE для замены значений NULL на 0:
SELECT COALESCE(column_name, 0) FROM table_name;
В этом запросе column_name - имя столбца, значения которого нужно заменить, а table_name - имя таблицы, в которой находится столбец. Функция COALESCE заменит все значения NULL в столбце на 0. Если значение столбца не NULL, то функция вернет его без изменений.Также можно использовать оператор IS NULL для проверки на NULL и замены его на 0. Вот пример:
SELECT CASE WHEN column_name IS NULL THEN 0 ELSE column_name END FROM table_name;
Этот запрос также заменит значения NULL на 0. Если значение столбца не NULL, то запрос вернет его без изменений.@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥5❤1
В SQL даты обычно вводятся в формате "ГГГГ-ММ-ДД", где "ГГГГ" - год, "ММ" - месяц (от 01 до 12) и "ДД" - день (от 01 до 31).
Например, чтобы вставить запись в таблицу "orders" с датой заказа 22 марта 2023 года, можно использовать следующий запрос:
INSERT INTO orders (order_date, customer_name)
VALUES ('2023-03-22', 'Иванов Иван');
Если же дата вводится с помощью функции, то можно использовать стандартную функцию преобразования даты, например, функцию TO_DATE() в Oracle:INSERT INTO orders (order_date, customer_name)
VALUES (TO_DATE('22-03-2023', 'DD-MM-YYYY'), 'Иванов Иван');
В этом примере мы используем функцию TO_DATE() для преобразования строки "22-03-2023" в дату формата "ГГГГ-ММ-ДД". Второй аргумент функции ("DD-MM-YYYY") указывает формат входной строки.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥3❤1
Думаю можно ответить так - оператор LIKE используется для сравнения значений в столбцах с шаблоном, который вы задаете. Он позволяет искать строки, которые содержат определенные символы или фразы.
Шаблон запроса:
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
Пример:SELECT * FROM customers WHERE last_name LIKE 'Sm%';
Этот запрос вернет все строки из таблицы customers, в которых last_name начинается с букв "Sm".Оператор LIKE чувствителен к регистру символов, то есть "A" и "a" будут восприниматься как разные символы. Однако, для того чтобы выполнить поиск, игнорируя регистр символов, можно использовать функцию UPPER или LOWER, например:
SELECT * FROM employees WHERE UPPER(first_name) LIKE '%JOHN%';
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤11🔥3
В этой статье мы разработаем БД для практики. В этом проекте перед вами стоит задача создать реляционную базу данных для веб-сайта, предлагающего продажу подержанных автомобилей.
Общее описание этого проекта заключается в том, что любой желающий может предлагать свои товары (подержанные автомобили) в виде рекламы, а потенциальные покупатели могут осуществлять поиск по нескольким категориям.
▪ Читать дальше
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤7🔥3
Try Redis — тренажёр для освоения Redis БД
Redis — это удобное и быстрое хранилище данных класса NoSQL, которое хранит и работает с данными типа «ключ — значение». Redis известен своей высокой производительностью, простотой и универсальностью.
А потренироваться в использовании вам поможет тренажёр Try Redis, который может генерировать запросы:
https://try.redis.io/
#redis
@sqlhub
Redis — это удобное и быстрое хранилище данных класса NoSQL, которое хранит и работает с данными типа «ключ — значение». Redis известен своей высокой производительностью, простотой и универсальностью.
А потренироваться в использовании вам поможет тренажёр Try Redis, который может генерировать запросы:
https://try.redis.io/
#redis
@sqlhub
👍9❤3🔥2
Для создания временной таблицы используется ключевое слово
TEMPORARY
в команде CREATE TABLE:
CREATE TEMPORARY TABLE название_таблицы
Удобно создавать временную таблицу на выборке из другой таблицы:
CREATE TEMPORARY TABLE customer_temp SELECT * FROM customer;
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥5❤3
Оператор CASE в SQL используется для создания условий, когда нужно выполнить различные операции в зависимости от значения столбца или выражения.
Оператор CASE может быть использован в двух форматах:
CASE без ELSE:
SELECT column1,
CASE
WHEN column2 = 'value1' THEN 'result1'
WHEN column2 = 'value2' THEN 'result2'
END AS column3
FROM table;
В этой форме оператора
CASE
используется блок WHEN
для проверки значения столбца column2
. Если значение равно value1
, то будет возвращено значение result1
. Если значение равно value2
, то будет возвращено значение result2
. Если значение не соответствует ни одному из условий, то для столбца column3 будет возвращено значение NULL
.CASE с ELSE:
SELECT column1,
CASE column2
WHEN 'value1' THEN 'result1'
WHEN 'value2' THEN 'result2'
ELSE 'result3'
END AS column3
FROM table;
В этой форме оператора
CASE
используется значение столбца column2
в блоке CASE
. Если значение равно value1, то будет возвращено значение result1. Если значение равно value2
, то будет возвращено значение result2
. Если значение не соответствует ни одному из условий, то будет возвращено значение result3.Оба формата оператора
CASE
могут использоваться в запросах на выборку данных в SQL
. Они позволяют создавать условия, когда нужно выполнить различные операции в зависимости от значения столбца или выражения.@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤4🔥4
Можно попробовать использовать функцию COUNT() в сочетании с оператором GROUP BY.
Предположим, у нас есть таблица "orders" с колонками "customer_name" и "order_date", и мы хотим посчитать, сколько заказов было сделано каждым клиентом. Мы можем написать следующий SQL-запрос:
SELECT customer_name, COUNT(*) as order_count
FROM orders
GROUP BY customer_name
Этот запрос выберет все уникальные значения из колонки "customer_name" в таблице "orders" и подсчитает количество строк, связанных с каждым уникальным значением. Результатом запроса будет таблица со столбцами "customer_name" и "order_count", в которой каждая строка будет показывать клиента и количество его заказов.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤2🔥2
Оператор FULL OUTER JOIN объединяет две таблицы на основе общего столбца и выбирает не только записи с совпадающими значениями в этих столбцах, но и все оставшиеся строки из обеих таблиц. Например:
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
FULL OUTER JOIN Orders
ON Customers.customer_id = Orders.customer;
На картинке видно как отработает данный код.
Здесь мы выбираем столбцы
customer_id и first_name
(из таблицы Customers
) и столбец amount (из таблицы Orders). В результате получаем те строки, в которых есть совпадение между customer_id (таблицы Customers
) и customer (таблицы Orders
) вместе со всеми остальными строками из обеих таблиц.Синтаксис оператора FULL OUTER JOIN
Синтаксис оператора FULL OUTER JOIN следующий:
SELECT столбцы
FROM таблица1
FULL OUTER JOIN таблица2
ON таблица1.имя_столбца = таблица2.имя_столбца;
Оператор FULL OUTER JOIN с оператором WHERE
Вот пример использования оператора FULL OUTER JOIN с оператором WHERE:
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
FULL OUTER JOIN Orders
ON Customers.customer_id = Orders.customer
WHERE Orders.amount >= 500;
Здесь мы объединяем две таблицы и выбираем строки, в которых сумма (amount) больше или равна 500.Оператор FULL OUTER JOIN с псевдонимами AS
Мы можем использовать псевдонимы AS с оператором FULL OUTER JOIN, чтобы сделать наш код короче и чище. Например:
SELECT C.cat_name, P.prod_title
FROM Categories AS C
FULL OUTER JOIN Products AS P
ON C.cat_id = P.cat_id;
Здесь мы выбираем общие строки между таблицами
Categories и Products.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥1
Важно регулярно создавать резервные копии базы данных, чтобы данные не были потеряны в случае повреждения базы данных (БД). В SQL мы можем создавать резервные копии БД с помощью оператора
BACKUP DATABASE
. Например:
BACKUP DATABASE orders
TO DISK = 'C:\orders_backup.bak';
Здесь мы создаем файл резервной копии базы данных orders на диске C с именем orders_backup.bak.
Примечание: Распространено использование расширения .bak для файлов резервных копий БД, однако это не является обязательным.
Резервное копирование только новых изменений в SQL
В SQL мы также можем сделать резервную копию только новых изменений по сравнению с предыдущей резервной копией, используя команду
WITH DIFFERENTIAL
. Например:BACKUP DATABASE orders
TO DISK = 'C:\orders_backup.bak'
WITH DIFFERENTIAL;
Здесь мы добавляем только новые изменения в предыдущий файл резервной копии. Следовательно, эта команда работает быстрее, нежели создание резервной копии БД с нуля.
Восстановление базы данных из резервной копии
Для восстановления файла резервной копии в системе управления базой данных (СУБД) используется оператор RESTORE DATABASE. Например:
RESTORE DATABASE orders
FROM DISK = 'C:\orders_backup.bak';
Здесь мы восстанавливаем файл резервной копии orders_backup.bak в базе данных orders.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥6❤5
Ограничение 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