zoukankan      html  css  js  c++  java
  • postgreSQL最全语法整理(可作为工具查询使用)

    一、查询基础

    1、连接数据库

    C:PostgreSQL9.5inpsql.exe -U postgres -d shop

    2、检查数据库连接是否成功   

    SELECT 1;

    3、创建数据库   

    CREATE DATABASE shop;

    4、退出数据库口令   

    q

    5、d 数据库 ——得到所有表的名字

    6、d 表名 —— 得到表结构

    7、创建表

    CREATE TABLE <表名>

    <列名1> <数据类型> <该列所需约束>,

    <列名2> <数据类型> <该列所需约束>,

    <列名3> <数据类型> <该列所需约束>,

    <列名4> <数据类型> <该列所需约束>,

    ...

    <该表的约束1>, <该表的约束2>,……);

    8、删除表      

    DROP TABLE <表名>;

    9、修改表-添加列

    ALTER TABLE <表名> ADD COLUMN <列的定义>;

        注:Oracle和SQL Server中不用写COLUMN: ALTER TABLE <表名> ADD <列名> ;

        oracle还可以这样:ALTER TABLE <表名> ADD (<列名>,<列名>,<列名>... );

    10、修改表-删除列

    ALTER TABLE <表名> DROP COLUMN <列名>;

    11、插入数据   

    BEGIN TRANSACTION;

    INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');

    COMMIT;

    注:在MySQL中运行时,BEGIN TRANSACTION改写成 START TRANSACTION;在Oracle和DB2中运行时,无需使用BEGIN TRANSACTION;

    12、变更表名

    ALTER TABLE Product RENAME TO Product;

    13、查询语句

    (1) 查询全部列

      Select  *  from  <表名>;

    星号(*)代表全部列的意思。

    (2) 查询指定列

    SELECT <列名>,<列名>,…… FROM <表名>;

    注:查询多列时,需要使用逗号进行分隔。查询结果中列的顺序和

    SELECT 子句中的顺序相同

    14、AS为列设置别名

    例:SELECT  product_id as id,

    product_name as name,

    purchase_price as price

    FROM  product;

    别名可用中文,但要用“”。

    15、SELECT子句可以用常数

    例:SELECT '商品' as string,'2019-12-12' as date,product_id,product_name from product;

    注:此处用单引号‘’。

    16、查询结果去重:distinct

    例:select distinct product_type from product;

    注:用distinct时null类型数据也会被作为一类数据;distinct也可以同时合并多列

    17、WHERE子句添加查询筛选条件

    例:select product_name,product_type from product where product_type='衣服';

    18、注释的书写方式

    1行注释:写在--后面

    多行注释:写在/*  和  */之间

    19、使用(+、-、*、/)运算符

    例:select product_name,sale_price,sale_price * 2 as “sale_price_x2” from product;

    20、使用比较运算符

    (1) 含义

    (2) 字符串类型的数据原则上按字典的顺序排序,不能与数字的大小顺序混淆,如’1-3‘<’2’

    (3) null数据不能用比较运算符

    用特定语句:is null /is not null

    21、逻辑运算符

    (1) NOT运算符:用来否定某一条件

    例:select product_name ,sale_price from product where not sale_price >= 1000;

    (2) AND运算符

    其两侧条件需同步成立,相当于”并且“

    例:select product_name,purchase_price from product where product_type = '厨 房用具' and sale_price >=3000;

    (3) OR运算符

    其两侧条件只需一个成立,相当于”或者“

    例:select product_name,purchase_price from product where product_type = '厨房用具' or sale_price >=3000;

    (4) 运用括号控制运算优先级

    例:select product_name,product_type,regist_date from product where product_type = '办公用品' and (regist_date = '2009-09-11' or regist_date = '2009-09-20');

    注:AND运算符优先于OR运算符,想要先执行OR语句可以用括号

    二、聚合函数:多行汇集成一行

    1、COUNT:计算表中的记录数(行数)

     例:select count(*) from product;

    计算某列非空行:SELECT COUNT(purchase_price)  FROM Product;

    2、SUM: 计算表中数值列中数据的合计值

    例:select sum(sale_price) from product

    3、AVG: 计算表中数值列中数据的平均值

    例:select avg(sale_price) from product;

    4、MAX: 求出表中任意列中数据的最大值

    MIN 求出表中任意列中数据的最小值

    例:SELECT MAX(sale_price), MIN(purchase_price)  FROM Product;

    5、使用聚合函数删除重复值

    6、Group by子句

    (1) 只能存在 常数、聚合函数group by子句中指定的列名

    (2) group by子句中不能用别名

    (3) Where 子句中不能用聚合函数

    例:select product_type,count(*) from product group by product_type;

    7、Haveing 子句 :取符合条件的组

    8、Order by:排序

    三、数据更新

    1、Insert

    2、Delete from 【表名】

    3、Update

    (1) 多列更新

    ① -- 使用逗号对列进行分隔排列

    UPDATE Product

    SET sale_price = sale_price * 10,

    purchase_price = purchase_price / 2

    WHERE product_type = '厨房用具';

    ② -- 将列用()括起来的清单形式

    UPDATE Product

    SET (sale_price, purchase_price) = (sale_price * 10, �

    purchase_price / 2)

    WHERE product_type = '厨房用具';

    4、事务是需要在同一个处理单元中执行的一系列更新处理的集合。

    (1) 语法:

    ① 事务开始语句

    ② DML语句1,DML语句2,......

    ③ 事务结束语句(commit或rollback)

    (2) 开启事务语句:

    ① SQLserver、postgreSQL)Begin transaction

    ② (MySQL) start transaction

    (3) 提交事务--commit

    (4) 取消处理--rollback

    5、ACID特性:所有的DBMS都遵循四种特性

    (1) 原子性atomicity

    (2) 一致性consistency

    (3) 隔离性isolation

    (4) 持久性durability

    四、复杂查询

    1.创建视图 view:保存好的select语句

    (1)语法:

    CREATE VIEW 视图名称(<视图列名1>, <视图列名2>, ……)

    AS

    <SELECT语句>

    (2)法则:尽量避免在视图的基础上创建视图,会降低sql效率

    (3)法则:定义视图时不能使用order by 语句

    (4)法则:部分情况可以对视图进行更新,如既没有聚合也没有结合的select语句

    视图设定为只读,因此需要on insert do instead规则

    例:CREATE OR REPLACE RULE insert_rule

    AS ON INSERT

    TO ProductJim DO INSTEAD

    INSERT INTO Product VALUES (

    new.product_id,

    new.product_name,

    new.product_type,

    new.sale_price,

    new.purchase_price,

    new.regist_date);

    2.删除视图:drop view 【表名】

    3.删除关联视图:DROP VIEW ProductSum CASCADE;

    4.关联子查询:在子查询中添加条件

    五、函数

    1.ABS绝对值:ABS(数值)

    2.Mod求余:mod(被除数,除数)

    3.Round四舍五入:round(对象数值,保留小数位数)

    4.|| 拼接:字符串1||字符串2

    5.Length字符串长度:length(字符串)

    6.lower小写转换:lower(字符串)

    7.upper大写转换:upper(字符串)

    8.replace字符串的替换:replace(对象字符串,替换前字符串,替换后字符串)

    9.Substring(对象字符串 from 截取的起始位置 for 截取的字符数)

    10.Current_date当前日期

    11.Current_time当前时间

    12.Current_timestamp当前日期和时间

    13.Extract(日期元素 from 日期)

    14.cast类型转换:cast(转换前的值 as 想要转换的数据类型

    15.Coalesce讲null值转换为其他值:coalesce(数值1,数值2,数值3......)

    16.like字符串部分一致查询(%代表“0字符以上任意字符串”)

    17.Like+指定字符串查询:

    select * from samplelike where strcol like ‘abc__’;

    查询”abc+任意三个字符”的字符串

    18.Between范围查询

    19.Is null ,is not null判断是否为null

    20.in谓语--or 的简便用法

    21.Exists

    22.case表达式

    语法:case when <求值表达式> then <表达式>

    When <求值表达式> then <表达式>

    When <求值表达式> then <表达式>

    ...

    Else <>

              End

    六、集合运算

    1.Union表的加法

    2.Union all包含重复行

    3.Except记录的减法(Oracle中使用minus

    4.Inner join内联结

    5.Outer join外联结

    6.Cross join 交叉联结

    七、SQL高级处理

    1.窗口函数

    (1)语法:<窗口函数> OVER ([PARTITION BY <列清单>]  

    ORDER BY <排序用列清单>)

    PARTITION BY:能够设定排序的对象范围

    ORDER BY:能够指定按照哪一列、何种顺序排序

    (2)Rank函数:排序时,如存在相同位次的记录会跳过之后的位次(1,1,1,4)

    (3)Dense_rank函数:排序时,如果存在相同位次,不会跳过(1,1,2,3)

    (4)Row_number函数:赋予唯一连续位次

    2.聚合函数作为窗口函数

    (1)Sum函数:此处与纯聚合函数不一样,此处为累计

    (2)Avg函数:计算移动平均

    ①Rows 2 preseding:(移动平均:截止到之前2行)

    ②Rows 2 following :(移动平均:截止到之后2行)

    3.Grouping运算符

    (1)Rollup同时得出合算和小计

    (2)Grouping让null更加容易分辨

    (3)Cube用数据搭积木

    (4)Grouping sets取得期望的积木

    (5)   可以从rollup或者cube的结果中取出部分记录

    八、应用程序连接数据库

    驱动:可以从网上下载(PostgreSQL JDBC Driver :https://jdbc.postgresql.org/download.html)

    (1)ODBC:open database connectivity

    (2)JDBC:java database connectivity

    (3)C:PostgreSQLjavajdkinjava -cp D:softPostgreSQLjdbc*;. DBConnect1

  • 相关阅读:
    Linux kernel 之 uart 驱动解析
    按键驱动程序(异步通知)
    常用Linux运维命令
    进程上下文、中断上下文及原子上下文
    Linux 设备驱动开发 —— platform设备驱动应用实例解析
    C++中rapidxml用法及例子(源码)
    hpp.h与.h的区别
    使用Visual Studio扩展插件Visual assist X给代码插入注释模板
    VC++ MFC SDI/MDI Ribbon程序的停靠窗格被关闭后如何再次显示
    “ping某个IP地址,如果ping不通则在dos窗口或弹出MsgBox提示原因”的批处理bat命令
  • 原文地址:https://www.cnblogs.com/icemargin/p/12739376.html
Copyright © 2011-2022 走看看