SQL语法基础 #

一、SQL概述 #

1.1 OrientDB SQL特点 #

OrientDB使用扩展SQL作为查询语言,具有以下特点:

text
OrientDB SQL特点:
├── 兼容标准SQL语法
├── 扩展图查询功能
├── 支持JSON格式
├── 支持嵌套查询
├── 支持模式匹配
└── 支持遍历操作

1.2 SQL语句分类 #

类别 语句 说明
DDL CREATE, ALTER, DROP, TRUNCATE 数据定义
DML INSERT, UPDATE, DELETE 数据操作
DQL SELECT, TRAVERSE 数据查询
DCL GRANT, REVOKE 权限控制

二、命名规范 #

2.1 标识符规则 #

text
命名规则:
├── 以字母或下划线开头
├── 可包含字母、数字、下划线
├── 区分大小写
├── 不能使用保留字
└── 建议使用有意义的名称

2.2 命名约定 #

类型 命名约定 示例
Class PascalCase Person, OrderItem
Property camelCase firstName, orderDate
Index idx_ClassName_Property idx_Person_email
Edge VERB_NOUN WORKS_AT, KNOWS

2.3 保留字 #

text
OrientDB保留字(部分):
├── SELECT, FROM, WHERE, INSERT
├── UPDATE, DELETE, CREATE, DROP
├── AND, OR, NOT, NULL, TRUE, FALSE
├── ORDER, BY, GROUP, HAVING, LIMIT
├── INDEX, CLASS, CLUSTER, DATABASE
└── VERTEX, EDGE, GRAPH, TRAVERSE

2.4 转义标识符 #

使用反引号转义:

sql
SELECT `from`, `to` FROM `Order`
CREATE CLASS `User-Profile`

三、数据类型 #

3.1 基本类型 #

类型 说明 示例
STRING 字符串 ‘Hello’, “World”
INTEGER 整数 42, -100
LONG 长整数 9223372036854775807L
FLOAT 单精度浮点 3.14F
DOUBLE 双精度浮点 3.14159265359
BOOLEAN 布尔值 true, false
DATETIME 日期时间 ‘2024-01-15 10:30:00’
DATE 日期 ‘2024-01-15’
BINARY 二进制数据 base64编码

3.2 集合类型 #

