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

GaussDB 实操——SQL 语法进阶

环境准备

  • 创建数据库 advanced_prac。说明:若实际使用中使用同一个实例,建议数据库名额外加上个
    人姓名简写,便于区分,例如 advanced_prac_nwh。

gaussdb0036.png

gaussdb0037.png

gaussdb0038.png

一般常用函数

  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str): 将字符串 str 中前后包含的 remstr 部分删除。
SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
TRIM(TRAILING ‘xyz’ FROM ‘barxxyz’)
1 barx

gaussdb0039.png

  • LTRIM(str)/RTRIM(str): 删除字符串 str 开头的空格/删除字符串 str 结尾的空格。
SELECT LTRIM(' barbar');
LTRIM(’ barbar’)
1 barbar

gaussdb0040.png

  • RPAD(str,len,padstr): 在字符串 str 右侧用 padstr 填充,使其长度为 len。若字符串 str 长度超过 len,则将其截断。
SELECT RPAD('hi',15,'GaussDB');
RPAD(‘hi’, 15, ‘GaussDB’)
1 hiGaussDBGaussD

gaussdb0041.png

SELECT RPAD('GaussDB',5,'?');
RPAD(‘GaussDB’, 5, ‘?’)
1 Gauss

gaussdb0042.png

正则表达式操作符和函数

  • expr REGEXP pat, expr RLIKE pat: 若 expr 处表达式与正则表达式匹配,则返回 1,否则返回 0。
SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
‘a’ REGEXP ‘A’ ‘a’ REGEXP BINARY 'A"
1 1 0
  • REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]]): 返回与正则表达式模式匹配的子字符串的起始索引。
SELECT REGEXP_INSTR('dog cat dog', 'dog', 2);
REGEXP_INSTR(‘dog cat dog’, ‘dog’, 2)
1 9

gaussdb0043.png

SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');
REGEXP_INSTR(‘aa aaa aaaa’, ‘a{4}’)
1 8

gaussdb0044.png

  • REGEXP_LIKE(expr, pat[, match_type]): 用于模式匹配。比较给定的字符串,如果字符串
    相同则返回 1,否则返回 0。
SELECT REGEXP_LIKE('Michael!', '.*');
REGEXP_LIKE(‘Michael!’, ‘.*’)
1 1

gaussdb0045.png

SELECT REGEXP_LIKE('abc', 'ABC', 'c');
REGEXP_LIKE(‘abc’, ‘ABC’, ‘c’)
1 0

gaussdb0046.png

  • REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]]): 通过匹配字符来替换给定的字符串。
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);
REGEXP_REPLACE(‘abc def ghi’, ‘[a-z]+’, ‘X’, 1, 3)
1 abc def X

gaussdb0047.png

  • REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]]): 从给定的字符串中返回子字符串。
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3);
REGEXP_SUBSTR(‘abc def ghi’, ‘[a-z]+’, 1, 3)
1 ghi

控制流函数

CASE

  • CASE 语句是实现选择结构程序设计的一种语句。
  • 创建表(以表 bonuses_depa1 和 new_bonuses_depa1 为例)
CREATE TABLE bonuses_depa1 ( staff_id INT NOT NULL, staff_name CHAR(50), job VARCHAR(30), bonus NUMERIC ); CREATE TABLE new_bonuses_depa1 ( staff_id INT NOT NULL, staff_name CHAR(50), job VARCHAR(30), bonus NUMERIC );

gaussdb0048.png

  • 注意事项:
    • 表名必须指定,并且表名不能和用户下的其他表重名。
    • 列名必须指定,同时指定列的数据类型、是否可以为 NULL、size 等条件。
    • 如果表名重复,修改表名或者删除重名的表。
  • 向表 bonuses_depa1、new_bonuses_depa1 插入数据。
INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(23,'wangxia','developer',5000); INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(24,'limingying','tester',7000); INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(25,'liulili','quality control', 8000); INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(29,'liuxue','tester',8000); INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(21,'caoming','document developer',11000); INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(23,'wangxia','developer', 7000); INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(27,'wangxuefen','document developer',7000); INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(28,'denghui','quality control',8000); INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(25,'liulili','quality control',10000); INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(21,'caoming','document developer',12000);

