SQL (язык структурированных запросов) — это язык структурированных запросов, используемый для управления и работы с реляционными базами данных. Это один из наиболее широко используемых языков в системах управления базами данных.
-- Запросить данные
SELECT * FROM имя таблицы WHERE условие;
--Вставить данные
INSERT INTO имя таблицы (столбец 1, столбец 2) VALUES (значение 1, значение 2);
--Обновить данные
UPDATE имя таблицы SET столбец 1 = значение 1 WHERE условие;
-- Удалить данные
УДАЛИТЬ ИЗ имени таблицы ГДЕ условие;
--Создать таблицу
Имя таблицы CREATE TABLE (
Имя столбца 1 тип данных,
Имя столбца 2, тип данных
);
INT: Целочисленный тип.VARCHAR(n):Символовая строка переменной длины, доnперсонажи.DATE:Тип даты.FLOAT: Тип с плавающей запятой.BOOLEAN: логическое значение (истина или ложь).MySQL — это популярная система управления реляционными базами данных (СУБД) с открытым исходным кодом, которая использует SQL в качестве языка запросов и подходит для малых, средних и крупных приложений.
mysql -u root -p
CREATE DATABASE example_db;
USE example_db;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT);
INSERT INTO users (name, age) VALUES ('Alice', 30);
SELECT * FROM users;
SQLite — это встроенная база данных, не требующая отдельного сервера для управления и подходящая для легковесных приложений.
sqlite3 example.db
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
INSERT INTO users (name, age) VALUES ('Alice', 30);
SELECT * FROM users;
PostgreSQL (часто называемый Postgres) — это мощная объектно-реляционная система баз данных с открытым исходным кодом (ORDBMS). Она основана на более чем 30-летней активной разработке и имеет прочную репутацию благодаря надежности, функциональной устойчивости и производительности и известна как «самая передовая в мире база данных с открытым исходным кодом».
PostgreSQL использует архитектуру клиент-сервер и назначает независимые обработчики каждому соединению, что гарантирует, что сбой одного соединения не повлияет на стабильность всего сервера базы данных.
Мощь Postgres во многом обусловлена его богатым расширением экосистемы:
| преимущество | недостаток |
|---|---|
| Высокая целостность и безопасность данных | При записи больших объемов данных на высокой частоте механизм VACUUM может вызывать колебания производительности. |
| Поддержка сложного анализа данных и бизнес-логики | Потребление памяти обычно выше по сравнению с MySQL. |
| Сообщество открытого исходного кода чрезвычайно активно, и здесь нет привязки к поставщику. | Необходимо установить множество параметров, и новичкам потребуется длительное обучение для настройки и оптимизации производительности. |
T-SQL, полное имя которого — Transact-SQL, представляет собой расширенную версию стандарта SQL, разработанную Microsoft и Sybase. Это основной язык связи для Microsoft SQL Server и служб, связанных с SQL Azure. По сравнению со стандартным SQL, T-SQL добавляет возможности программирования, позволяя не только запрашивать данные, но и выполнять сложные логические операции.
| Тип функции | Стандартный SQL (ANSI) | T-SQL (Microsoft) |
|---|---|---|
| Конкатенация строк | Используйте двойные вертикальные полосы || | Используйте знак плюс + |
| Ограничить количество возвращаемых столбцов | Используйте ПОЛУЧИТЬ ПЕРВЫМ | Используйте ключевое слово TOP |
| Преобразование типов данных | CAST | CAST и CONVERT (поддерживает форматирование) |
| логика программы | В основном базовые запросы | Полные возможности процедурного языка программирования. |
Следующий код показывает, как объединить переменные, логические заключения и запросы данных в T-SQL:
-- Объявляем и устанавливаем переменные
DECLARE @Threshold INT = 100;
ОБЪЯВИТЬ @CurrentStock INT;
-- Получить инвентарь конкретного продукта
ВЫБЕРИТЕ @CurrentStock = Количество запасов
ИЗ продуктов
ГДЕ ProductID = 5;
- логическое суждение
ЕСЛИ @CurrentStock < @Порог
НАЧАТЬ
PRINT 'Предупреждение: запасы ниже заданного порога. ';
-- Выполнить логику пополнения...
КОНЕЦ
ЕЩЕ
НАЧАТЬ
ВЫБЕРИТЕ * ИЗ ПРОДУКТОВ ГДЕ ProductID = 5;
КОНЕЦ
T-SQL широко используется в следующих областях:
T-SQL расширяет стандартный SQL, обеспечивая полные программные возможности. С помощью переменных, логического управления и обработки ошибок разработчики могут писать сложную бизнес-логику на уровне базы данных.
В T-SQL все пользовательские переменные должны начинаться с символа @. Используйте DECLARE для объявления и SET или SELECT для назначения.
-- Объявляем переменные
ОБЪЯВИТЬ @EmployeeCount INT;
DECLARE @DepartmentName NVARCHAR(50);
-- назначение
SET @DepartmentName = 'ИТ-отдел';
--Присвоение значений из результатов запроса
ВЫБЕРИТЕ @EmployeeCount = COUNT(*)
ОТ сотрудников
ГДЕ Отдел = @DepartmentName;
-- Вывод результатов
ПЕЧАТЬ @EmployeeCount;
Операторы IF...ELSE позволяют выполнять различные блоки кода в зависимости от условий. Если блок содержит несколько операторов, их необходимо обернуть BEGIN...END.
ОБЪЯВИТЬ @StockLevel INT;
НАБОР @StockLevel = 10;
ЕСЛИ @StockLevel < 5
НАЧАТЬ
ПЕЧАТЬ 'Запасы очень малы, пожалуйста, пополните запасы немедленно. ';
КОНЕЦ
ИНАЧЕ, ЕСЛИ @StockLevel < 20
НАЧАТЬ
ПЕЧАТЬ 'Запасы недостаточны, рекомендуется пополнить запасы. ';
КОНЕЦ
ЕЩЕ
НАЧАТЬ
ПЕЧАТЬ 'В наличии. ';
КОНЕЦ
Механизм TRY...CATCH, предоставляемый T-SQL, аналогичен современным языкам программирования (таким как C# или Java) и может перехватывать исключения во время выполнения, чтобы предотвратить нештатное прерывание программы.
НАЧАТЬ ПОПРОБОВАТЬ
-- Код, который нужно попытаться выполнить
INSERT INTO Sales (OrderID, ProductID, Quantity)
ЗНАЧЕНИЯ (1001, «P01», -5); -- Предположим, что это вызовет ошибку ограничения
КОНЕЦ ПОПРОБУЙТЕ
НАЧАТЬ ЛОВИТЬ
-- Обработка ошибок
ВЫБРАТЬ
ERROR_NUMBER() КАК Номер ошибки,
ERROR_MESSAGE() КАК Сообщение об ошибке,
ERROR_SEVERITY() КАК Серьезность;
--Откат транзакции
ЕСЛИ @@TRANCOUNT > 0
ОТКАТ ТРАНЗАКЦИИ;
КОНЦЕВАЯ ЗАЩЕЛКА
nameЗначения полей уникальны.nameДлина поля умеренная, чтобы она не была слишком длинной и не влияла на производительность.Например, таблица данных типа профиля:
CREATE TABLE config_types (
name VARCHAR(50) PRIMARY KEY,
description TEXT
);
INSERT INTO config_types (name, description) VALUES ('general', 'General settings');
SELECT * FROM config_types WHERE name = 'general';
В этой таблице будут храниться общие атрибуты всех «животных».
| Имя поля | тип данных | иллюстрировать |
|---|---|---|
| id | INT | уникальный идентификатор животного |
| species | VARCHAR(50) | виды животных |
| age | INT | возраст животного |
Эта таблица унаследует идентификатор таблицы животных и сохранит уникальные атрибуты «кошки».
| Имя поля | тип данных | иллюстрировать |
|---|---|---|
| id | INT | Соответствует идентификатору таблицы животных. |
| breed | VARCHAR(50) | порода кошек |
| favorite_food | VARCHAR(50) | Любимая еда кошки |
CREATE TABLE animal (
id INT PRIMARY KEY AUTO_INCREMENT,
species VARCHAR(50) NOT NULL,
age INT NOT NULL
);
CREATE TABLE cat (
id INT PRIMARY KEY,
breed VARCHAR(50),
favorite_food VARCHAR(50),
FOREIGN KEY (id) REFERENCES animal(id)
);
INSERT INTO animal (species, age) VALUES ('Cat', 3);
INSERT INTO cat (id, breed, favorite_food) VALUES (1, 'Siamese', 'Fish');
| Идентификатор животного | тип | возраст |
|---|---|---|
| 1 | Cat | 3 |
| Идентификатор животного | разнообразие | люблю еду |
|---|---|---|
| 1 | Siamese | Fish |
В этом примереanimalВ таблице хранятся общие признаки всех животных, аcatВ таблице хранятся уникальные атрибуты кошки.catв таблицеidэто ссылкаanimalтабличныйid, что указывает на то, что это отношение наследования.
SELECT * FROM animal;
Этот запрос вернет полную информацию обо всех кошках, включая общие атрибуты, унаследованные из таблицы животных.
SELECT animal.id, animal.species, animal.age, cat.breed, cat.favorite_food
FROM animal
JOIN cat ON animal.id = cat.id;
SELECT * FROM animal WHERE id = 1;
SELECT animal.id, animal.species, animal.age, cat.breed, cat.favorite_food
FROM animal
JOIN cat ON animal.id = cat.id
WHERE cat.breed = 'Siamese';
В этих примерах запросов мы используемJOINВоляanimalстол иcatТаблицы объединяются для получения полной информации о кошке. Такой подход гарантирует, что результаты запроса будут включать как унаследованные, так и уникальные свойства.
FOREIGN KEY (внешний ключ) используется для установления связи между двумя таблицами данных для обеспечения ссылочной целостности данных. Например, значение поля в одной таблице данных должно ссылаться на первичный ключ или уникальное значение в другой таблице данных.
Подтаблица CREATE TABLE (
Имя поля Тип данных,
FOREIGN KEY (поле внешнего ключа) REFERENCES родительская таблица данных (поле первичного ключа)
);
Установите связь «один ко многим», например заказы и клиенты:
-- Создать родительскую таблицу данных (клиенты)
СОЗДАТЬ ТАБЛИЦУ клиентов (
customer_id INT ПЕРВИЧНЫЙ КЛЮЧ,
имя ВАРЧАР(50)
);
--Создать подтаблицы (заказы) и установить внешние ключи
СОЗДАТЬ ТАБЛИЦУ заказов (
order_id INT ПЕРВИЧНЫЙ КЛЮЧ,
customer_id INT,
дата_заказа ДАТА,
ВНЕШНИЙ КЛЮЧ (customer_id) ССЫЛКА на клиентов (customer_id)
);
PRIMARY KEYилиUNIQUE。ON DELETEПоведение.может пройти черезON DELETEиON UPDATEУкажите поведение внешнего ключа:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CASCADE: синхронно удалить или обновить связанные данные в таблице подданных.SET NULL: установите для поля внешнего ключа в таблице подданных значениеNULL。RESTRICT: Запретить удаление или обновление, поведение по умолчанию.NO ACTION:иRESTRICTАналогично, отложите проверку ограничений.В MySQL вы можете использоватьCOMMENTдля добавления примечаний к полям.
СОЗДАТЬ ТАБЛИЦУ пользователей (
id INT PRIMARY KEY COMMENT 'Уникальный идентификационный код пользователя',
name VARCHAR(50) КОММЕНТАРИЙ 'Имя пользователя',
age INT COMMENT 'Возраст пользователя'
);
СОЗДАТЬ ТАБЛИЦУ пользователей (
идентификатор INT ПЕРВИЧНЫЙ КЛЮЧ,
имя ВАРЧАР(50),
возрастINT
) COMMENT = 'Таблица информации о пользователе';
Комментарии к полю можно запросить с помощью следующего синтаксиса:
SHOW FULL COLUMNS FROM users;
Пользователи ALTER TABLE MODIFY COLUMN name VARCHAR(50) COMMENT 'Измененные примечания';
COMMENT, но SQLite его не поддерживает.COMMENT ONинструкция.КОММЕНТАРИЙ К СТОЛБЦУ user.name ЯВЛЯЕТСЯ «имя пользователя»;
В SQL-запросах, когда имя поля конфликтует с зарезервированным словом (ключевым словом) системы базы данных, возникает синтаксическая ошибка. Решение этой проблемы требует всестороннего рассмотрения как с точки зрения предотвращения, так и решения.
Это наиболее рекомендуемый подход, направленный на устранение проблемы в ее источнике.
intervalИзменить наtime_interval,ВоляrankИзменить наuser_rank。Когда нельзя избежать использования зарезервированных слов (например: при работе с существующей структурой базы данных), имя поля необходимо заключить в соответствующие кавычки, чтобы четко сообщить механизму SQL, что это идентификатор, а не команда SQL.
| система баз данных | кавычки | пример |
|---|---|---|
| MySQL / MariaDB | обратный апостроф (`) |
SELECT `interval`, `time` FROM table; |
| PostgreSQL / Oracle | двойные кавычки (") |
SELECT "interval", "time" FROM table; |
| SQL Server | квадратные скобки ([]) |
SELECT [interval], [time] FROM table; |
В таких языках программирования, как Python, если вам необходимо динамически генерировать операторы SQL, вам следует реализовать функцию автоматического выполнения кавычек, чтобы гарантировать безопасность и корректность сгенерированных операторов.
\b), чтобы точно соответствовать именам полей и избежать неправильной замены строковых значений или длинных имен.Если вы используете ORM (например, SQLAlchemy или Django ORM), платформа автоматически обрабатывает различия в зарезервированных словах и кавычках между разными базами данных, абстрагируя базовый вывод SQL, что значительно упрощает работу по разработке и повышает стабильность кода.
Вычисляет разницу во времени в секундах между двумя полями DATETIME.
SELECT * FROM table_name
WHERE TIMESTAMPDIFF(SECOND, datetime_column1, datetime_column2) < 5;
Убедитесь, что разница во времени является абсолютным значением, чтобы избежать эффектов порядка.
SELECT * FROM table_name
WHERE ABS(TIMESTAMPDIFF(SECOND, datetime_column1, datetime_column2)) < 5;
Если вы просто хотите сравнить, совпадают ли они в один и тот же день, вы можете использовать DATEDIFF.
SELECT * FROM table_name
WHERE DATEDIFF(datetime_column1, datetime_column2) = 0;
Применимо к базам данных, поддерживающим операции с метками времени, например MySQL.
SELECT * FROM table_name
WHERE ABS(UNIX_TIMESTAMP(datetime_column1) - UNIX_TIMESTAMP(datetime_column2)) < 5;
Указанное вами значение1763251200000Стандартная **метка времени в миллисекундах** (время эпохи Unix в миллисекундах).
Встроенные функции MySQL (например,FROM_UNIXTIME) Обработкой по умолчанию является **временная метка второго уровня**. Поэтому перед использованием вам необходимо преобразовать миллисекундные метки времени в секунды.
Разделите значение миллисекунды на $1000$, чтобы получить временную метку второго уровня, необходимую для функции MySQL:
1763251200000 / 1000 = 1763251200
использоватьFROM_UNIXTIME()Функция преобразует временную метку второго уровня в стандартную MySQLDATETIMEФормат:
SELECT FROM_UNIXTIME(1763251200000 / 1000);
Если ваша версия MySQL поддерживает миллисекунды и вы хотите сохранить точность результатов в миллисекундах, вы можете использовать второй параметр:
SELECT FROM_UNIXTIME(1763251200000 / 1000, '%Y-%m-%d %H:%i:%s.%f');
в:
%Y-%m-%d %H:%i:%sСтандартный формат даты и времени.%fЗахватывает микросекунды, поэтому вам нужно передать оставшиеся миллисекунды в виде дроби.Если вы намерены сохранить значение миллисекунды в целом числе (например,INTилиBIGINT) в качестве временной метки второго уровня, то требуется только простая операция деления:
SELECT 1763251200000 / 1000;
Или, если ваши данные хранятся в полях таблицы (например, поле называетсяtimestamp_ms):
SELECT timestamp_ms / 1000 AS unix_timestamp_s FROM your_table;
Когда вы вставляете это значение во что-то, что имеетDATETIMEилиTIMESTAMPполе типа, необходимо ввестиVALUESЧастично выполнить преобразование:
INSERT INTO your_table (datetime_column)
VALUES (FROM_UNIXTIME(1763251200000 / 1000));
FROM_UNIXTIME()Функция преобразует временную метку UTC в часовой пояс, настроенный для вашего сервера MySQL. Если ваша временная метка основана на формате UTC и вы хотите, чтобы результат также был в формате UTC, вам необходимо убедиться, что часовой пояс вашего сервера или соединения установлен правильно, или используйтеCONVERT_TZФункция выполняет явную обработку часового пояса.
В MySQL используйтеFORMAT()для форматирования чисел с плавающей запятой.
ВЫБРАТЬ ФОРМАТ(123.4567, 2); -- Результат: '123,46'
ROUND()Используется для округления до фиксированного количества десятичных знаков.
ВЫБРАТЬ КРУГЛЫЙ(123.4567, 2); -- Результат: 123,46
Преобразуйте FLOAT в DECIMAL, чтобы сохранить фиксированное количество десятичных знаков.
SELECT CAST(123.4567 AS DECIMAL(10,2)); -- Результат: 123,46
ВЫБРАТЬ CONVERT(123.4567, DECIMAL(10,2)); -- Результат: 123,46
SELECT id, FORMAT(price, 2) AS formatted_price FROM products;
Вы можете напрямую установить количество десятичных знаков при создании таблицы данных.
СОЗДАТЬ ТАБЛИЦУ продуктов (
идентификатор INT ПЕРВИЧНЫЙ КЛЮЧ,
цена DECIMAL(10,2) -- два знака после запятой
);
Получите максимальное значение поля.
SELECT MAX(price) AS max_price FROM products;
Получите минимальное значение поля.
SELECT MIN(price) AS min_price FROM products;
Вычислите среднее значение полей.
SELECT AVG(price) AS avg_price FROM products;
SELECT
MAX(price) AS max_price,
MIN(price) AS min_price,
AVG(price) AS avg_price
FROM products;
SELECT category,
MAX(price) AS max_price,
MIN(price) AS min_price,
AVG(price) AS avg_price
FROM products
GROUP BY category;
Найдите максимальное значение другого результата запроса.
SELECT MAX(price) FROM (SELECT price FROM products WHERE category = 'electronics') AS subquery;
Получите максимальное значение после сортировки.
SELECT price FROM products WHERE category = 'electronics' ORDER BY price DESC LIMIT 1;
WITH filtered_products AS (
SELECT price FROM products WHERE category = 'electronics'
)
SELECT MAX(price) FROM filtered_products;
Формула расчета среднего геометрического:
GM = (x1 * x2 * ... * xn)^(1/n)
В SQL среднее геометрическое можно вычислить с помощью логарифмических операций.
SELECT EXP(AVG(LOG(price))) AS geometric_mean FROM products WHERE price > 0;
использоватьPOWER()Вычислите корень n-й степени:
SELECT POWER(EXP(SUM(LOG(price))), 1 / COUNT(price)) AS geometric_mean
FROM products WHERE price > 0;
LOG()вызовет ошибки.SELECT EXP(AVG(LOG(price))) AS geometric_mean FROM products WHERE price > 0;
В MySQL/MariaDB вы можете использоватьSTDDEV()для расчета стандартного отклонения.
SELECT STDDEV(salary) AS salary_stddev FROM employees;
SQL предоставляет два метода расчета стандартного отклонения:
STDDEV_POP()- Рассчитать стандартное отклонение населения (Population Standard Deviation)STDDEV_SAMP()- Рассчитать стандартное отклонение выборки (Sample Standard Deviation)SELECT
STDDEV_POP(salary) AS population_stddev,
STDDEV_SAMP(salary) AS sample_stddev
FROM employees;
Если версия SQL не поддерживаетSTDDEV(), вы можете использовать следующую формулу:
SELECT SQRT(
SUM(POW(salary - (SELECT AVG(salary) FROM employees), 2)) / COUNT(salary)
) AS salary_stddev
FROM employees;
STDDEV()Стандартное отклонение можно рассчитать напрямую.STDDEV_POP()Рассчитайте родительское стандартное отклонение,STDDEV_SAMP()Рассчитайте выборочное стандартное отклонение.SQLWHEREпредложение используется для извлечения из таблицыИзвлечь записи, соответствующие заданным условиям(столбец/строка). Это одна из самых основных и важных частей языка манипулирования данными (DML), используемая для точной фильтрации необходимых данных.
WHEREЭто предложение оценивается для каждой строки (Row), когда база данных читает таблицу. Только когда данные в определенной строке удовлетворяютWHEREСтрока будет включена в набор результатов только в том случае, если выполнены следующие условия.SELECT, UPDATE, DELETEИспользуйте его с командами SQL.WHEREобычно следует пунктFROMПосле пункта:
SELECT column_name(s)
FROM table_name
WHERE condition;
или когда используется для изменения или удаления информации:
UPDATE table_name
SET column1 = value1
WHERE condition;
WHEREОператоры используются в предложениях для установления условий. Наиболее распространенными из них являются:
| Тип оператора | оператор | описывать |
|---|---|---|
| оператор сравнения | = |
равный |
| оператор сравнения | >, <, >=, <= |
Больше, меньше, больше или равно, меньше или равно |
| оператор сравнения | <>или!= |
не равен |
| Логические операторы | AND |
Соблюдайте несколько условий одновременно |
| Логические операторы | OR |
удовлетворить любое из условий |
| Логические операторы | NOT |
Условие не выполнено |
| специальные операторы | BETWEEN |
В определенном диапазоне (включая границы) |
| специальные операторы | LIKE |
Нечеткое соответствие шаблону строки (соответствие%или_) |
| специальные операторы | IN |
Значением является любой элемент в списке. |
| специальные операторы | IS NULL / IS NOT NULL |
Является ли значение поля NULL |
Предположим, есть файл с именемEmployeesстол, в том числеEmployeeID, LastName(фамилия),Salary(зарплата) иDepartment(отделение).
Найти всех сотрудников с отделом «Продажи»:
SELECT EmployeeID, LastName
FROM Employees
WHERE Department = 'Sales';
Найдите сотрудников, чья зарплата больше или равна 50 000 и чей отдел не является отделом кадров:
SELECT *
FROM Employees
WHERE Salary >= 50000 AND Department != 'HR';
Найдите сотрудников с зарплатой от 60 000 до 80 000 (включительно):
SELECT *
FROM Employees
WHERE Salary BETWEEN 60000 AND 80000;
Найдите сотрудников в отделе «Маркетинг» или «Финансы»:
SELECT *
FROM Employees
WHERE Department IN ('Marketing', 'Finance');
Это эквивалентно использованиюWHERE Department = 'Marketing' OR Department = 'Finance'。
SQLGROUP BYпункт используется дляSELECTВ операторе строки с одинаковым значением (или комбинацией значений для нескольких полей) группируются в сводные столбцы. Он часто используется с SQLсводная функцияИспользуется вместе для расчета итогового значения для каждой группы.
GROUP BYОсновная функция — объединить несколько отдельных строк с одинаковым значением в таблице в одну группу (Group).COUNT()、SUM()、AVG()、MAX()илиMIN()В сочетании с итоговыми функциями вы можете рассчитывать сводную статистику для каждой группы, а не для всей таблицы.GROUP BYпункт должен быть вWHEREпункт, но послеHAVINGиORDER BYперед пунктом.
ВЫБЕРИТЕ имя_столбца(ов), агрегатная_функция(столбец_для_суммаризации)
ИЗ имя_таблицы
WHERE условие_on_rows — (необязательно) фильтровать отдельные строки перед группировкой
GROUP BY имя_столбца(ов) — указывает столбец, используемый для группировки.
HAVINGcondition_on_groups -- (необязательно) фильтровать группы после группировки
ORDER BY имя_столбца(ов);
Важные правила:все, что появляется вSELECTв списке, ноНетСтолбцы, окруженные сводными функциями,долженвключен вGROUP BYв п.
Предположим, существует файл с именемProductsстол, в том числеCategory(категория продукта) иPrice(цена).
SELECT Category, AVG(Price) AS AveragePrice, COUNT(ProductID) AS TotalProducts
FROM Products
GROUP BY Category;
GROUP BY Category: база данных директив будет иметь одно и то жеCategoryГруппировка строк значений.AVG(Price): вычислить среднее значение всех цен на продукты в каждой группе (каждой категории).COUNT(ProductID): подсчитать общее количество товаров в каждой группе (каждой категории).Вы можете группировать данные по нескольким полям. Строки будут сгруппированы вместе, только если все указанные поля имеют одинаковое значение.
SELECT Category, Supplier, SUM(SalesAmount) AS TotalSales
FROM SalesRecords
GROUP BY Category, Supplier
ORDER BY Category, Supplier;
В результате каждая строка будет представлять общий объем продаж для уникальной комбинации «Категория + Поставщик».
| функция | Функция |
|---|---|
COUNT() |
Подсчитайте количество строк в группе. |
SUM() |
Вычисляет сумму числовых полей в группе. |
AVG() |
Вычисляет среднее значение числовых полей в группе. |
MAX() |
Найдите максимальное значение поля в группе. |
MIN() |
Найдите минимальное значение поля в группе. |
В SQL,HAVINGПредложение используется для фильтрации результатов группы (Group), обычно оно используется сGROUP BYпредложения используются вместе.
ХотяWHEREПредложение используется для фильтрации строк одного столбца (Rows), но полезно, когда требуются сводные значения на основе групп (например,COUNT(), SUM(), AVG()При фильтрации групп путем ожидания результата итоговой функции) необходимо использоватьHAVINGпункт.
| особенность | Предложение ГДЕ | ПРЕДЛОЖЕНИЕ HAVING |
|---|---|---|
| время исполнения | Фильтруйте исходные строки перед группировкой данных (GROUP BY). | После группировки данных (GROUP BY) отфильтруйте суммированные группы. |
| Доступные условия | Сводные функции (такие как COUNT, SUM, AVG) нельзя использовать напрямую. | Функции агрегирования необходимо использовать для установки условий фильтра. |
| Объекты приложения | Значение одного столбца. | Результаты группы. |
ВЫБЕРИТЕ имя_столбца(ов), агрегатная_функция(имя_столбца)
ИЗ имя_таблицы
WHERE условие_on_rows -- (необязательно) фильтровать отдельные строки
ГРУППИРОВАТЬ ПО имя_столбца(ов)
HAVINGcondition_on_groups -- (обязательные) группы фильтров
ORDER BY имя_столбца(ов);
Предположим, есть файл с именемOrdersстол, в том числеCustomerID(идентификатор клиента) иTotalAmount(общая сумма заказа). мы хотим узнать всеСредняя сумма заказа превышает 500клиентов.
SELECT CustomerID, AVG(TotalAmount) AS AverageOrder
FROM Orders
GROUP BY CustomerID
HAVING AVG(TotalAmount) > 500;
GROUP BY CustomerID: Группировать все заказы по идентификатору клиента.AVG(TotalAmount): расчет средней суммы заказа на одного клиента.HAVING AVG(TotalAmount) > 500: Это состояние фильтра. Он сообщает SQL отображать только средние суммы заказов (т. е.AVG(TotalAmount)результаты) для групп (клиентов) более 500**.Предположим, мы хотим найти всех клиентов, общее количество заказов которых составляет **3** и средняя сумма заказов которых меньше 1000**.
SELECT CustomerID, COUNT(OrderID) AS TotalOrders, AVG(TotalAmount) AS AverageOrder
FROM Orders
GROUP BY CustomerID
HAVING COUNT(OrderID) >= 3 AND AVG(TotalAmount) < 1000;
HAVING COUNT(OrderID) >= 3: отфильтровать группы клиентов, в общей сложности менее 3 заказов.AND AVG(TotalAmount) < 1000: также отфильтровать группы клиентов, средняя сумма заказа которых превышает или равна 1000.существоватьSELECTВ запросе, если определеноexpr1 AS field1, может ли это быть вexpr2используется вfield1?
Порядок выполнения SQL определяет, что псевдонимы не могут находиться в одном и том же месте.SELECTВнутренне процитировано еще раз:
ВЫБОР цены * 1.1 AS новая_цена, новая_цена + 10 AS окончательная_цена ИЗ продуктов; -- Ошибка
Unknown column 'new_price' in 'field list'
можно вычислить сначала в подзапросеnew_price, а затем упоминается во внешнем запросе:
SELECT new_price, new_price + 10 AS final_price
FROM (SELECT price * 1.1 AS new_price FROM products) AS subquery;
Доступно, если SQL поддерживает общие табличные выражения (CTE).WITHЧтобы упростить:
WITH cte AS (
SELECT price * 1.1 AS new_price FROM products
)
SELECT new_price, new_price + 10 AS final_price FROM cte;
Если это простая операция, вы можете повторить расчет напрямую (но это не рекомендуется, поскольку читаемость плохая):
SELECT price * 1.1 AS new_price, price * 1.1 + 10 AS final_price FROM products;
SELECTСсылка на псевдоним в запросе.WITH) решить.JOIN используется для объединения связанных данных из нескольких таблиц данных и установления связи на основе определенного поля (обычно внешнего ключа).
Возвращаются только те данные, которые соответствуют условиям в двух таблицах данных.
SELECT orders.order_id, customers.name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
Возвращает все данные в левой таблице. Если в правой таблице соответствующих данных нет, они будут отображены.NULL。
SELECT customers.name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
Возвращает все данные в правой таблице. Если в левой таблице нет соответствующих данных, они будут отображены.NULL。
SELECT customers.name, orders.order_id
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;
Возвращает все данные в левой и правой таблицах и отображает их, если совпадений нет.NULL。
MySQL не поддерживает FULL JOIN, доступноLEFT JOINиRIGHT JOINКомбинированное моделирование.
SELECT customers.name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
UNION
SELECT customers.name, orders.order_id
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
Возвращает все возможные комбинации (декартово произведение) двух таблиц.
SELECT customers.name, products.product_name
FROM customers
CROSS JOIN products;
Используется для ассоциаций внутри одной таблицы, например, отношений начальников сотрудников.
SELECT A.name AS employee, B.name AS manager
FROM employees A
JOIN employees B ON A.manager_id = B.employee_id;
-- abc.sql SOURCE other_file.sql; SOURCE another_file.sql;
-- abc.sql \i other_file.sql \i another_file.sql
#!/bin/bash mysql -u user -p database_name < abc.sql mysql -u user -p database_name < other_file.sql
cat abc.sql other_file.sql another_file.sql > combined.sql mysql -u user -p database_name < combined.sql
SET @param1 = 'value1'; SOURCE other_file.sql;2. Ссылка на переменные в `other_file.sql`:
SELECT * FROM table WHERE column = @param1;
\set param1 'value1' \i other_file.sql2. Используйте переменные в `other_file.sql`:
SELECT * FROM table WHERE column = :'param1';
sed "s/{param1}/value1/g" abc.sql | mysql -u user -p database_name
2. Используйте заполнитель `{param1}` в файле SQL, заменяя его инструментом командной строки.psql -d database_name -v param1=value1 -f abc.sql2. Используйте `:'param1'` для представления переменных в файле SQL.
Хранимая процедура (хранимая процедура или хранимая процедура) — это набор операторов SQL, которые предварительно скомпилированы и хранятся в базе данных и могут выполняться посредством вызовов для повышения эффективности и уменьшения дублирования кода.
DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT * FROM products;
END //
DELIMITER ;
CALL GetAllProducts();
Поиск товаров в определенной категории:
DELIMITER //
CREATE PROCEDURE GetProductsByCategory(IN category_name VARCHAR(50))
BEGIN
SELECT * FROM products WHERE category = category_name;
END //
DELIMITER ;
вызов:
CALL GetProductsByCategory('electronics');
Подсчитаем общее количество товаров в категории:
DELIMITER //
CREATE PROCEDURE GetProductCountByCategory(IN category_name VARCHAR(50), OUT total_count INT)
BEGIN
SELECT COUNT(*) INTO total_count FROM products WHERE category = category_name;
END //
DELIMITER ;
вызов:
CALL GetProductCountByCategory('electronics', @count);
SELECT @count;
DELIMITER //
CREATE PROCEDURE CalculateTotalRevenue()
BEGIN
DECLARE total DECIMAL(10,2);
SELECT SUM(price) INTO total FROM sales;
SELECT total AS total_revenue;
END //
DELIMITER ;
вызов:
CALL CalculateTotalRevenue();
DELIMITER //
CREATE PROCEDURE CheckStock(IN product_id INT, OUT stock_status VARCHAR(20))
BEGIN
DECLARE stock INT;
SELECT quantity INTO stock FROM inventory WHERE id = product_id;
IF stock > 10 THEN
SET stock_status = 'In Stock';
ELSEIF stock > 0 THEN
SET stock_status = 'Low Stock';
ELSE
SET stock_status = 'Out of Stock';
END IF;
END //
DELIMITER ;
вызов:
CALL CheckStock(1, @status);
SELECT @status;
DELIMITER //
CREATE PROCEDURE CountDown(IN start_num INT)
BEGIN
DECLARE i INT;
SET i = start_num;
loop_label: LOOP
IF i <= 0 THEN
LEAVE loop_label;
END IF;
SELECT i;
SET i = i - 1;
END LOOP;
END //
DELIMITER ;
вызов:
CALL CountDown(5);
DROP PROCEDURE IF EXISTS GetAllProducts;
DELIMITERИзбегайте конфликтов синтаксиса SQL.В MySQL и MariaDB параметрам хранимых процедур нельзя напрямую установить значения по умолчанию (в отличие от SQL Server или PostgreSQL). Однако можно использоватьIFУсловные операторы для имитации заданных значений.
Предположим, мы хотим запроситьusersтаблица, когда параметрыuser_idЕсли он не указан, идентификатор запроса по умолчанию равен 1:
РАЗДЕЛИТЕЛЬ //
СОЗДАТЬ ПРОЦЕДУРУ GetUserById (IN user_id INT)
НАЧАТЬ
ЕСЛИ user_id НУЛЬ, ТО
УСТАНОВИТЬ user_id = 1; --Значение по умолчанию
КОНЕЦ ЕСЛИ;
ВЫБЕРИТЕ * ИЗ пользователей ГДЕ id = user_id;
КОНЕЦ //
РАЗДЕЛИТЕЛЬ;
ВЫЗОВ GetUserById(NULL); -- запросит id = 1
ВЫЗОВ GetUserById(5); -- Идентификатор запроса = 5
COALESCE()Вернет указанное значение по умолчанию, если параметр равен NULL:
DELIMITER //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT * FROM users WHERE id = COALESCE(user_id, 1);
END //
DELIMITER ;
ВЫЗОВ GetUserById(NULL); -- По умолчанию – 1.
ВЫЗОВ GetUserById(10); -- Идентификатор запроса = 10
Если вы хотите, чтобы параметры были необязательными, вы можете создать несколько хранимых процедур. Например:
DELIMITER //
CREATE PROCEDURE GetAllUsers()
BEGIN
SELECT * FROM users;
END //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT * FROM users WHERE id = user_id;
END //
DELIMITER ;
ВЫЗОВ GetAllUsers(); -- нет параметров, запросить все
ВЫЗОВ GetUserById(3); -- Идентификатор запроса = 3
DEFAULTценить.IFилиCOALESCE()Аналоговые настройки по умолчанию.Хранимая процедура MySQL/MariaDB не поддерживается.RETURNВозвращает результаты запроса, но может быть использованоOUTПараметры передают обратно значения.
DELIMITER //
CREATE PROCEDURE GetUserCount(OUT user_count INT)
BEGIN
SELECT COUNT(*) INTO user_count FROM users;
END //
DELIMITER ;
ВЫЗОВ GetUserCount(@total);
ВЫБЕРИТЕ @всего; -- Отображение количества пользователей
Если вы хотите вернуть результат запроса напрямуюSELECTВот и все:
DELIMITER //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT * FROM users WHERE id = user_id;
END //
DELIMITER ;
ВЫЗОВ GetUserById(5); -- Запрос пользователя с идентификатором 5
Хотя MySQL поддерживаетRETURN, но может возвращать только одно значение, обычно используемое для управления процессом:
РАЗДЕЛИТЕЛЬ //
СОЗДАТЬ ПРОЦЕДУРУ GetMaxSalary()
НАЧАТЬ
ОБЪЯВИТЬ max_salary DECIMAL(10,2);
ВЫБЕРИТЕ MAX(зарплата) INTO max_salary FROM сотрудников;
ВОЗВРАТ максимальная_зарплата; -- Но это не вернет значение непосредственно в MySQL.
КОНЕЦ //
РАЗДЕЛИТЕЛЬ;
CALLчтобы получить значение RETURN, поэтому рекомендуется использовать параметр OUT:DELIMITER //
CREATE PROCEDURE GetMaxSalary(OUT max_salary DECIMAL(10,2))
BEGIN
SELECT MAX(salary) INTO max_salary FROM employees;
END //
DELIMITER ;
ПОЗВОНИТЕ GetMaxSalary(@max);
ВЫБЕРИТЕ @макс; -- Отображение максимальной зарплаты
Используйте несколькоOUTПараметры возвращают разные результаты расчета:
DELIMITER //
CREATE PROCEDURE GetUserStats(OUT total_users INT, OUT avg_age DECIMAL(5,2))
BEGIN
SELECT COUNT(*) INTO total_users FROM users;
SELECT AVG(age) INTO avg_age FROM users;
END //
DELIMITER ;
ВЫЗОВ GetUserStats(@total, @avg);
ВЫБЕРИТЕ @total, @avg; -- Отображение общего количества и среднего возраста пользователей
OUTпараметр.SELECT。OUTпараметр.RETURNВозврат результатов запроса применим только для управления процессом.Доступ к хранимой процедуре MySQL можно получить черезOUTПараметры возвращают значения, которые затем можно использовать вне CALL.SELECTПолучите это значение.
DELIMITER //
CREATE PROCEDURE GetTotalUsers(OUT total_users INT)
BEGIN
SELECT COUNT(*) INTO total_users FROM users;
END //
DELIMITER ;
ВЫЗОВ GetTotalUsers(@total);
ВЫБЕРИТЕ @total AS UserCount; -- Использовать возвращаемое значение вне CALL
Если хранимая процедура используетSELECTВозвращаемые результаты не могут быть напрямую сохранены в переменных, но их можно использовать.INSERT INTO ... SELECT。
DELIMITER //
CREATE PROCEDURE GetMaxSalary()
BEGIN
SELECT MAX(salary) AS max_salary FROM employees;
END //
DELIMITER ;
СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ temp_result (max_salary DECIMAL (10,2));
INSERT INTO temp_result ВЫПОЛНИТЬ GetMaxSalary();
ВЫБЕРИТЕ max_salary ИЗ temp_result; -- используется вне CALL
Если к результатам, сгенерированным хранимой процедурой, необходимо получить доступ в переменных, вы можете использоватьPREPAREиEXECUTE。
DELIMITER //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT name FROM users WHERE id = user_id;
END //
DELIMITER ;
SET @sql = 'CALL GetUserById(5)';
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
OUTПараметр возвращает одно значение в листовке, переданное@переменнаядоступ.INSERT INTO ... CALLХраните в промежуточной таблице.PREPAREиEXECUTE。В MySQL/MariaDB сохраненная функция (функция) не может быть возвращенаSELECTНабор результатов, иначе произойдет ошибка:
ERROR 1415 (0A000): Not allowed to return a result set from a function
Функции не могут возвращать наборы результатов, а хранимые процедуры — могут.
РАЗДЕЛИТЕЛЬ //
СОЗДАТЬ ФУНКЦИЮ GetUsers()
ТАБЛИЦА ВОЗВРАТА
НАЧАТЬ
ВОЗВРАТ (ВЫБРАТЬ * ОТ пользователей); -- Это запрещено
КОНЕЦ //
РАЗДЕЛИТЕЛЬ;
DELIMITER //
CREATE PROCEDURE GetUsers()
BEGIN
SELECT * FROM users;
END //
DELIMITER ;
CALL GetUsers();
Если вам нужно вернуть только одно значение (например, количество или максимальное значение), вы можете использоватьRETURN。
DELIMITER //
CREATE FUNCTION GetUserCount()
RETURNS INT DETERMINISTIC
BEGIN
DECLARE total INT;
SELECT COUNT(*) INTO total FROM users;
RETURN total;
END //
DELIMITER ;
SELECT GetUserCount();
Если вам действительно нужно вернуть несколько строк результатов внутри функции, вы можете заставить функцию вставить данные во временную таблицу, а затем запросить их извне.
DELIMITER //
CREATE FUNCTION PopulateTempUsers()
RETURNS INT DETERMINISTIC
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS temp_users AS (SELECT * FROM users);
RETURN 1;
END //
DELIMITER ;
SELECT PopulateTempUsers();
SELECT * FROM temp_users;
RETURN。HeidiSQL — это бесплатный SQL-клиент с открытым исходным кодом, поддерживающий MySQL, MariaDB, PostgreSQL и MS SQL Server. Он предоставляет графический интерфейс для управления базами данных, выполнения SQL-запросов, импорта/экспорта данных и т. д.
1. Перейдите на официальный сайт, чтобы скачать HeidiSQL:https://www.heidisql.com/download.php2. Запустите программу установки и следуйте инструкциям для завершения установки.
3. Откройте HeidiSQL и настройте новое соединение.
1. Запустите HeidiSQL
2. Нажмите «Добавить», чтобы создать новое соединение.
3. Настройки:
- Имя хоста/IP: 127.0.0.1 или IP удаленного сервера.
- Имя пользователя: root или другой пользователь
- Пароль: соответствующий пароль
- Порт: 3306 (MySQL/MariaDB)
4. Нажмите «Открыть», чтобы подключиться к базе данных.
Введите оператор SQL в окне запроса HeidiSQL:
SELECT * FROM users WHERE status = 'active';
Нажмите кнопку «Выполнить», чтобы просмотреть результаты.
1. Щелкните базу данных правой кнопкой мыши → выберите «Экспортировать SQL».
2. Выберите таблицу данных для экспорта.
3. Установите формат экспорта (.sql, .csv, .json).
4. Нажмите «Экспортировать».
1. Откройте HeidiSQL и выберите целевую базу данных.
2. Нажмите «Инструменты» → «Выполнить SQL-файл».
3. Выберите файл .sql и выполните
1. Войдите в «Инструменты» → «Управление разрешениями пользователей».
2. Выберите пользователей для управления
3. Установите права доступа к базе данных (SELECT, INSERT, UPDATE, DELETE и т. д.).
4. Нажмите «Сохранить».
1. Запустите HeidiSQL.
2. Подключитесь к серверу MySQL или MariaDB.
3. Выберите целевую базу данных в списке База данных слева.
1. Щелкните правой кнопкой мыши имя базы данных слева и выберите «Создать новую» → «Сохранить программу».
2. HeidiSQL откроет новое окно редактирования SQL и предоставит шаблон хранимой процедуры по умолчанию.
Ниже приведен простой пример, который возвращает все данные в таблице пользователей:
DELIMITER //
CREATE PROCEDURE GetAllUsers()
BEGIN
SELECT * FROM users;
END //
DELIMITER ;
1. Нажмите кнопку «Перейти» (зеленая молния).
2. Если выполнение прошло успешно, программу можно будет найти в столбце «Сохранить программу» слева.
CALL GetAllUsers();
Передайте параметры для фильтрации данных, например запроса на основе идентификатора пользователя:
DELIMITER //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT * FROM users WHERE id = user_id;
END //
DELIMITER ;
Вызов хранимой процедуры с параметрами:
CALL GetUserById(1);
DROP PROCEDURE IF EXISTS GetAllUsers;
DELIMITERУбедитесь, что синтаксис правильный.CALLТестируйте хранимые процедуры.В современной среде разработки программного обеспечения приложения баз данных превратились из простых хранилищ данных в комплексные решения, интегрирующие искусственный интеллект, периферийные вычисления и автоматизированное управление и обслуживание. Ниже приведены текущие основные модели развития:
С ростом популярности больших языковых моделей (LLM) стандартом разработки стала генерация с расширенным поиском (RAG). Этот тип решения ориентирован на векторизацию и поиск неструктурированных данных.
Чтобы упростить эксплуатацию и обслуживание, а также снизить начальные затраты, разработчики обычно выбирают службы баз данных с возможностями автоматического масштабирования, что особенно популярно в веб-приложениях.
В экосистеме TypeScript синхронизация определений базы данных с типами внешнего интерфейса является ключом к обеспечению стабильности системы.
Чтобы справиться с глобальным доступом и сократить задержки, стала тенденцией размещать данные ближе к пользователям.
| Категория плана | Представлять технологии | Основные преимущества |
|---|---|---|
| ИИ прежде всего | pgvector, Milvus | Поддержка семантического поиска и построения базы знаний. |
| Бессерверный тип | Supabase, Vercel Postgres | Эксплуатация и обслуживание с нулевой нагрузкой, выставление счетов в зависимости от объема |
| Эффективный тип разработки | Drizzle ORM, Prisma | Чрезвычайно высокая типобезопасность и скорость разработки. |
| Децентрализованная архитектура | CockroachDB, TiDB | Межрегиональное развертывание, автоматическая отказоустойчивость |
В современной разработке приложений баз данных внешний интерфейс больше не ограничивается представлением данных, но также делает упор на синхронизацию типов с внутренней базой данных, управление состоянием и производительность рендеринга на стороне сервера. В настоящее время основными вариантами являются следующие:
В настоящее время это решение имеет наибольшую долю рынка и самую широкую поддержку сообщества и особенно подходит для сложных систем управления базами данных.
Известный своей простой кривой обучения и высокоинтегрированной цепочкой инструментов, он очень популярен в системах управления бэкэндом средних и крупных предприятий.
Чтобы повысить эффективность разработки и уменьшить количество ошибок при передаче данных, современные интерфейсы в значительной степени полагаются на следующие инструменты:
Для интерфейсов управления базами данных, используемых на предприятиях, разработчики часто выбирают более быстрые интеграционные решения.
| Имя схемы | Применимые сценарии | Основные преимущества |
|---|---|---|
| Next.js + Tailwind | SaaS-продукты, современные веб-приложения | SEO-оптимизация, максимальная оптимизация производительности |
| Vue + Element Plus | Внутренняя серверная часть и система управления предприятия | Богатые компоненты и чрезвычайно быстрая разработка |
| TanStack Query | Приложения с высокочастотным обновлением данных | Мощное управление кэшем и автоматическая синхронизация. |
| Retool | Инструменты для аварийного внутреннего обслуживания | Перетаскивание, почти не нужно писать CSS |
Современные инструменты веб-управления базами данных позволяют командам получать доступ к данным непосредственно через браузер без необходимости установки программного обеспечения для настольных компьютеров. В зависимости от функционального позиционирования они подразделяются на четыре категории:
Инструменты этого типа поддерживают несколько подключений к базам данных (например, MySQL, PostgreSQL, SQL Server) и подходят для разработчиков, управляющих различными средами.
Пользовательский интерфейс, глубоко оптимизированный для конкретной базы данных оригинальным производителем или сообществом.
Преобразуйте базу данных в интуитивно понятный интерфейс, аналогичный Excel, подходящий для нетехнического персонала или для быстрого создания внутренней серверной части.
Если данные размещены у поставщика облачных услуг, собственная веб-консоль обычно имеет самый высокий уровень интеграции.
CloudBeaver — это веб-решение для управления базами данных с открытым исходным кодом, разработанное командой DBeaver. Он использует серверную часть Java и интерфейсную архитектуру React, что позволяет пользователям безопасно управлять различными базами данных через браузер, что очень подходит для сценариев, требующих удаленного доступа или совместной работы в команде.
CloudBeaver предоставляет Community Edition с открытым исходным кодом (Community) и коммерческую версию Enterprise Edition (Enterprise). Основное отличие заключается в расширенной поддержке функций:
| Функции | Сообщество | Предприятие (Предприятие) |
|---|---|---|
| Поддержка базы данных SQL | Поддерживает большинство распространенных SQL | Содержит NoSQL (MongoDB, Redis) |
| Интеграция облачных сервисов | базовая проводка | Встроенная поддержка AWS, GCP, просмотра ресурсов Azure. |
| Аутентификация | Пароль учетной записи | Поддерживает единый вход, SAML, LDAP, Kerberos. |
| Расширенные инструменты | Основной запрос | AI-помощник (генерация SQL), визуальный построитель запросов |
Наиболее рекомендуемый метод установки CloudBeaver — использовать Docker, поскольку он уже содержит все необходимые среды и драйверы Java. Существует три основных пути развертывания:
Это самый простой метод: просто выполните одну строку инструкций, чтобы запустить службу. По умолчанию он будет прослушивать порт 8978.
docker run --name cloudbeaver -d -p 8978:8978 dbeaver/cloudbeaver:latest
После выполнения откройте ввод в браузереhttp://localhost:8978Вы можете войти в мастер настройки.
Сохранением данных можно легко управлять с помощью файлов Compose, чтобы гарантировать, что настройки не будут потеряны после перезапуска контейнера.
version: '3'
services:
cloudbeaver:
image: dbeaver/cloudbeaver:latest
container_name: cloudbeaver
restart: unless-stopped
ports:
- "8978:8978"
volumes:
- ./cloudbeaver-data:/opt/cloudbeaver/workspace
Сохраните приведенный выше контент какdocker-compose.yml, а затем выполнитьdocker-compose up -d。
Если Docker невозможно использовать в среде, вы можете скачать скомпилированный двоичный файл и установить его вручную:
cloudbeaver-ce-latest-linux-x86_64.tar.gz)。tar -xvf cloudbeaver-ce-latest-linux-x86_64.tar.gz。./run-server.sh(Linux/macOS) илиrun-server.bat (Windows)。При первом входе в веб-интерфейс система проведет вас через следующую настройку:
email: [email protected]