SQL简单总结
NOTE:本文所用的都以postgreSQL为例,对标准SQL语句进行简单的总结,语法等细节详细参考《SQL基础教程》,下称《教程》。
1. 数据库
1.1 分类
-
层次数据库
-
关系数据库(最常用)
-
面向对象数据库
-
xml数据库
-
键值存储数据库
1.2 结构
客户端sql语句》服务器《======》数据库(一般存储在硬盘上)
/|\<=====请求的数据\|/
2. 什么是SQL
SQL是为了操作数据库而开发的语言。
国际标准化组织(ISO)为 SQL 制定了相应的标准,以此为基准的SQL 称为标准 SQL 。大多数SQL语法都类似,但是不同的数据库的SQL语法还是不一样的。
3. 表的创建、删除、更新
目前在关系型数据库中,用来管理数据的二维表称之为表(table)。表存储在数据库中,一个数据库中可以有多个表。
-
创建
数据库的创建:
语法:
CREATE DATABASE <数据库名称>;
表的创建:
语法:
CREATE TABLE <表名> ( <列名1> <数据类型> <该列所需约束>, <列名2> <数据类型> <该列所需约束>, <列名3> <数据类型> <该列所需约束>, <列名4> <数据类型> <该列所需约束>, . . . <该表的约束1>, <该表的约束2>,……);
eg. 创建一个名为Product的表,存储商品ID、商品名、类型、销售价格、购买价格等列。并且,所有列必须指定数据类型。
CREATE TABLE Product (product_id CHAR(4) NOT NULL, product_name VARCHAR(100) NOT NULL, product_type VARCHAR(32) NOT NULL, sale_price INTEGER , purchase_price INTEGER , regist_date DATE , PRIMARY KEY (product_id)); -- 主键约束
其中:数据类型有:
- 数字型
- INTEGER。只能存储整数,不能存储小数。
- 字符型
- CHAR(10)。定长字符串,长度为10,不足的用空格补齐。
- VARCHAR(10)。变长字符串,最大长度为10,不足的时候不用空格补齐。
- 日期型
- DATE。存储日期的类型。
约束条件指的是对存入数据的限制。如:NOT NULL,指的就是必须存入数据,不能为NULL。
- 数字型
-
删除
语法:
DROP TABLE <表名>;
。需要注意的是删除的表是不能恢复的。 -
更新
-
表定义更新:
ALTER TABLE <表名> ADD COLUMN <列的定义>;
。eg.ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100);
、ALTER TABLE Product DROP COLUMN product_name_pinyin;
-
向表中插入数据
-- DML :插入数据 BEGIN TRANSACTION;—————————① INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服',1000, 500, '2009-09-20'); INSERT INTO Product VALUES ('0002', '打孔器', '办公用品',500, 320, '2009-09-11'); INSERT INTO Product VALUES ('0003', '运动T恤', '衣服',4000, 2800, NULL); INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具',3000, 2800, '2009-09-20'); INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具',6800, 5000, '2009-01-15'); INSERT INTO Product VALUES ('0006', '叉子', '厨房用具',500, NULL, '2009-09-20'); INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具',880, 790, '2008-04-28'); INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品',100, NULL,'2009-11-11'); COMMIT;
-
4. 查询
-
SELECT
语法:
SELECT <列名>,……FROM <表名>;
。eg.SELECT product_id, product_name, purchase_price FROM Product;
SELECT * FROM Product;
表示选取所有的列。SELECT product_id as id FROM Product;
,AS
可以为列起别名。 -
DISTINCT
效果:删除重复的行,达到去重效果。
语法:
SELECT DISTINCT product_type FROM Product;
-
WHERE
效果:通过制定WHERE后面的条件,来筛选出想要的数据行。
语法:
SELECT <列名>, ……FROM <表名> WHERE <条件表达式>;
。eg.
SELECT product_name, product_type FROM Product WHERE product_type = '衣服';
5. 运算符
-
算数运算符:
+、-、*、/
。注意:所有包含 NULL 的计算,结果肯定是 NULL。 -
比较运算符:
=、<>、>、>=、<、<=
。注意:不能对NULL使用比较运算符 。 -
逻辑运算符:
NOT、AND、OR
。注意:AND运算符的优先级高于OR运算符。想要优先执行OR运算符时可以使用括号。但是当运算符涉及到NULL时,情况就不太一样了,详见教程P77。
6. 函数
-
聚合函数(聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL。)
-
COUNT:计算表中的记录数(行数)
eg.
SELECT COUNT(*) FROM Product;
注意:COUNT(*)会得到包含NULL的数据 行数,而COUNT(<列名>)会得到NULL之外的数据行数。
-
SUM:计算表中数值列中数据的合计值
-
AVG:计算表中数值列中数据的平均值
-
MAX:求出表中任意列中数据的最大值
-
MIN:求出表中任意列中数据的最小值
-