๊ตญ์ฐ ์คํ์์ค RDBMS CUBRID: ํ์ด์ง, ๋ ์ง ํจ์, SERIAL(์ํ์ค), CONNECT BY ๊ณ์ธต ์ฟผ๋ฆฌ, ์ปฌ๋ ์
ํ์
๋ฐ csql/์๋ฒ ๊ด๋ฆฌ CLI ๋ ํผ๋ฐ์ค
## 1. ํ์ด์ง ์ฟผ๋ฆฌ (LIMIT & ROWNUM)
```sql
-- ๐ก CUBRID๋ MySQL์ LIMIT๊ณผ Oracle์ ROWNUM ๋ฌธ๋ฒ์ ๋ ๋ค ์ง์ํฉ๋๋ค!
-- 1. LIMIT ๋ฌธ๋ฒ (๊ถ์ฅ: ์ง๊ด์ ์ด๊ณ ๋น ๋ฆ)
SELECT emp_id, emp_name, salary
FROM employees
ORDER BY emp_id DESC
LIMIT 20, 10; -- 21๋ฒ์งธ ํ๋ถํฐ 10๊ฑด ์กฐํ (๋๋ LIMIT 10 OFFSET 20)
-- 2. ROWNUM ๋ฌธ๋ฒ (Oracle ์คํ์ผ)
SELECT *
FROM (
SELECT a.*, ROWNUM AS rnum
FROM (
SELECT emp_id, emp_name, salary
FROM employees
ORDER BY emp_id DESC
) a
WHERE ROWNUM <= 30
)
WHERE rnum >= 21;
```
## 2. ๋ ์ง & ์๊ฐ ํจ์ (Date & Timestamp)
```sql
-- 1. ํ์ฌ ์ผ์ ํ์ธ
SELECT SYS_DATETIME, SYSDATE, SYS_DATE, SYS_TIME;
-- 2. ๋ ์ง ํฌ๋งท ๋ณํ (TO_CHAR / TO_DATETIME)
SELECT TO_CHAR(SYS_DATETIME, 'YYYY-MM-DD HH24:MI:SS');
SELECT TO_DATETIME('2026-09-26 14:30:00', 'YYYY-MM-DD HH24:MI:SS');
-- 3. ๋ ์ง ๊ฐ๊ฐ ์ฐ์ฐ (ADDDATE / DATE_ADD)
SELECT ADDDATE(SYS_DATETIME, INTERVAL 7 DAY); -- 7์ผ ํ
SELECT ADDDATE(SYS_DATETIME, INTERVAL 1 MONTH); -- 1๊ฐ์ ํ
SELECT SUBDATE(SYS_DATETIME, INTERVAL 2 HOUR); -- 2์๊ฐ ์
-- 4. ๋ ์ง ์ฐจ์ด ๊ณ์ฐ
SELECT DATEDIFF('2026-12-31', SYS_DATE);
```
## 3. NULL ์ฒ๋ฆฌ & ๋ถ๊ธฐ ์กฐ๊ฑด๋ฌธ (Oracle/MySQL ํ์ด๋ธ๋ฆฌ๋)
```sql
-- 1. NVL & IFNULL (๋ ๋ค ์ง์)
SELECT NVL(commission, 0) FROM employees;
SELECT IFNULL(commission, 0) FROM employees;
-- 2. NVL2(expr, not_null, is_null)
SELECT NVL2(bonus, '์ง๊ธ์๋ฃ', '๋ฏธ์ง๊ธ') FROM employees;
-- 3. DECODE (Oracle ์คํ์ผ ์กฐ๊ฑด๋ฌธ)
SELECT DECODE(dept_id, 10, '์ธ์ฌํ', 20, '๊ฐ๋ฐํ', '๊ธฐํ') FROM employees;
-- 4. ํ์ค CASE WHEN ๊ตฌ๋ฌธ
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END AS grade
FROM exams;
```
## 4. ๋ฌธ์์ด ์ฐ์ฐ & ๊ทธ๋ฃน ํฉ์น๊ธฐ
```sql
-- 1. ๋ฌธ์์ด ์ฐ๊ฒฐ (|| ๋ฐ + ๋ฐ CONCAT ๋ชจ๋ ์ง์)
SELECT first_name || ' ' || last_name FROM employees;
SELECT CONCAT(first_name, ' ', last_name) FROM employees;
-- 2. ๊ทธ๋ฃน ๋ฌธ์์ด ํฉ์น๊ธฐ (GROUP_CONCAT)
SELECT dept_id,
GROUP_CONCAT(emp_name ORDER BY emp_name SEPARATOR ', ') AS members
FROM employees
GROUP BY dept_id;
-- 3. ์๋ฅด๊ธฐ & ๊ธธ์ด
SELECT SUBSTR('CUBRID', 1, 3); -- 'CUB'
SELECT CHAR_LENGTH('ํ๋ธ๋ฆฌ๋'); -- 4 (๋ฌธ์์)
```
## 5. SERIAL (์ผ๋ จ๋ฒํธ ์ํ์ค)
```sql
-- 1. ์๋ฆฌ์ผ ์์ฑ
CREATE SERIAL user_seq START WITH 1 INCREMENT BY 1;
-- 2. ๋ค์ ์ผ๋ จ๋ฒํธ ๋ฐ๊ธ (NEXT_VALUE)
SELECT user_seq.NEXT_VALUE;
-- 3. ํ์ฌ ๋ฐ๊ธ๋ ๋ฒํธ ํ์ธ (CURRENT_VALUE)
SELECT user_seq.CURRENT_VALUE;
-- 4. INSERT ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์๋ฆฌ์ผ ์ง์ ๊ฐ๋ฅ
CREATE TABLE users (
id INT DEFAULT user_seq.NEXT_VALUE PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO users (name) VALUES ('ํ๊ธธ๋');
```
## 6. Upsert (MERGE INTO & DUPLICATE KEY)
```sql
-- ๐ก CUBRID๋ MERGE INTO์ ON DUPLICATE KEY UPDATE๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค.
-- ๋ฐฉ๋ฒ 1: MERGE INTO ๋ฌธ
MERGE INTO user_score t
USING (SELECT 101 AS user_id, 95 AS score) s
ON (t.user_id = s.user_id)
WHEN MATCHED THEN
UPDATE SET t.score = s.score, t.updated_at = SYS_DATETIME
WHEN NOT MATCHED THEN
INSERT (user_id, score, updated_at)
VALUES (s.user_id, s.score, SYS_DATETIME);
-- ๋ฐฉ๋ฒ 2: ON DUPLICATE KEY UPDATE ๋ฌธ
INSERT INTO user_score (user_id, score, updated_at)
VALUES (101, 95, SYS_DATETIME)
ON DUPLICATE KEY UPDATE
score = 95, updated_at = SYS_DATETIME;
```
## 7. ๊ณ์ธตํ ์ฟผ๋ฆฌ (START WITH & CONNECT BY)
```sql
-- ์กฐ์ง๋, ์นดํ
๊ณ ๋ฆฌ ํธ๋ฆฌ ๊ณ์ธต ์กฐํ (Oracle ์คํ์ผ ์๋ฒฝ ์ง์)
SELECT
LEVEL,
LPAD(' ', (LEVEL - 1) * 2) || dept_name AS dept_hierarchy,
dept_id,
parent_dept_id
FROM departments
START WITH parent_dept_id IS NULL
CONNECT BY PRIOR dept_id = parent_dept_id
ORDER SIBLINGS BY dept_id;
```
## 8. CUBRID ํนํ: ์ปฌ๋ ์
ํ์
(SET, MULTISET, SEQUENCE)
```sql
-- ๐ก ์ปฌ๋ผ ํ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ฐฐ์ด/์งํฉ ํํ๋ก ์ ์ฅ ๊ฐ๋ฅํ CUBRID ํนํ ํ์
CREATE TABLE article (
id INT PRIMARY KEY,
title VARCHAR(100),
tags SET(VARCHAR(20)) -- ์ค๋ณต์ ํ์ฉํ์ง ์๋ ํ๊ทธ ์งํฉ
);
-- ๋ฐ์ดํฐ ์ฝ์
INSERT INTO article VALUES (1, '๊ณต์ง์ฌํญ', {'๊ณต์ง', 'ํ๋
', '์๋ด'});
-- ์ปฌ๋ ์
์์ ๊ฒ์
SELECT * FROM article WHERE 'ํ๋
' IN tags;
```
## 9. CSQL ๋ํํ ํด๋ผ์ด์ธํธ ์ ์ฉํ ๋ช
๋ น์ด
```text
$ csql -u dba -p demodb # CSQL ํฐ๋ฏธ๋ ์ ์
csql> ;schema ํ
์ด๋ธ๋ช
# ํ
์ด๋ธ ์คํค๋ง ๋ฐ ์ธ๋ฑ์ค ํ์ธ
csql> ;plan simple # ๊ฐ๋จํ ์ง์ ์คํ๊ณํ ๋ณด๊ธฐ ๋ชจ๋ ์ผ๊ธฐ
csql> ;plan detail # ์์ธ ์ง์ ์คํ๊ณํ ๋ณด๊ธฐ ๋ชจ๋ ์ผ๊ธฐ
csql> ;x # ์ด์ SQL ์คํ
csql> ;q # CSQL ์ข
๋ฃ
```
## 10. CUBRID ์๋น์ค ๊ด๋ฆฌ CLI ๋ช
๋ น์ด
```bash
# 1. ํ๋ธ๋ฆฌ๋ ์ ์ฒด ๋ง์คํฐ ์๋น์ค ์์ / ์ค์ง
cubrid service start
cubrid service stop
# 2. ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ํ๋ก์ธ์ค ๊ตฌ๋ / ์ข
๋ฃ
cubrid server start demodb
cubrid server stop demodb
cubrid server status
# 3. ๋ธ๋ก์ปค(CAS) ์ํ ํ์ธ ๋ฐ ์ฌ์์
cubrid broker status
cubrid broker restart
# 4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์
์ํ
cubrid backupdb -D /data/backup demodb
```
์๊ฒฌ ๋ฐ ์ง๋ฌธ
0์์ง ๋ฑ๋ก๋ ์๊ฒฌ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋๊ธ์ ๋จ๊ฒจ๋ณด์ธ์!
๋๊ธ ์์
๋๊ธ ์ญ์