Loading

sql学习

learning database

CHAPTER 1 数据库和SQL

1. 使用中出现的问题

#- 代表系统正在等待未写完的语句
; 每个语句结尾必须使用

2. 如何正确创建一个表

  • 查看已有数据库 \l

  • 进入数据库 \c database name

  • 查看所有的表 \d 表示表是否创建成功 \d tablename 查看表的信息

  • 创建表

    shop=# CREATE TABLE Product (
    shop(# product_id CHAR(4) NOT NULL,
    shop(#product_name VARCHAR(100) NOT NULL,
    shop(#product_type VARCHAR(32)NOT NULL,
    shop(# sale_price INTEGER ,
    shop(#regist_date DATE,
    shop(# PRIMARY KEY (product_id)
    shop(# );
    CREATE TABLE
    
  • 查看表的内容 SELECT * FROM tablename;

3. 在系统命令行窗口下连接数据库

  • 数据库的口令是xxxxx
  • 通过psql连接PostgreSQL:在bin的路径下 psql.exe -U postgress
  • 创建数据库:CTEATE DATABASE shop;   \q就可以退出了
  • 连接数据库:在bin的路径下 psql.exe -U postgress -d shop

4. 数据库基础知识

  • 数据库类型
    用来管理数据库的计算机系统称为数据库管理系统(DBMS)database management system
    层次数据库 hierarchical database
    关系数据库 relational database RDBMS
    面向对象数据库 OODB
    XML数据库 XMLDB
    键值存储系统 KVS

  • 数据库结构: RDBMS 客户端/服务器 C/S系统结构

  • 数据库常识:
    客户端向服务器发送SQL语句来实现服务器的读写
    SQL语句内容返回的数据必须是二维表的形式,不是二维表的形式SQL语句就不能运行
    表的列称为字段,表的行称为记录
    关系数据库必须以行为单位进行数据的读写的
    单元格,一个单元格只能输入一个数据
    SQL是为了操作数据库而开发的
    原则以分号结尾
    SQL以操作目的可以分为DDL,DML,DCL
    SQL用关键字,表名,列名组合而成的一条语句

5. 表的创建须知

  • CREATE TABLE创建表
    表和列的命名需要有意义的文字
    指定列的数据类型
    可以在表中设置约束
    CREATE DATABASE  <database name>;
    CREATE TABLE <表名>
    (  列名 数据类型 该列的约束,.....);
  • 数据库名称 表名 列名: 字母 数字 下划线
    名称必须以半角英文开头
    名称不能重复

  • 数据类型: 数字型,字符型,日期型
    INTEGER:存储整数列数据类型数字型,不能存储小数
    CHAR:定长字符串
    VARCHAR:变长字符串
    DATE:存储日期

  • 约束设置
    PRIMARY KEY (product_id) 主键约束
    设置主键约束后就可以通过该列取出特定的商品

  • 使用DROP TABLE语句删除表
    ALTER TABLE向表添加列或删除列
    eg DROP TABLE Product
    删除了是无法恢复的!!!

  • 添加列的ALTER TABLE
    ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100)

  • 删除列
    ALTER TABLE Product DROP COLUMN product_name_pinyin VARCHAR(100)

  • 向表中插入数据
    BEGIN TRANSACTION:
    INSERT INTO Product VALUES('...','EWRW',NULL)
    COMMIT;

  • 修改表名
    ALTER TABLE Product RENAME TO Product
    用select语句查询

CHAPTER 2 查询基础

1. SELECT语句基础

  • 设置别名 :SELECT XXX AS XXX FROM product;
  • 中文要用双引号括起来
  • 使用汉语别名要用“”
  • 删除重复数据: SELECT DISTINCT product_type FROM Product;

2. 用WHERE语句选择记录

  • SELECT 列名
  • FROM 表名
  • WHERE 条件表达式;
  • SQL语句格式要求严格 WHERE语句紧跟FROM

3. 注释

  • --同行或者/* */ 可以跨越多行

4. 逻辑运算符

shop=#SELECT product_name, sale_price,
shop-# sale_price*2 AS "sale_price_x2"
shop-#FROM Product;
  • 逻辑运算符包含:+ - * /

5. 使用运算符时须知

  • 更null进行的任何运算都是null
  • postgreSQL中!= 是<>
  • 字符串类型的数据原则上按照字典顺序进行排序,不能与数字大小顺序混淆
    1 13 2 39  1  1-3 2 2-9
  • 不能对null使用比较运算符
  • 选取NULL记录的时候使用 IS NULL
  • 选取不是NULL的记录时,使用IS NOT NULL

6. 逻辑运算符

  • NOT 运算用于否定某一条件,不要滥用
  • AND OR 运算符
  • 多个查询条件使用AND或OR运算符
  • 文式图很方便
  • SQL中的逻辑运算称为三值逻辑
  • 不确定UNKNOWN
  • 字符串数据按照字典顺序进行排序,不能与数字的大小进行混淆

CHAPTER 3 聚合和排序

1. 聚合函数

  • COUNT 计算表中的记录数(行数)
  • SUM AVG MAX MIN 用于汇总的就叫聚合函数

2. COUNT使用

  • count可以对整个表使用 * ,也可以对某一列使用,其余聚合函数都不可以
shop=# SELECT COUNT (product_name)
shop-# FROM Product
shop-#;
count
------
8
(1行记录)

3. 使用SUM (SUM,AVG,MAX,MIN同理)

  • 只能对列使用不能对全部表
shop=# SELECT SUM(sale_price),SUM(purchase_price)
shop-# FROM Product;
  • 总结:MAX MIN 可以作用任何数据结构
              SUM AVG 只能作用于数值类型

4. 聚合函数的参数中使用DISTINCT删除重复值

shop=#SELECT COUNT (DISTINCT product_type), COUNT(product_type)
shop-# FROM Product;

5. 对表进行分组(group by)

shop=# SELECT product_type, COUNT(*)
shop-# FROM Product
shop-#GROUP BY product_type;

6. 聚合函数和GROUP BY子句有关的常见错误

  • 在使用count这样的聚合函数的时候,把聚合键之外的列名书写进SELECT子句中
  • 在GROUP BY 子句中不能使用SELECT 子句中定义的别名
  • GROUP BY子句结果显示是无序的
  • WHERE 语句中不能使用聚合函数
  • 聚合函数只能在SELECT HAVING order by 使用

7. 为聚合函数结果指定条件

  • HAVING 语句在GROUP BY后
  • HAVING 语句可使用 1.常数 2.聚合函数 3.GROUP BY子句中指定的列名(聚合键)
  • WHERE 处理速度比 HAVING快的多
shop=# SELECT product_type,AVG (sale_price)
shop-# FROM Product
shop-#GROUP BY product_type
shop-# HAVING AVG(sale _price)>= 2500;

8. ORDER BY语句

  • 一般在select 语句最后面
  • 以降序排序ORDER BY sale_price DESC;
  • ASC ascendent 升序 DESC descendent 降序 默认升序
  • 可以使用多个排序键 优先左键,相同考虑右边的
  • 排序键包含nul时,会在开头末尾汇总
  • 在ORDER BY中可以使用SELECT子句的别名
  • ORDER BY 中可以使用SELECT 子句中未使用的列和聚合函数

待续

posted @ 2020-11-13 01:32  panda三只  阅读(46)  评论(0编辑  收藏  举报