类型 说明 示例
LIST 列表 [1, 2, 3]
SET 集合(唯一)
MAP 键值对
EMBEDDED 嵌入文档
LINK 链接(引用) #12:0
LINKLIST 链接列表 [#12:0, #12:1]
LINKSET 链接集合
LINKMAP 链接映射

3.3 特殊类型 #

类型 说明 示例
RID Record ID #12:0
NULL 空值 NULL
DECIMAL 高精度小数 12345.6789

四、字面量 #

4.1 字符串字面量 #

sql
SELECT 'Hello World' AS message
SELECT "Double quotes" AS text
SELECT 'It''s a test' AS escaped

4.2 数字字面量 #

sql
SELECT 42 AS integer_value
SELECT 3.14 AS float_value
SELECT 100L AS long_value
SELECT 2.5F AS float_explicit

4.3 布尔字面量 #

sql
SELECT true AS is_active
SELECT false AS is_deleted

4.4 日期时间字面量 #

sql
SELECT DATE('2024-01-15') AS date_value
SELECT DATETIME('2024-01-15 10:30:00') AS datetime_value

4.5 NULL值 #

sql
SELECT NULL AS empty_value
SELECT name FROM Person WHERE email IS NULL

五、注释 #

5.1 单行注释 #

sql
SELECT * FROM Person
WHERE age > 18

5.2 多行注释 #

sql
SELECT * FROM Person
WHERE age > 18
AND status = 'active'

六、SELECT语句 #

6.1 基本语法 #

sql
SELECT [FROM] <target>
[WHERE <condition>]
[GROUP BY <field>]
[ORDER BY <field> [ASC|DESC]]
[LIMIT <maxRecords>]
[SKIP <skipRecords>]

6.2 选择所有字段 #

sql
SELECT * FROM Person

6.3 选择指定字段 #

sql
SELECT name, age FROM Person

6.4 使用别名 #

sql
SELECT name AS fullName, age AS userAge FROM Person

6.5 使用表达式 #

sql
SELECT name, age * 2 AS doubleAge FROM Person
SELECT name, UPPER(name) AS upperName FROM Person

6.6 DISTINCT去重 #

sql
SELECT DISTINCT city FROM Person

七、WHERE条件 #

7.1 比较运算符 #

运算符 说明 示例
= 等于 age = 30
!=, <> 不等于 age != 30
> 大于 age > 18
< 小于 age < 60
>= 大于等于 age >= 18
<= 小于等于 age <= 60

7.2 逻辑运算符 #

sql
SELECT * FROM Person WHERE age > 18 AND status = 'active'
SELECT * FROM Person WHERE age < 18 OR age > 60
SELECT * FROM Person WHERE NOT status = 'deleted'

7.3 范围查询 #

sql
SELECT * FROM Person WHERE age BETWEEN 18 AND 60
SELECT * FROM Person WHERE age IN (20, 30, 40)
SELECT * FROM Person WHERE name IN ['Tom', 'Jerry']

7.4 模糊匹配 #

sql
SELECT * FROM Person WHERE name LIKE 'T%'
SELECT * FROM Person WHERE name LIKE '%om%'
SELECT * FROM Person WHERE name LIKE '_om'

7.5 NULL判断 #

sql
SELECT * FROM Person WHERE email IS NULL
SELECT * FROM Person WHERE email IS NOT NULL

7.6 正则表达式 #

sql
SELECT * FROM Person WHERE name MATCHES '^[A-Z][a-z]+$'

八、ORDER BY排序 #

8.1 升序排序 #

sql
SELECT * FROM Person ORDER BY name ASC
SELECT * FROM Person ORDER BY name

8.2 降序排序 #

sql
SELECT * FROM Person ORDER BY age DESC

8.3 多字段排序 #

sql
SELECT * FROM Person ORDER BY city ASC, age DESC

九、LIMIT和SKIP #

9.1 LIMIT限制结果 #

sql
SELECT * FROM Person LIMIT 10

9.2 SKIP跳过记录 #

sql
SELECT * FROM Person SKIP 10 LIMIT 10

9.3 分页查询 #

sql
SELECT * FROM Person SKIP 0 LIMIT 10
SELECT * FROM Person SKIP 10 LIMIT 10
SELECT * FROM Person SKIP 20 LIMIT 10

十、运算符 #

10.1 算术运算符 #

运算符 说明 示例
+ 加法 age + 1
- 减法 age - 1
* 乘法 price * quantity
/ 除法 total / count
% 取模 id % 10

10.2 字符串运算符 #

sql
SELECT firstName + ' ' + lastName AS fullName FROM Person
SELECT CONCAT(firstName, ' ', lastName) AS fullName FROM Person

10.3 集合运算符 #

sql
SELECT * FROM Person WHERE 'reading' IN hobbies
SELECT * FROM Person WHERE hobbies CONTAINS 'reading'
SELECT * FROM Person WHERE hobbies CONTAINSALL ['reading', 'coding']
SELECT * FROM Person WHERE hobbies CONTAINSANY ['reading', 'coding']

10.4 链接运算符 #

sql
SELECT * FROM Person WHERE @rid = #12:0
SELECT * FROM Person WHERE out('KNOWS') CONTAINS #13:0

十一、内置函数 #

11.1 字符串函数 #

函数 说明 示例
UPPER() 转大写 UPPER(name)
LOWER() 转小写 LOWER(name)
LENGTH() 字符串长度 LENGTH(name)
TRIM() 去除空格 TRIM(name)
SUBSTRING() 子字符串 SUBSTRING(name, 0, 3)
REPLACE() 替换 REPLACE(name, ‘a’, ‘b’)
CONCAT() 连接字符串 CONCAT(a, b, c)

11.2 数学函数 #

函数 说明 示例
ABS() 绝对值 ABS(-5)
CEIL() 向上取整 CEIL(3.2)
FLOOR() 向下取整 FLOOR(3.8)
ROUND() 四舍五入 ROUND(3.5)
SQRT() 平方根 SQRT(16)
POW() 幂运算 POW(2, 3)
RANDOM() 随机数 RANDOM()

11.3 日期函数 #

函数 说明 示例
DATE() 创建日期 DATE(‘2024-01-15’)
DATETIME() 创建日期时间 DATETIME(‘2024-01-15 10:30:00’)
YEAR() 提取年份 YEAR(date)
MONTH() 提取月份 MONTH(date)
DAY() 提取日 DAY(date)
HOUR() 提取小时 HOUR(datetime)
MINUTE() 提取分钟 MINUTE(datetime)
SYSDATE() 当前日期时间 SYSDATE()

11.4 聚合函数 #

函数 说明 示例
COUNT() 计数 COUNT(*)
SUM() 求和 SUM(amount)
AVG() 平均值 AVG(age)
MIN() 最小值 MIN(age)
MAX() 最大值 MAX(age)
FIRST() 第一个值 FIRST(name)
LAST() 最后一个值 LAST(name)

11.5 集合函数 #

函数 说明 示例
SIZE() 集合大小 SIZE(hobbies)
ASSET() 转集合 ASSET(list)
ASLIST() 转列表 ASLIST(set)
ASMAP() 转映射 ASMAP(list)
UNIONALL() 并集 UNIONALL(a, b)
INTERSECT() 交集 INTERSECT(a, b)
DIFFERENCE() 差集 DIFFERENCE(a, b)

十二、表达式 #

12.1 条件表达式 #

sql
SELECT name, 
    CASE 
        WHEN age < 18 THEN 'Minor'
        WHEN age < 60 THEN 'Adult'
        ELSE 'Senior'
    END AS ageGroup
FROM Person

12.2 IF表达式 #

sql
SELECT name, IF(age >= 18, 'Adult', 'Minor') AS status FROM Person

12.3 COALESCE表达式 #

sql
SELECT COALESCE(nickname, name, 'Unknown') AS displayName FROM Person

12.4 NULLIF表达式 #

sql
SELECT NULLIF(score, 0) AS normalizedScore FROM Exam

十三、JSON支持 #

13.1 JSON字面量 #

sql
SELECT {'name': 'Tom', 'age': 30} AS person

13.2 访问JSON属性 #

sql
SELECT address.city FROM Person
SELECT address['city'] FROM Person

13.3 JSON函数 #

sql
SELECT JSON_FROM_RECORD(@this) FROM Person
SELECT JSON_FROM_SET(hobbies) FROM Person

十四、元数据查询 #

14.1 查询类信息 #

sql
SELECT FROM metadata:schema
SELECT FROM (SELECT classes FROM metadata:schema) WHERE name = 'Person'

14.2 查询索引信息 #

sql
SELECT FROM metadata:indexes
SELECT FROM metadata:indexManager

14.3 查询数据库信息 #

sql
SELECT FROM metadata:database
SELECT properties FROM metadata:database

14.4 特殊字段 #

字段 说明
@rid Record ID
@class 类名
@type 记录类型
@version 版本号
@size 记录大小
@this 当前记录

十五、语句执行 #

15.1 批量执行 #

sql
BEGIN;
INSERT INTO Person SET name = 'Tom', age = 30;
INSERT INTO Person SET name = 'Jerry', age = 25;
COMMIT;

15.2 条件执行 #

sql
IF (SELECT COUNT(*) FROM Person WHERE name = 'Tom' = 0) {
    INSERT INTO Person SET name = 'Tom', age = 30;
}

15.3 循环执行 #

sql
LET persons = SELECT FROM Person WHERE status = 'active';
FOREACH ($person IN $persons) {
    UPDATE $person SET lastActive = sysdate();
}

十六、总结 #

SQL语法要点:

类别 要点
命名 遵循规范,使用有意义的名称
数据类型 了解基本类型和集合类型
查询 掌握SELECT、WHERE、ORDER BY
函数 熟悉常用内置函数
表达式 灵活使用条件表达式

下一步,让我们学习数据类型详解!

最后更新:2026-03-27