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向表添加列或删除列
egDROP 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 子句中未使用的列和聚合函数