PostgreSQL Where 子句

译者:anxin
日期:2017-10-16

PostgreSQL中使用SELECT SQL语句查询数据库数据时,可以条件性的查询表记录;要条件性的查询表记录需要使用WHERE关键词。

SQL语法

PostgreSQL中SQL语句中使用WHERE关键词条件性的查询表数据的语法如下:

SELECT column1, ... columnN
FROM table_name1, ... table_nameN
[WHERE condition1 [AND | OR conditionN ]]
  • WHERE 子句可以使用在SELECT,DELETE 或者 UPDATE 中。
  • 可以使用 AND 或者 OR 指定多个条件。

SQL创建表实例

SELECT name FROM author WHERE name='与知';

WHERE关键词中可用的运算符

逻辑运算符

运算符 描述
AND 当两个条件都为真时,为真;否则为假
OR 当两个条件都为假时,为假;否则为真
NOT 当条件为假时,为真;当条件为真时,为假

比较运算符

假设两个条件a=1,b=2

运算符 描述 实例
< 判断运算符左侧是否小于右侧,如果小于,则为真,否则为假 a<b    真
> 判断运算符左侧是否大于右侧,如果大于,则为真,否则为假 a>b    假
<= 判断运算符左侧是否小于等于右侧,如果小于等于,则为真,否则为假 a<=b  真
>= 判断运算符左侧是否大于等于右侧,如果大于等于,则为真,否则为假 a>=b  假
= 判断运算符左侧是否等于右侧,如果等于,则为真,否则为假 a=b    假
<> 或 != 判断运算符左侧是否等于右侧,如果不等于,则为真,否则为假 a!=b   真

比较谓词

谓词 描述
a BETWEEN x AND y a的值在x与y之间
a NOT BETWEEN x AND y a的值不在x与y之间
a IS DISTINCT FROM b a不等于b,把null当一个普通值对待
a IS NOT DISTINCT FROM b a等于b,把null当一个普通值对待
expression IS NULL 为空
expression IS NOT NULL 不为空
boolean_expression IS TRUE 为真
boolean_expression IS NOT TRUE 为假或者未知
boolean_expression IS FALSE 为假
boolean_expression IS NOT FALSE 为真或者未知
boolean_expression IS UNKNOWN 为未知
boolean_expression IS NOT UNKNOWN 为真或者为假

psql使用where查询PostgreSQL表数据

1)首先以Linux系统用户postgres用户登陆Shell

su - postgres

2)使用psql登陆PostgreSQL,指定要连接的数据库yuzhi100,要使用的用户yuzhi

psql yuzhi100 yuzhi

3)使用如下语句查询所有字段的值

yuzhi100=# select title from article where author='与知作者';

 art_id |     title      
--------+----------------
      1 | PostgreSQL教程 

PHP脚本where子句查询PostgreSQL表数据

PHP使用 pg_query() 函数来查询 PostgreSQL 表数据。

pg_query()语法形式

该函数有两个参数,在执行成功时返回数据,否则返回 FALSE。

pg_query ([ $connection ], string $query )

参数描述

  • connection:到数据库的连接,如果没有提供则使用默认的connection,默认connection是使用pg_connect()最后的一次连接。
  • query:必须的参数,要执行的SQL语句。

PHP脚本where子句查询PostgreSQL表数据实例

以下PHP代码演示了使用where子句来查询PostgreSQL表数据:

<?php

    //其中参数的含义是
    //host=localhost,本地计算机,默认就是本地计算机
    //port=5432,默认端口号
    //dbname=mydb,指定要连接的数据库
    //user=dbuser,连接数据库的用户
    //password=dbpassword,连接数据库用户的密码

    $connection_string = "host=localhost port=5432 dbname=mydb user=dbuser password=dbpassword";

    $conn = pg_connect( $connection_string );
    $result = pg_query($conn, "SELECT title FROM article WHERE author='与知作者';");

    if(! $result )
    {
        echo('查询表数据失败!');
    }
    else {
        echo '查询表数据成功!';
    }

    pg_close($conn);

查询结果如下:

 art_id |     title      
--------+----------------
      1 | PostgreSQL教程 

Python脚本where子句查询PostgreSQL表数据

Python使用Psycopg2模块的cursor类的execute()方法来查询 PostgreSQL 表数据。

cursor.execute()语法形式

该函数有两个参数,在执行成功时返回数据,否则返回 FALSE。

execute(query, vars=None)

参数描述

  • query:必须的参数,要执行的SQL语句。
  • vars:要替换的SQL语句中的变量值。

Python脚本where子句查询PostgreSQL表数据实例

以下Python代码使用wsgi程序演示了使用where子句来查询PostgreSQL表数据

PostgreSQL的SQL语句包含在一个事务中,在执行完SQL后,需要提交事务,才能把写操作写进数据库

# -*- coding: utf-8 -*-
import psycopg2
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT

def application(environ, start_response):
    try:
        conn = psycopg2.connect("host=localhost port=5432 dbname=mydb user=dbuser password=dbpassword")
        try:
            cur = conn.cursor()
            cur.execute("SELECT title FROM article WHERE author='与知作者';")
            conn.commit()
        except psycopg2.OperationalError:
            output = bytes('查询表数据失败!', 'utf-8')
    except psycopg2.OperationalError:
        output = bytes('数据库连接失败!', 'utf-8')
    else:
        output = bytes('查询表数据成功!', 'utf-8')
    finally:
        cur.close()
        conn.close()
    status = '200 OK'
    response_headers = [('Content-type', 'text/html; charset=utf-8'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

查询结果如下:

 art_id |     title      
--------+----------------
      1 | PostgreSQL教程 
本文链接:/tutorial/postgresql/postgresql-where-ziju

本文版权归知站所有,未经站长同意不得转载,谢谢尊重作者劳动成果!