暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用YashanDB SQLab祝你新年快乐

原创 渊. 2024-12-31
245

# 使用Yashan SQLab祝你新年快乐!

崖山数据库(YashanDB)是深圳计算科学研究院研发的一款国产数据库平台,自己原创了一些如有界计算、近似计算、并行可扩展和跨模融合计算理论,宣称100%平替Oracle数据库。而SQLab是官方的一个在线体验崖山数据库的网站,登陆后可以免安装进行增删改查体验,可以对崖山数据库进行初步的了解。

SQL语言是一种图灵完备语言,这意味着它不仅可以进行数据查询操作,还能用来写一些简单逻辑的程序。 正好马上要到2025年了,使用SQL打印出一个`HAPPY 2025`在这里祝大家新年快乐!

## 1.SQLab体验

进入SQLab网站,使用手机号登录即可进入控制台。

[SQLab](https://sqlab.yashandb.com/)

![image-20241230085058693](https://img.foxhank.top/file/1735519893542_202412300851234.png)

主页有崖山实验室(体验数据库的)和笔记广场。里面有很多大佬写的不同情形的解决方案。

下面还有一个智能问答的按钮,是一个AI助手,sql运行出现错误的时候可以试着问一下它,效果很棒。

点击“崖山实验室”即可进入SQL环境,会分配一个`YashanDB 23.2`的环境供执行命令。

![image-20241230085503711](https://img.foxhank.top/file/1735520107613_202412300855890.png)

上方分别是五个按钮:运行代码、清除输入框、一键美化sql命令(把一大团代码按照逻辑变成一行一行的)、切换用户(自定义登录用户)和重置环境(一键初始化!)

在输入框内输入sql代码后,点击运行,即可在页面下方显示结果。

写个简单的sql测试下吧:

```sql

CREATE TABLE test (
id NUMBER PRIMARY KEY,
username VARCHAR2(50) NOT NULL,
password VARCHAR2(50) NOT NULL,
nickname VARCHAR2(50)
);

INSERT INTO test (id, username, password, nickname)
VALUES (1, 'LiTianSuo', '114514', 'TianSuoHaoer');

COMMIT;

SELECT * FROM test;

DROP TABLE test CASCADE CONSTRAINTS;
```

这段代码实现了增删查:创建一个表test,插入一个数据,查询,随后删除数据。

运行后即可在`result`页签内看到数据表。

![image-20241230090037142](https://img.foxhank.top/file/1735520460492_202412300900185.png)

当然想看执行结果只要切换到Console页签内即可:

![image-20241230090058266](https://img.foxhank.top/file/1735520501737_202412300900304.png)

当然,运行sql语句时可能出现一些问题,崖山数据库提供了错误代码,可以在[错误码 | YashanDB Doc](https://doc.yashandb.com/yashandb/22.2/zh/参考手册/错误码.html)里找到问题原因和解决方法。

在左侧导航栏中有`我的对象`一项,可以查看SQLAB下创建的所有对象。在工作台中执行SQL创建的对象会出现在这里,点开即可看到对应的逻辑信息。如表名,状态,列信息,表上的索引,触发器,约束等内容,可以可视化地了解到表的详细信息。

![image-20241230090953404](https://img.foxhank.top/file/1735521015945_202412300909452.png)

![image-20241230091218150](https://img.foxhank.top/file/1735521159161_202412300912214.png)

表信息一目了然,非常滴好用

下方还有`我的笔记`、`笔记广场`等项,可以看到大佬们的sql笔记,可能会有帮助。

## 2.用YaSQL画新年快乐!

SQL语言是一种图灵完备语言,可以用来写一些简单逻辑的程序。 再加上崖山数据库提供的SQLab,可以在网页上运行SQL脚本,不需要非在本地部署一个数据库。

首先我们需要定义两个CTE(公用表表达式): letter_parts 和 happy_2025。letter_parts用来生成行数标识符,而happy_2025包含使用`*`构成每个字母和数字的逻辑。最后使用SELECT语句负责将所有部分组装成最终的图案,并按行输出。

使用版本:YashanDB 23.2,SQLab 24.1

ps:我的笔记发布在了笔记广场,欢迎参观(>_<)

代码如下:

```sql

WITH
letter_parts AS (
SELECT level AS row_num
FROM dual
CONNECT BY level <= 5
),
happy_2025 AS (
-- Letter H
SELECT row_num, 1 as position,
CASE row_num
WHEN 1 THEN '*' || RPAD(' ', 4) || '*'
WHEN 2 THEN '*' || RPAD(' ', 4) || '*'
WHEN 3 THEN RPAD('*', 6, '*')
WHEN 4 THEN '*' || RPAD(' ', 4) || '*'
WHEN 5 THEN '*' || RPAD(' ', 4) || '*'
END AS letter
FROM letter_parts
UNION ALL
-- Letter A
SELECT row_num, 2,
CASE row_num
WHEN 1 THEN ' ' || RPAD('*', 4, '*') || ' '
WHEN 2 THEN '*' || RPAD(' ', 4) || '*'
WHEN 3 THEN RPAD('*', 6, '*')
WHEN 4 THEN '*' || RPAD(' ', 4) || '*'
WHEN 5 THEN '*' || RPAD(' ', 4) || '*'
END
FROM letter_parts
UNION ALL
-- Letter P
SELECT row_num, 3,
CASE row_num
WHEN 1 THEN RPAD('*', 5, '*') || ' '
WHEN 2 THEN '*' || RPAD(' ', 4) || '*'
WHEN 3 THEN RPAD('*', 5, '*') || ' '
WHEN 4 THEN '*' || RPAD(' ', 5)
WHEN 5 THEN '*' || RPAD(' ', 5)
END
FROM letter_parts
UNION ALL
-- Letter P
SELECT row_num, 4,
CASE row_num
WHEN 1 THEN RPAD('*', 5, '*') || ' '
WHEN 2 THEN '*' || RPAD(' ', 4) || '*'
WHEN 3 THEN RPAD('*', 5, '*') || ' '
WHEN 4 THEN '*' || RPAD(' ', 5)
WHEN 5 THEN '*' || RPAD(' ', 5)
END
FROM letter_parts
UNION ALL
-- Letter Y
SELECT row_num, 5,
CASE row_num
WHEN 1 THEN '*' || RPAD(' ', 4) || '*'
WHEN 2 THEN ' ' || '*' || RPAD(' ', 2) || '*' || ' '
WHEN 3 THEN RPAD(' ', 2) || RPAD('*', 2, '*') || RPAD(' ', 2)
WHEN 4 THEN RPAD(' ', 2) || '*' || RPAD(' ', 3)
WHEN 5 THEN RPAD(' ', 2) || '*' || RPAD(' ', 3)
END
FROM letter_parts
UNION ALL
-- Number 2
SELECT row_num, 6,
CASE row_num
WHEN 1 THEN ' ' || RPAD('*', 4, '*') || ' '
WHEN 2 THEN '*' || RPAD(' ', 4) || '*'
WHEN 3 THEN RPAD(' ', 3) || '*' || RPAD(' ', 2)
WHEN 4 THEN ' ' || '*' || RPAD(' ', 4)
WHEN 5 THEN RPAD('*', 6, '*')
END
FROM letter_parts
UNION ALL
-- Number 0
SELECT row_num, 7,
CASE row_num
WHEN 1 THEN ' ' || RPAD('*', 4, '*') || ' '
WHEN 2 THEN '*' || RPAD(' ', 4) || '*'
WHEN 3 THEN '*' || RPAD(' ', 4) || '*'
WHEN 4 THEN '*' || RPAD(' ', 4) || '*'
WHEN 5 THEN ' ' || RPAD('*', 4, '*') || ' '
END
FROM letter_parts
UNION ALL
-- Number 2
SELECT row_num, 8,
CASE row_num
WHEN 1 THEN ' ' || RPAD('*', 4, '*') || ' '
WHEN 2 THEN '*' || RPAD(' ', 4) || '*'
WHEN 3 THEN RPAD(' ', 3) || '*' || RPAD(' ', 2)
WHEN 4 THEN ' ' || '*' || RPAD(' ', 4)
WHEN 5 THEN RPAD('*', 6, '*')
END
FROM letter_parts
UNION ALL
-- Number 5
SELECT row_num, 9,
CASE row_num
WHEN 1 THEN RPAD('*', 6, '*')
WHEN 2 THEN '*' || RPAD(' ', 5)
WHEN 3 THEN RPAD('*', 5, '*') || ' '
WHEN 4 THEN RPAD(' ', 5) || '*'
WHEN 5 THEN RPAD('*', 5, '*') || ' '
END
FROM letter_parts
)
SELECT
LISTAGG(letter || ' ') WITHIN GROUP (ORDER BY position) AS text_line
FROM
happy_2025
GROUP BY
row_num
ORDER BY
row_num;
```

复制进命令行,点击`运行`,即可在result里看到输出。



![image-20241230091945554](https://img.foxhank.top/file/1735521618490_202412300919767.png)

当然由于text_line实际上可能有自己的数据美化逻辑,实际上打印出来的应该是这样的:
![image-20241230092101843.png](https://img.foxhank.top/file/1735521991770_image-20241230092101843.png)

```
TEXT_LINE
----------------------------------------------------------------
* * **** ***** ***** * * **** **** **** ******
* * * * * * * * * * * * * * * * *
****** ****** ***** ***** ** * * * * *****
* * * * * * * * * * * *
* * * * * * * ****** **** ****** *****

5 rows fetched.
```

最后祝大家新年快乐啦,2025一切顺心,万事如意!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。


----------

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论