猿创征文 | 国产数据库之gsql详解和使用方法

1、创建数据(语句:CREATE)

  1. 创建数据库
    数据库安装完成后,默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。

    1、语法格式

    创建数据库

    CREATE DATABASE database_name;
    

    查看数据库

    使用“\l”用于查看已经存在的数据库。

    \l
    

    使用 “\c + 数据库名” 进入已存在数据库。

    \c dbname
    

    修改数据库

    ALTER DATABASE database_name RENAME TO new_name;
    

    删除数据库

    DROP DATABASE database_name;
    
  2. 创建表

    在当前数据库中创建一个新的空白表,该表由命令执行者所有。在不同的数据库中可以存放相同的表。您可以使用CREATE TABLE语句创建表。

    1、语法格式

    CREATE TABLE table_name 
        (column_name data_type [, ... ]);
    

    2、参数说明

    • table_name
      要创建的表名。

    • column_name
      新表中要创建的字段名。

    • data_type
      字段的数据类型。

    3、示例

    执行如下命令创建一个表,表名为customer_t1,表字段为c_customer_sk 、c_customer_id、c_first_name和c_last_name,每个表字段对应的数据类型为integer、char(5)、char(6)和char(8)。

    openGauss=# CREATE TABLE customer_t1
    (
     c_customer_sk             integer,
     c_customer_id             char(5),
     c_first_name              char(6),
     c_last_name               char(8),
     Amount                    integer
    );
    

    当结果显示为如下信息,则表示创建成功。

    CREATE TABLE
    

3、插入数据(语句:INSERT INTO)

在创建一个表后,表中并没有数据,使用这个表之前,需要向表中插入数据。INSERT INTO语句用于向表中插入新记录。该语句可以插入一行数据也可以同时插入多行数据。

1、语法格式

INSERT INTO table_name [ ( column_name [, ...] ) ]
    {
    
     DEFAULT VALUES
    | VALUES {
    
    ( {
    
     expression | DEFAULT } [, ...] ) }[, ...] };

2、参数说明

  • table_name
    要插入数据的目标表名。
    取值范围:已存在的表名。

  • column_name

    目标表中的字段名:

    • 字段名可以有子字段名或者数组下标修饰。
    • 没有在字段列表中出现的每个字段,将由系统默认值,或者声明时的默认值填充,若都没有则用NULL填充。例如,向一个复合类型中的某些字段插入数据的话,其他字段将是NULL。
    • 目标字段(column_name)可以按顺序排列。如果没有列出任何字段,则默认全部字段,且顺序为表声明时的顺序。
    • 如果value子句只提供了N个字段,则目标字段为前N个字段。
    • value子句提供的值在表中从左到右关联到对应列。

    取值范围:已存在的字段名。

  • expression

    赋予对应column的一个有效表达式或值:

    • 向表中字段插入单引号 “ ’ “时需要使用单引号自身进行转义。
    • 如果插入行的表达式不是正确的数据类型,系统试图进行类型转换,若转换不成功,则插入数据失败,系统返回错误信息。

3、示例

向已创建成功的表customer_t1中插入一行。

数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。

openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name,Amount) VALUES (3769, 'hello', 'Grace', 1000);
INSERT 0 1

如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。

openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace',DEFAULT,1000);
INSERT 0 1

如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');
INSERT 0 1

# 等同于

openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello');
INSERT 0 1

用户也可以对独立的字段或者整个行明确缺省值。

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);  
INSERT 0 1
openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;
INSERT 0 1

如果需要在表中插入多行,请使用以下命令。

openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name,Amount) VALUES 
(6885, 'maps', 'Joes',2200),
(4321, 'tpcds', 'Lily',3000),
(9527, 'world', 'James',5000);
INSERT 0 3

如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。

4、更新数据(语句:UPDATE)

修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。UPDATE修改满足条件的所有行中指定的字段值,WHERE子句声明条件,SET子句指定的字段会被修改,没有出现的字段则保持它们的原值。

1、语法格式

UPDATE table_name 
SET column_name = {
    
     expression | DEFAULT } 
[WHERE condition ];

2、参数说明

  • table_name

    要更新的表名,可以使用模式修饰。例如,myshcema.table。
    取值范围:已存在的表名称。

  • expression

    赋给字段的值或表达式。

  • column_name

    要修改的字段名。
    取值范围:已存在的字段名。

  • condition

    一个返回Boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。

3、示例

执行如下命令将表customer_t1中c_customer_sk为9527的地域重新定义为9876。

openGauss=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;
UPDATE 1

这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。

比如,把所有c_customer_sk的值增加100:

openGauss=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;
UPDATE 9

在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。

在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等测试,许多其他的操作符也可以使用。

用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:

openGauss=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421; 
UPDATE 1

5、删除数据(语句:DEFAULT)

DELETE语句可以从指定的表里删除满足WHERE子句的行。如果WHERE子句不存在,将删除表中所有行,结果只保留表结构。

1、语法格式

DELETE FROM table_name 
       [WHERE condition];

2、参数说明

  • table_name

    目标表的名称(可以有模式修饰)。

    取值范围:已存在的表名。

  • condition

    一个返回Boolean值的表达式,用于判断哪些行需要被删除。

3、示例

创建表customer_t1_bak,表的结构、数据与customer_t1一致。

openGauss=# CREATE TABLE customer_t1_bak AS TABLE customer_t1;
INSERT 0 9

创建的表customer_t1_bak,数据如下:

openGauss=# SELECT * FROM customer_t1_bak;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3869 | hello         | Grace        |             |   1000
          3869 | hello         | Grace        |             |   1000
          3869 |               | Grace        |             |
          3869 | hello         |              |             |
          3869 | hello         |              |             |
               |               |              |             |
          6985 | maps          | Joes         |             |   2200
          9976 | world         | James        |             |   5000
          4421 | Admin         | Local        |             |   3000
(9 rows)

执行如下语句删除customer_t1_bak中c_customer_sk等于3869的职员。

openGauss=# DELETE FROM customer_t1_bak WHERE c_customer_sk = 3869;
DELETE 5

得到的结果如下,可以看到c_customer_sk = 3869的行已经被删除。

openGauss=# SELECT * FROM customer_t1_bak;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
               |               |              |             |
          6985 | maps          | Joes         |             |   2200
          9976 | world         | James        |             |   5000
          4421 | Admin         | Local        |             |   3000
(4 rows)

不指定WHERE语句时,默认删除整张表的数据,仅保留表结构。

openGauss=# DELETE FROM customer_t1_bak;
DELETE 4

得到结果如下。

openGauss=# SELECT * FROM customer_t1_bak;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
(0 rows)

6、查询数据(语句:SELECT)

SELECT语句用于从表或视图中取出数据,结果被存储在一个结果表中,称为结果集。

SELECT语句就像叠加在数据库表上的过滤器,利用SQL关键字从数据表中过滤出用户需要的数据。

1、语法格式

SELECT 
{
    
     * | [column, ...] }
[ FROM from_item [, ...] ];

2、参数说明

  • SELECT列表

    指定查询表中列名,可以是部分列或者是全部,通配符*表示全部列。

    列名可以用下面两种形式表达:

    • 手动输入列名,多个列之间用英文逗号(,)分隔。
    • 可以是FROM子句里面计算出来的字段。
  • FROM子句

    为SELECT声明一个或者多个源表。FROM子句涉及多个元素,常见元素如下。

    • table_name

      表名或视图名,名称前可加上模式名,如:schema_name.table_name。表名为最常见的元素。

    • subquery

      FROM子句中可以出现子查询,创建一个临时表保存子查询的输出。

    • alias

      给表或复杂的表引用起一个临时的表别名,以便被其余的查询引用。

    • join_type

      有5种类型,如下:

      • CROSS JOIN :交叉连接
      • INNER JOIN:内连接
      • LEFT OUTER JOIN:左外连接
      • RIGHT OUTER JOIN:右外连接
      • FULL OUTER JOIN:全外连接

3、示例

读取表customer_t1中所有的数据。

openGauss=# SELECT * FROM customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3869 | hello         | Grace        |             |   1000
          3869 | hello         | Grace        |             |   1000
          3869 |               | Grace        |             |
          3869 | hello         |              |             |
          3869 | hello         |              |             |
               |               |              |             |
          6985 | maps          | Joes         |             |   2200
          9976 | world         | James        |             |   5000
          4421 | Admin         | Local        |             |   3000
(9 rows)

读取表customer_t1中指定字段c_customer_sk、c_customer_id。

openGauss=# SELECT c_customer_sk,c_customer_id FROM customer_t1;
c_customer_sk | c_customer_id
---------------+---------------
          3869 | hello
          3869 | hello
          3869 |
          3869 | hello
          3869 | hello
               |
          6985 | maps
          9976 | world
          4421 | Admin
(9 rows)

7、查询对象

gsql工具提供了若干高级特性,便于用户使用。常见用法如下:

查看命令帮助信息

\h [NAME]

例如,查询ABORT的所有语法。

openGauss=# \h ABORT
Command:     ABORT
Description: abort the current transaction
Syntax:
ABORT [ WORK | TRANSACTION ] ;

切换数据库

\c dbname

例如,将postgres数据库切换为数据库dp_tpcc。

openGauss=# \c db_tpcc
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db_tpcc" as user "omm".
db_tpcc=# 

查询所有数据库

\l

示例如下:

openGauss=# \l
                          List of databases
   Name    | Owner | Encoding  | Collate | Ctype | Access privileges
-----------+-------+-----------+---------+-------+-------------------
 mydb      | omm   | GBK       | C       | C     |
 postgres  | omm   | SQL_ASCII | C       | C     |
 template0 | omm   | SQL_ASCII | C       | C     | =c/omm           +
           |       |           |         |       | omm=CTc/omm
 template1 | omm   | SQL_ASCII | C       | C     | =c/omm           +
           |       |           |         |       | omm=CTc/omm
(4 rows)

查询当前数据库中的所有表

\dt

示例如下。

openGauss=# \dt
                              List of relations
 Schema |      Name       | Type  | Owner |             Storage
--------+-----------------+-------+-------+----------------------------------
 public | customer_t1     | table | omm   | {
    
    orientation=row,compression=no}
 public | customer_t1_bak | table | omm   | {
    
    orientation=row,compression=no}
(2 rows)

查看表结构

\d tablename

例如,查看表customer_t1的表结构。

openGauss=# \d customer_t1
        Table "public.customer_t1"
    Column     |     Type     | Modifiers
---------------+--------------+-----------
 c_customer_sk | integer      |
 c_customer_id | character(5) |
 c_first_name  | character(6) |
 c_last_name   | character(8) |
 amount        | integer      |

猜你喜欢

转载自blog.csdn.net/flq18210105507/article/details/127227694