Postgresql学习笔记-基础语法篇

Postgresql学习笔记-基础语法篇


  • 修改密码:alter user 用户名 with password ‘新密码’;

  • 创建表:

    CREATE TABLE DEPARTMENT(
    	ID INT PRIMARY KEY NOT NULL,
    	DEPT CHAR(50) NOT NULL,
    	EMP_ID INT NOT NULL
    );
    
  • 往表中插入值:

    insert into department values (1,'IT Billing',1); --全插入(表中所有字段都插入值)
    insert into department (ID,DEPT,...) values (1,'xxx',...); --选中表中字段插入值
    

Postgresql 连接(JOIN)

  • 交叉连接

    交叉连接(CROSS JOIN)把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有x行和y行,则结果表有x*y行。

    由于交叉连接(CROSS JOIN)有可能产生非常大的表,使用时必须谨慎,只在适当的时候使用它们。

    语法

    SELECT ... FROM table1 CROSS JOIN table2 ...
    举例:
    select name,dept from company cross join department;
    select a.name,b.dept from company as a cross join department as b;
    
    
  • 内连接

    内连接(INNER JOIN)根据连接谓词结合两个表(table1和table2)的列值来创建一个新的结果表。查询会把table1中的每一行与table2中的每一行进行比较,找到所有满足连接谓词的行的匹配对。

    当满足连接谓词时,A和B行的每个匹配对的列值会合并成一个结果行。

    内连接(INNER JOIN)是最常见的连接类型,是默认的连接类型。

    语法

    SELECT table1.column1, table2.column2...
    FROM table1
    INNER JOIN table2
    ON table1.common_filed = table2.common_field;
    举例:
    select a.id,a.name,a.age,a.address,a.salary,b.dept from company 
    as a inner join department as b on a.id=b.id;
    
  • 左外连接

    外部连接是内部连接的扩展。SQL标准定义了三种类型的外部连接:LEFT、RIGHT和FULL,Postgresql支持所有这些。

    对于左外连接,首先执行一个内连接。然后,对于表T1中不满足表T2中连接条件的每一行,其中T2的列中有null值也会添加一个连接行。因此,连接的表在T1中每一行都会保留。

    语法

    SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
    举例:
    select b.emp_id,a.name,b.dept from company as a left join department as b on a.id=b.emp_id;
    注意:a中所有name信息都会出现在结果集中,但是b中不满足条件的全部以null代替。
    left outer join 结果和 left join 结果一致。
    
  • 右外连接

    首先,执行内部连接。然后,对于表T2中不满足T1中连接条件的每一行,其中T1列中的值为空也会添加一个连接行。这与左连接相反;对于T2中的每一行,结果表都会做保留。

    语法

    SELECT ... FROM table1 RIGHT OUTER JOIN table2 ON conditional_expression ...
    举例:
    select a.id,a.name,b.dept from company as a right join department as b on a.id=b.emp_id;
    
  • 外连接

    首先,执行内部连接。然后,对于表T1中不满足表T2中任何行连接条件的每一行,如果T2的列中有null值也会添加到结果集中。此外,对于T2中不满足与T1中的任何行连接条件的每一行,将会添加T1列中包含null值到结果中。

    语法

    SELECT ... FROM table1 FULL OUTER JOIN table2 ON conditional_expression ...
    举例:
    select b.emp_id,a.name,b.dept from company as a full join department as b on a.id=b.emp_id;
    结果与左连接类似。
    

Postgresql 运算符

  • 算术运算符

    运算符描述实例
    +select 1+2 as re;
    -select 2-1 as re;
    *select 1*2 as re;
    /select 2/1 as re;
    %模(取余)select 1.2%1 as re;
    ^指数select 2^4 as re;
    |/平方根select |/4 as re;
    ||/立方根select ||/27 as re;
    !阶乘select 4! as re;
    !!阶乘(前缀操作符)select !!4 as re;
  • 比较运算符

    运算符描述实例
    =等于select 1=1 as re;
    !=不等于select 1!=1 as re;
    <>不等于select 1<>2 as re;
    >大于select 1>2 as re;
    <小于select 1<2 as re;
    >=大于等于select 1>=2 as re;
    <=小于等于select 1<=2 as re;
  • 逻辑运算符

    运算符描述
    AND逻辑与运算符。如果两个操作数都非零,则条件为真。Postgresql中的WHERE语句可以用AND包含多个过滤条件。
    NOT逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。Postgresql有NOT EXISTS,NOT BETWEEN,NOT IN等运算符。
    OR逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。Postgresql中的WHERE语句可以用OR包含多个过滤条件。

    注意:SQL使用三值的逻辑系统,包括true、false和null,null表示“未知”

  • 位运算符

    pqp&qp|qp^q~p
    000001
    010111
    100110
    111100

| 无 | 无 | 两个都为真为真 | 一个为真就为真 | 相同为0,不同为1 | 非 |

