SQL(Structured Query Language)은 관계형 데이터베이스를 관리하고 운영하는 데 사용되는 구조화된 쿼리 언어입니다. 데이터베이스 관리 시스템에서 가장 널리 사용되는 언어 중 하나입니다.
-- 데이터 쿼리
SELECT * FROM 테이블 이름 WHERE 조건;
--데이터 삽입
INSERT INTO 테이블 이름(열 1, 열 2) VALUES(값 1, 값 2);
--데이터 업데이트
UPDATE 테이블 이름 SET 열 1 = 값 1 WHERE 조건;
-- 데이터 삭제
DELETE FROM 테이블 이름 WHERE 조건;
--테이블 생성
CREATE TABLE 테이블 이름(
열 이름 1 데이터 유형,
열 이름 2 데이터 유형
);
INT: 정수형.VARCHAR(n):가변 길이 문자열, 최대n문자.DATE:날짜 유형.FLOAT: 부동 소수점 유형.BOOLEAN: 부울 값(true 또는 false)입니다.MySQL은 SQL을 쿼리 언어로 사용하고 중소 규모 및 대규모 애플리케이션에 적합한 인기 있는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
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에 비해 높습니다. |
| 오픈 소스 커뮤니티는 매우 활발하며 벤더 종속이 없습니다. | 설정해야 할 매개변수가 많으며 초보자는 성능을 구성하고 최적화하기 위해 긴 학습 곡선이 필요합니다. |
전체 이름이 Transact-SQL인 T-SQL은 Microsoft와 Sybase가 개발한 SQL 표준의 확장 버전입니다. Microsoft SQL Server 및 Azure SQL 관련 서비스의 핵심 통신 언어입니다. 표준 SQL과 비교하여 T-SQL은 프로그래밍 기능을 추가하여 데이터를 쿼리할 뿐만 아니라 복잡한 논리 작업도 처리할 수 있습니다.
| 기능 유형 | 표준 SQL(ANSI) | T-SQL (Microsoft) |
|---|---|---|
| 문자열 연결 | 이중 수직 막대를 사용하세요 || | 더하기 기호 사용 + |
| 반환되는 열 수 제한 | 먼저 가져오기 사용 | TOP 키워드를 사용하세요 |
| 데이터 유형 변환 | CAST | CAST 및 CONVERT(형식 지원) |
| 프로그램 로직 | 주로 기본적인 문의사항 | 완전한 절차적 프로그래밍 언어 기능 |
다음 코드는 T-SQL에서 변수, 논리적 판단 및 데이터 쿼리를 결합하는 방법을 보여줍니다.
-- 변수 선언 및 설정
DECLARE @Threshold INT = 100;
@CurrentStock INT를 선언하세요.
-- 특정 제품의 재고 가져오기
@CurrentStock = 재고 수량 선택
제품에서
제품 ID = 5인 경우;
-- 논리적 판단
IF @CurrentStock < @임계값
시작
PRINT '경고: 재고가 미리 설정된 임계값보다 낮습니다. ';
-- 보충 로직을 실행합니다...
종료
그 외
시작
SELECT * FROM 제품 WHERE ProductID = 5;
끝
T-SQL은 다음 분야에서 널리 사용됩니다.
T-SQL은 표준 SQL을 확장하여 완전한 프로그래밍 기능을 제공합니다. 변수, 논리 제어 및 오류 처리를 통해 개발자는 데이터베이스 수준에서 복잡한 비즈니스 논리를 작성할 수 있습니다.
T-SQL에서 모든 사용자 지정 변수는 @ 기호로 시작해야 합니다. 선언에는 DECLARE를 사용하고 할당에는 SET 또는 SELECT를 사용합니다.
-- 변수 선언
@EmployeeCount INT를 선언하세요.
DECLARE @DepartmentName NVARCHAR(50);
-- 할당
SET @DepartmentName = 'IT 부서';
--쿼리 결과에서 값 할당
SELECT @EmployeeCount = 개수(*)
직원으로부터
WHERE 부서 = @DepartmentName;
-- 출력 결과
@EmployeeCount를 인쇄하세요.
IF...ELSE 문을 사용하면 조건에 따라 다양한 코드 블록을 실행할 수 있습니다. 블록에 여러 문이 포함된 경우 BEGIN...END로 래핑해야 합니다.
@StockLevel INT를 선언하세요.
SET @StockLevel = 10;
IF @StockLevel < 5
시작
PRINT '재고가 매우 부족합니다. 즉시 재입고해 주세요. ';
종료
ELSE IF @StockLevel < 20
시작
PRINT '재고가 부족하여 재입고를 권장합니다. ';
종료
그 외
시작
PRINT '재고 있습니다. ';
끝
T-SQL에서 제공하는 TRY...CATCH 메커니즘은 최신 프로그래밍 언어(예: C# 또는 Java)와 유사하며 실행 중 예외를 캡처하여 비정상적인 프로그램 중단을 방지할 수 있습니다.
시도해 보세요
-- 실행을 시도하는 코드
INSERT INTO Sales(주문 ID, 제품 ID, 수량)
값(1001, 'P01', -5); -- 제약 조건 오류가 발생한다고 가정합니다.
시도 종료
잡기 시작
-- 오류 발생 시 처리
선택
ERROR_NUMBER() AS 오류 번호,
ERROR_MESSAGE() AS 오류 메시지,
ERROR_SEVERITY() 심각도;
--롤백 트랜잭션
IF @@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를 상속하고 "cat"이라는 고유한 속성을 저장합니다.
| 필드 이름 | 데이터 유형 | 설명하다 |
|---|---|---|
| id | INT | 동물 테이블의 id에 해당합니다. |
| 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');
| 동물 ID | 유형 | 나이 |
|---|---|---|
| 1 | Cat | 3 |
| 동물 ID | 다양성 | 음식을 사랑해 |
|---|---|---|
| 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 상위 데이터 테이블(기본 키 필드)
);
주문, 고객 등 일대다 관계를 설정합니다.
-- 상위 데이터 테이블(고객) 생성
CREATE TABLE 고객(
customer_id INT 기본 키,
이름 VARCHAR(50)
);
--하위 테이블(주문) 생성 및 외래 키 설정
CREATE TABLE 주문(
order_id INT 기본 키,
고객_ID INT,
주문_날짜 DATE,
FOREIGN KEY (customer_id) REFERENCES 고객(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필드에 메모를 추가합니다.
CREATE TABLE 사용자(
id INT PRIMARY KEY COMMENT '사용자 고유 식별 코드',
name VARCHAR(50) COMMENT '사용자 이름',
age INT COMMENT '사용자의 나이'
);
CREATE TABLE 사용자(
ID INT 기본 키,
이름 VARCHAR(50),
나이INT
) COMMENT = '사용자 정보 테이블';
필드의 설명은 다음 구문을 통해 쿼리할 수 있습니다.
SHOW FULL COLUMNS FROM users;
ALTER TABLE 사용자 MODIFY COLUMN 이름 VARCHAR(50) COMMENT '수정된 설명';
COMMENT, 그러나 SQLite는 이를 지원하지 않습니다.COMMENT ON지침.COMMENT ON COLUMN users.name IS '사용자 이름';
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 Epoch 시간(밀리초))입니다.
MySQL 내장 함수(예:FROM_UNIXTIME) 기본 처리는 **두 번째 수준 타임스탬프**입니다. 따라서 사용하기 전에 밀리초 타임스탬프를 초로 변환해야 합니다.
MySQL 함수에 필요한 두 번째 수준 타임스탬프를 얻으려면 밀리초 값을 $1000$로 나눕니다.
1763251200000 / 1000 = 1763251200
사용FROM_UNIXTIME()함수는 두 번째 수준 타임스탬프를 표준 MySQL로 변환합니다.DATETIME체재:
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()고정된 소수 자릿수로 반올림하는 데 사용됩니다.
SELECT ROUND(123.4567, 2); -- 결과: 123.46
고정된 소수 자릿수를 유지하려면 FLOAT를 DECIMAL로 변환하세요.
SELECT CAST(123.4567 AS DECIMAL(10,2)); -- 결과: 123.46
SELECT 변환(123.4567, 십진수(10,2)); -- 결과: 123.46
SELECT id, FORMAT(price, 2) AS formatted_price FROM products;
데이터 테이블 생성 시 소수점 이하 자릿수를 직접 설정할 수 있습니다.
CREATE TABLE 제품(
ID 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, DELETESQL 명령과 함께 사용하십시오.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(부서).
부서가 'Sales'인 모든 직원을 찾습니다.
SELECT EmployeeID, LastName
FROM Employees
WHERE Department = 'Sales';
급여가 50,000 이상이고 부서가 'HR'이 아닌 직원을 찾습니다.
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조항 전.
SELECT 열 이름(들), 집계_함수(열_to_summarize)
FROM table_name
WHERE Condition_on_rows - (선택 사항) 그룹화하기 전에 단일 행을 필터링합니다.
GROUP BY column_name(s) -- 그룹화에 사용되는 열을 지정합니다.
HAVING Condition_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절.
| 특징 | WHERE 절 | HAVING 절 |
|---|---|---|
| 실행 타이밍 | 데이터를 그룹화하기(GROUP BY) 전에 원래 행을 필터링합니다. | 데이터를 그룹화(GROUP BY)한 후 요약된 그룹을 필터링합니다. |
| 사용 가능한 조건 | 요약 함수(예: COUNT, SUM, AVG)는 직접 사용할 수 없습니다. | 필터 조건을 설정하려면 집계 함수를 사용해야 합니다. |
| 애플리케이션 객체 | 단일 열 값입니다. | 그룹 결과. |
SELECT 열_이름(들), 집계_함수(열_이름)
FROM table_name
WHERE Condition_on_rows - (选择性) 过滤单行
GROUP BY 컬럼_이름
HAVING Condition_on_groups -- (必须) 过滤群组
ORDER BY 컬럼_이름;
라는 파일이 있다고 가정하자.Orders테이블을 포함하여CustomerID(고객 ID) 및TotalAmount(총 주문 금액). 우리는 모두 알고 싶어평균 주문 금액이 500개를 초과합니다.고객의.
SELECT CustomerID, AVG(TotalAmount) AS AverageOrder
FROM Orders
GROUP BY CustomerID
HAVING AVG(TotalAmount) > 500;
GROUP BY CustomerID: 모든 주문을 고객 ID별로 그룹화합니다.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: 평균 주문량이 1,000건 이상인 고객 그룹도 필터링합니다.존재하다SELECT쿼리에서 정의된 경우expr1 AS field1, 들어갈 수 있나요?expr2에 사용field1?
SQL의 실행 순서에 따라 별칭이 동일할 수 없음이 결정됩니다.SELECT내부적으로 다시 인용:
SELECT 가격 * 1.1 AS new_price, new_price + 10 AS 최종 가격 FROM 제품; -- 오류
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. SQL 파일에서 `{param1}` 자리 표시자를 사용하고 명령줄 도구로 대체합니다.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;
DELIMITERSQL 구문 충돌을 피하세요.MySQL 및 MariaDB에서는 SQL Server 또는 PostgreSQL과 달리 저장 프로시저 매개변수를 기본값으로 직접 설정할 수 없습니다. 그러나 다음을 사용할 수 있습니다.IF사전 설정된 값을 시뮬레이션하는 조건문입니다.
쿼리하고 싶다고 가정 해 보겠습니다.users테이블, 매개변수인 경우user_id제공되지 않은 경우 기본 쿼리 ID는 1입니다.
구분 기호 //
프로시저 생성 GetUserById(IN user_id INT)
시작
user_id가 NULL인 경우
SET 사용자_ID = 1; --기본값
종료하면;
SELECT * FROM 사용자 WHERE id = user_id;
끝 //
구분 기호;
GetUserById(NULL) 호출; -- ID = 1을 쿼리합니다.
GetUserById(5)를 호출합니다. -- 쿼리 ID = 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)를 호출합니다. -- 쿼리 ID = 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)를 호출합니다. -- 쿼리 ID = 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 ;
CALL GetUserCount(@total);
@전체 선택; -- 사용자 수 표시
쿼리 결과를 직접 반환하려면SELECT그게 다야 :
DELIMITER //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT * FROM users WHERE id = user_id;
END //
DELIMITER ;
GetUserById(5)를 호출합니다. -- ID 5를 가진 사용자를 쿼리합니다.
MySQL은 지원하지만RETURN, 그러나 일반적으로 프로세스를 제어하는 데 사용되는 단일 값만 반환할 수 있습니다.
구분 기호 //
절차 만들기 GetMaxSalary()
시작
DECLARE max_salary DECIMAL(10,2);
SELECT MAX(급여) INTO max_salary FROM 직원;
RETURN max_salary; -- 하지만 이는 MySQL에서 직접 값을 반환하지 않습니다.
끝 //
구분 기호;
CALLRETURN 값을 얻으려면 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 ;
CALL GetUserStats(@total, @avg);
SELECT @전체, @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 EXECUTE GetMaxSalary();
temp_result에서 max_salary를 선택하세요. -- 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에서는 Stored Function(함수)를 반환할 수 없습니다.SELECT결과가 설정됩니다. 그렇지 않으면 오류가 발생합니다.
ERROR 1415 (0A000): Not allowed to return a result set from a function
함수는 결과 집합을 반환할 수 없지만 저장 프로시저는 가능합니다.
구분 기호 //
함수 만들기 GetUsers()
반품표
시작
RETURN (SELECT * FROM 사용자); -- 이는 허용되지 않습니다.
끝 //
구분 기호;
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은 MySQL, MariaDB, PostgreSQL 및 MS SQL Server를 지원하는 무료 오픈 소스 SQL 클라이언트입니다. 데이터베이스 관리, SQL 쿼리 실행, 데이터 가져오기/내보내기 등을 위한 GUI를 제공합니다.
1. HeidiSQL을 다운로드하려면 공식 웹사이트로 이동하세요.https://www.heidisql.com/download.php2. 설치 프로그램을 실행하고 안내에 따라 설치를 완료하세요.
3. HeidiSQL을 열고 새 연결을 설정합니다.
1. HeidiSQL을 시작합니다.
2. "추가"를 클릭하여 새 연결을 만듭니다.
3. 설정:
- 호스트 이름/IP: 127.0.0.1 또는 원격 서버 IP
- 사용자 이름: 루트 또는 다른 사용자
- 비밀번호 : 해당 비밀번호
- 포트: 3306(MySQL/MariaDB)
4. "열기"를 클릭하여 데이터베이스에 연결하세요.
HeidiSQL 쿼리 창에 SQL 문을 입력합니다.
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();
사용자 ID를 기반으로 한 쿼리와 같이 데이터를 필터링하려면 매개변수를 전달합니다.
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저장 프로시저를 테스트합니다.오늘날의 소프트웨어 개발 환경에서 데이터베이스 애플리케이션은 단순한 데이터 저장에서 AI, 엣지 컴퓨팅, 자동화된 운영 및 유지 관리를 통합하는 포괄적인 솔루션으로 발전했습니다. 다음은 현재 주류 개발 모델입니다.
LLM(대형 언어 모델)의 인기로 인해 RAG(검색 증강 생성)가 개발 표준이 되었습니다. 이 유형의 솔루션은 구조화되지 않은 데이터의 벡터화 및 검색에 중점을 둡니다.
운영 및 유지 관리를 단순화하고 시작 비용을 줄이기 위해 개발자는 특히 웹 애플리케이션에서 널리 사용되는 자동 확장 기능이 있는 데이터베이스 서비스를 선택하는 경향이 있습니다.
TypeScript 생태계에서는 데이터베이스 정의를 프런트엔드 유형과 동기화하는 것이 시스템 안정성을 보장하는 데 중요합니다.
글로벌 액세스에 대처하고 지연 시간을 줄이기 위해 데이터를 사용자 가까이에 배치하는 것이 추세가 되었습니다.
| 계획 카테고리 | 기술을 대표하다 | 핵심 장점 |
|---|---|---|
| AI 우선 | 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)을 지원하며 다양한 환경을 관리하는 개발자에게 적합합니다.
원 제조사나 커뮤니티에 의해 특정 데이터베이스에 맞게 심층적으로 최적화된 UI입니다.
데이터베이스를 Excel과 유사한 직관적인 인터페이스로 변환하여 기술 담당자가 아니거나 내부 백엔드를 빠르게 구축하는 데 적합합니다.
데이터가 클라우드 서비스 제공업체에서 호스팅되는 경우 기본 웹 콘솔은 일반적으로 가장 높은 수준의 통합을 갖습니다.
CloudBeaver는 DBeaver 팀이 개발한 오픈 소스 웹 기반 데이터베이스 관리 솔루션입니다. Java 백엔드와 React 프론트엔드 아키텍처를 사용하여 사용자가 브라우저를 통해 다양한 데이터베이스를 안전하게 관리할 수 있도록 하며, 이는 원격 액세스나 팀 협업이 필요한 시나리오에 매우 적합합니다.
CloudBeaver는 오픈 소스 Community Edition(Community)과 상용 Enterprise Edition(Enterprise)을 제공합니다. 주요 차이점은 고급 기능 지원에 있습니다.
| 특징 | 지역 사회 | 기업 (Enterprise) |
|---|---|---|
| SQL 데이터베이스 지원 | 대부분의 주류 SQL을 지원합니다. | NoSQL(MongoDB, Redis) 포함 |
| 클라우드 서비스 통합 | 기본 배선 | AWS, GCP, Azure 리소스 검색에 대한 기본 지원 |
| 입증 | 계정 비밀번호 | SSO, 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(리눅스/macOS) 또는run-server.bat (Windows)。처음 웹 인터페이스에 들어가면 시스템이 다음 구성을 안내합니다.
email: [email protected]