gaussdb0049.png

  • 注意事项:
    • 本步骤中的 insert 语句是值插入,即构造一行记录并插入到表中。
    • INSERT 语句所指定的字段名必须是表中已存在的字段名。
    • 如果 INSERT 语句所指定的字段名包含表中的所有字段,则可能省略字段名。
  • 查询表 bonuses_depa1 中的数据。
SELECT * FROM bonuses_depa1;
staff_id staff_name job bonus
1 23 wangxia developer 5000
2 24 limingying tester 7000
3 25 liulili quality control 8000
4 29 liuxue tester 8000
5 21 caoming document developer 11000

gaussdb0050.png

  • 查询表 new_bonuses_depa1 中的数据。
SELECT * FROM new_bonuses_depa1;
staff_id staff_name job bonus
1 23 wangxia developer 7000
2 27 wangxuefen document developer 7000
3 28 denghui quality control 8000
4 25 liulili quality control 10000
5 21 caoming document developer 12000

gaussdb0051.png

  • 比较两表 new_bonuses_depa1 和 bonuses_depa1 的津贴数据,对比员工津贴变化情况。
SELECT bd.STAFF_NAME, CASE WHEN nbd.BONUS > bd.BONUS THEN 'increased' WHEN nbd.BONUS = bd.BONUS THEN 'equal' ELSE 'decreased' END AS DIFF FROM new_bonuses_depa1 nbd, bonuses_depa1 bd WHERE nbd.STAFF_ID = bd.STAFF_ID;

||STAFF_NAME|DIFF|
|1|wangxia|increased|
|2|liulili|increased|
|3|caoming|increased|

gaussdb0052.png

  • 删除表。
DROP TABLE bonuses_depa1; DROP TABLE new_bonuses_depa1;

gaussdb0053.png

IFNULL

  • 本步骤主要实现:返回员工编号和工资列表,工资如果为 NULL 则替换为“unknown”。
  • 删除同名表 staffs_tab。
DROP TABLE IF EXISTS staffs_tab;

gaussdb0054.png

  • 创建表 staffs_tab。
CREATE TABLE staffs_tab ( staff_ID NUMERIC(6) not null, NAME VARCHAR(20), EMAIL VARCHAR(25), PHONE_NUMBER VARCHAR(20), HIRE_DATE DATE, employment_ID VARCHAR(10), SALARY NUMERIC(8,2), MANAGER_ID NUMERIC(6), section_ID NUMERIC(4) );

gaussdb0055.png

  • 向表 staffs_tab 中插入记录 1。
INSERT INTO staffs_tab (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY,MANAGER_ID, section_ID) values (198, '王莹', 'wangying@126.com', '18095605632', date_format('19990621', '%Y%m%d'), 'SH_CLERK',NULL, 124, 50);

gaussdb0056.png

  • 向表 staffs_tab 中插入记录 2。
INSERT INTO staffs_tab (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY,MANAGER_ID, section_ID) values (199, '何开平', 'hekaipng02@126.com', '18095605532', date_format('20000113', '%Y%m%d'),'SH_CLERK', 2600.00, 124, 50);

gaussdb0057.png

  • 向表 staffs_tab 中插入记录 3。
INSERT INTO staffs_tab (staff_ID, NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, employment_ID, SALARY,MANAGER_ID, section_ID) values (200, '李瑞', 'lirui03@126.com', '18095565632', date_format('19870917', '%Y%m%d'), 'AD_ASST',4400.00, 101, 10);

gaussdb0058.png

  • 返回员工编号和工资列表,工资如果为 NULL 则替换为“unknown”。
SELECT staff_ID, IFNULL(SALARY, 'unknown') SALARY FROM staffs_tab WHERE staff_ID IS NOT NULL ORDER BY staff_ID;
staff_ID SALARY
1 198 unknown
2 199 2600.00
3 200 4400.00

gaussdb0059.png

  • 删除表。
DROP TABLE staffs_tab;

gaussdb0060.png

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

文章被以下合辑收录

评论