PostgreSQL 中的 if 语句

David Mbochi Njonge 2022年5月14日
PostgreSQL 中的 if 语句

if 语句通过返回真或假值来评估条件。我们可以使用它来执行基于条件的查询。

本教程将教我们如何编写 if 语句查询,并了解条件语句在开发后端应用程序时如何帮助我们。

在 PostgreSQL 中使用 if 语句编写查询以执行不同的操作

  1. 使用以下命令登录 PostgreSQL 服务器。在返回的提示中输入密码并回车。

    david@david-HP-ProBook-6470b:~/Documents/work/upwork/jhinku-tutorials$ psql -U postgres
    Password for user postgres:
    
  2. 默认用户 postgres 有一个名为 postgres 的数据库,我们需要创建我们的数据库,我们将使用它来测试我们的 if 语句查询。

    postgres=#
    
  3. 使用以下命令创建一个新数据库:

    postgres=# create database if_statement_db;
    CREATE DATABASE
    
  4. 要从 postgres 数据库转移到 if_statement_db,请使用下面提供的命令并注意我们以用户 postgres 连接到新数据库。

    postgres=# \c if_statement_db;
    You are now connected to database "if_statement_db" as user "postgres".
    if_statement_db=#
    
  5. 创建一个名为 phone 的表,其中包含字段 idphone_namephone_colorphone_price。使用下面提供的数据定义查询。

    if_statement_db=# create table phone(
    if_statement_db(# id SERIAL UNIQUE NOT NULL,
    if_statement_db(# phone_name varchar(50),
    if_statement_db(# phone_type varchar(50),
    if_statement_db(# phone_price integer,
    if_statement_db(# PRIMARY KEY(id));
    CREATE TABLE
    
  6. 在电话表中插入一些记录。这些记录将帮助我们执行条件 if 语句查询。

    if_statement_db=# insert into phone(phone_name, phone_type, phone_price)
    if_statement_db-# values('Sumsung A7', 'Refurbished',600);
    INSERT 0 1
    if_statement_db=# insert into phone(phone_name, phone_type, phone_price)
    if_statement_db=# values('Motorola', 'new',800);
    INSERT 0 1
    if_statement_db=# insert into phone(phone_name, phone_type, phone_price)
    if_statement_db=# values('Iphone 10', 'new',700);
    INSERT 0 1
    
  7. 在你的机器上创建一个文件并将其命名为 data.sql 或你喜欢的任何名称。编写要针对此文件中的电话表执行的 if 语句查询。

    示例(data.sql):

    DO
    $do$
    BEGIN
    	IF EXISTS(SELECT * FROM phone) THEN
    		DELETE FROM phone;
    	ELSE
    		INSERT into phone(phone_name, phone_type, phone_price)
    		VALUES('Sumsung A7', 'Refurbished',600);
    
    		INSERT into phone(phone_name, phone_type, phone_price)
    		VALUES('Motorola', 'new',800);
    
    		INSERT into phone(phone_name, phone_type, phone_price)
    		VALUES('Iphone 10', 'new',700);
    	END IF;
    END
    $do$
    

    我们的查询将检查表中是否存在任何记录。如果存在记录,这些记录将从表中删除。

    如果表没有任何记录,则查询插入新记录。

  8. 使用以下命令执行 data.sql 文件。由于我们的表包含一些值,我们应该期望执行删除操作,因为 if 条件将评估为真。

    if_statement_db=# \i /home/david/Documents/work/upwork/jhinku-tutorials/data.sql;
    DO
    

    检索数据库中所有值的查询返回零记录。

    if_statement_db=# select * from phone;
    

    输出:

     id | phone_name | phone_type | phone_price
    ----+------------+------------+-------------
    (0 rows)
    
David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub