使用Yashan SQLab祝你新年快乐!

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

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

1.SQLab体验

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

SQLab

image-20241230085058693

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

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

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

image-20241230085503711

上方分别是五个按钮:运行代码、清除输入框、一键美化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

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

image-20241230090058266

当然,运行sql语句时可能出现一些问题,崖山数据库提供了错误代码,可以在错误码 | YashanDB Doc里找到问题原因和解决方法。

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

image-20241230090953404

image-20241230091218150

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

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

2.用YaSQL画新年快乐!

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

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

使用版本:YashanDB 23.2,SQLab 24.1

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

代码如下:


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

当然由于text_line实际上可能有自己的数据美化逻辑,实际上打印出来的应该是这样的:
image-20241230092101843.png

TEXT_LINE
----------------------------------------------------------------
*    *  ****  *****  *****  *    *  ****   ****   ****  ******
*    * *    * *    * *    *  *  *  *    * *    * *    * *
****** ****** *****  *****    **      *   *    *    *   *****
*    * *    * *      *        *     *     *    *  *          *
*    * *    * *      *        *    ******  ****  ****** *****

5 rows fetched.

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