环境准备
- 创建数据库 advanced_prac。说明:若实际使用中使用同一个实例,建议数据库名额外加上个
人姓名简写,便于区分,例如 advanced_prac_nwh。
![gaussdb0036.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-3475a978-0ad1-42ae-81d7-fdbe3411845b.png)
![gaussdb0037.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-641143cf-632d-4289-8bd8-f8b29e919a9a.png)
![gaussdb0038.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-e7a5b66c-c9d3-4678-a13e-4ec7ed9e588c.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-1e0a5acd-4e96-4376-85e3-b0f163b01968.png)
- LTRIM(str)/RTRIM(str): 删除字符串 str 开头的空格/删除字符串 str 结尾的空格。
SELECT LTRIM(' barbar');
|
LTRIM(’ barbar’) |
1 |
barbar |
![gaussdb0040.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-5ebe7ac2-1ba7-4040-8670-5c647ac0812d.png)
- RPAD(str,len,padstr): 在字符串 str 右侧用 padstr 填充,使其长度为 len。若字符串 str 长度超过 len,则将其截断。
SELECT RPAD('hi',15,'GaussDB');
|
RPAD(‘hi’, 15, ‘GaussDB’) |
1 |
hiGaussDBGaussD |
![gaussdb0041.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-bf661220-0866-406f-ad3d-3e20c4f1e70a.png)
SELECT RPAD('GaussDB',5,'?');
|
RPAD(‘GaussDB’, 5, ‘?’) |
1 |
Gauss |
![gaussdb0042.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-c1df8795-ab80-4558-a068-e7ebd78896b5.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-66ab7944-77f0-4201-ae6b-8ba068db4c2a.png)
SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');
|
REGEXP_INSTR(‘aa aaa aaaa’, ‘a{4}’) |
1 |
8 |
![gaussdb0044.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-cca49d9b-5651-4abc-86c6-b5bad25fb1cf.png)
- REGEXP_LIKE(expr, pat[, match_type]): 用于模式匹配。比较给定的字符串,如果字符串
相同则返回 1,否则返回 0。
SELECT REGEXP_LIKE('Michael!', '.*');
|
REGEXP_LIKE(‘Michael!’, ‘.*’) |
1 |
1 |
![gaussdb0045.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-e7ccca87-8d44-4d63-a0fe-48264fc28385.png)
SELECT REGEXP_LIKE('abc', 'ABC', 'c');
|
REGEXP_LIKE(‘abc’, ‘ABC’, ‘c’) |
1 |
0 |
![gaussdb0046.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-4eb412bf-8a6c-4159-b517-8c8c057e4f4f.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-2b6d312d-b42a-4c0c-a5dd-89a24860153d.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-04d33d26-10cf-4879-aec2-2b9d52273db5.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-cd8001e7-57d5-4c75-ad43-c72b986a72e0.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-ab372fd2-9f87-453a-a6fd-2879149ab53b.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-a1c00b78-811c-4070-85e9-6b430c99c241.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-f7d40bd3-663e-4c8b-9c37-9f3330000e7e.png)
DROP TABLE bonuses_depa1;
DROP TABLE new_bonuses_depa1;
![gaussdb0053.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-63034510-d368-4984-9c99-1e457e83796f.png)
IFNULL
- 本步骤主要实现:返回员工编号和工资列表,工资如果为 NULL 则替换为“unknown”。
- 删除同名表 staffs_tab。
DROP TABLE IF EXISTS staffs_tab;
![gaussdb0054.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-603ab10f-3fa8-492c-aac3-2616015e0225.png)
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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-7eb43ee0-c337-4ebc-9607-0193dbde7105.png)
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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-c3ba1b13-6036-4b23-a3ca-6c9520436a66.png)
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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-62de21b6-3cc4-4e6e-969a-10e1a7471284.png)
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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-effb4142-688c-43bf-a2dc-68bf38bad500.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](https://oss-emcsprod-public.modb.pro/image/editor/20230813-3a75dbb3-114e-4e9d-b36c-59ab80b64cef.png)
DROP TABLE staffs_tab;
![gaussdb0060.png](https://oss-emcsprod-public.modb.pro/image/editor/20230813-33286958-f918-4f0e-a494-8958655938ae.png)