Postgresql表达式

  • 布尔表达式:

    SELECT * FROM COMPANY WHERE SALARY = 10000;
    
  • 数字表达式:

    SELECT (17 + 6) AS ADDITION ;
    
  • 内置数学函数:

    函数名说明用法
    avg()返回表达式平均值select avg(id) as re from company;
    sum()返回指定字段的总和select sum(id) as re from company;
    count()返回查询的记录总数select count(id) as re from company;

Postgresql WHERE 子句

  • 普通用法-结合各类逻辑运算符使用

    运算符举例说明
    ANDSELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;找出 AGE(年龄) 字段大于等于 25,并且 SALARY(薪资) 字段大于等于 65000 的数据
    ORSELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;找出 AGE(年龄) 字段大于等于 25,或者 SALARY(薪资) 字段大于等于 65000 的数据
    NOT NULLSELECT * FROM COMPANY WHERE AGE IS NOT NULL;在公司表中找出 AGE(年龄) 字段不为空的记录
    LIKESELECT * FROM COMPANY WHERE NAME LIKE ‘Pa%’;在 COMPANY 表中找出 NAME(名字) 字段中以 Pa 开头的的数据
    INSELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );AGE(年龄) 字段为 25 或 27 的数据
    NOT INSELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );AGE(年龄) 字段不为 25 或 27 的数据
    BETWEENSELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;AGE(年龄) 字段在 25 到 27 的数据
  • 子查询

    SELECT AGE FROM COMPANY
            WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
    

    说明:子查询语句中读取SALARY(薪资)字段大于65000的数据,然后通过EXISTS运算符判断它是否返回行,如果有返回行则读取所有的AGE(年龄)字段。

Postgresql UPDATE 语句

  • 如果我们要更新在Postgresql数据库中的数据,我们可以用UPDATE来操作。

    语法

    UPDATE table_name
    SET column1 = value1, column2 = value2...., columnN = valueN
    WHERE [condition];
    -- 举例:(更新COMPANY表中id为3的salary字段值)
    UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3;
    -- 举例:(同时更新company表中salary和address字段值)
    UPDATE COMPANY SET ADDRESS = 'Texas', SALARY=20000;
    

Postgresql DELETE 语句

  • 使用DELETE语句来删除Postgresql表中的数据

    语法

    DELETE FROM table_name WHERE [condition];
    举例:(删除COMPANY表中id为2的数据)
    DELETE FROM COMPANY WHERE ID = 2;
    DELETE FROM COMPANY; --删除整张COMPANY表(慎用DELETE)
    

Postgresql LIKE 子句

  • 百分号 % :匹配0或多个字符

    SELECT FROM table_name WHERE column LIKE 'XXXX%';
    
  • 下划线 _ : 匹配一个字符

    SELECT FROM table_name WHERE column LIKE 'XXXX_';
    

Postgresql LIMIT 子句

  • limit子句用于限制SELECT 语句中查询的数据的数量。

    语法

    • 带有 LIMIT 子句的 SELECT 语句的基本语法如下:
    SELECT column1, column2, columnN
    FROM table_name
    LIMIT [no of rows]
    举例:
    SELECT * FROM COMPANY LIMIT 4;
    
    • LIMIT 子句与 OFFSET 子句一起使用时的语法:
    SELECT column1, column2, columnN 
    FROM table_name
    LIMIT [no of rows] OFFSET [row num]
    举例:从第三位开始提取 3 个记录
    SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
    

Postgresql ORDER BY 语句

注意:ASC表示升序,DESC表示降序。

  • 语法

    • 对一个字段排序

      SELECT column-list
      FROM table_name
      [WHERE condition]
      [ORDER BY column1, column2, .. columnN] [ASC | DESC];
      举例:-- 对结果根据 AGE 字段值进行升序排列
      SELECT * FROM COMPANY ORDER BY AGE ASC;
      
    • 对多个字段排序

      举例:-- 对结果根据 NAME 字段值和 SALARY 字段值进行升序排序
      SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
      

Postgresql GROUP BY 语句

  • 在 PostgreSQL 中,GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。

    GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。

    语法

    SELECT column-list
    FROM table_name
    WHERE [ conditions ]
    GROUP BY column1, column2....columnN
    ORDER BY column1, column2....columnN
    举例:--根据 NAME 字段值进行分组,找出每个人的工资总额
    SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
    

Postgresql HAVING 子句

  • HAVING 子句可以让我们筛选分组后的各组数据。

    WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。

    语法

    SELECT column1, column2
    FROM table1, table2
    WHERE [ conditions ]
    GROUP BY column1, column2
    HAVING [ conditions ]
    ORDER BY column1, column2
    举例:-- 根据 NAME 字段值进行分组,并且 name(名称) 字段的计数少于 2 数据
    SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;
    

Postgresql DISTINCT 关键字

  • 在 PostgreSQL 中,DISTINCT 关键字与 SELECT 语句一起使用,用于去除重复记录,只获取唯一的记录。

    我们平时在操作数据时,有可能出现一种情况,在一个表中有多个重复的记录,当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。

    语法

    SELECT DISTINCT column1, column2,.....columnN
    FROM table_name
    WHERE [condition]
    举例:--删除name重复的数据
    select distinct name from company;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值