版本声明:本文为作者原创文章,转载请注明出处! http://blog.csdn.net/AndroidXiXi
本文根据《SQL基础教程第二版》(作者:[日本]MICK)的部分内容实践、整理得出,旨在对所学知识进行梳理
全面系统学习请参考原著书籍http://product.dangdang.com/25094702.html
书中要学习的SQL(Structured Query Language,结构化查询语言)是用来操作关系型数据库的语言,国际化标准组织(ISO)为SQL制定了相关的标准,以此为基准的SQL被称为标准SQL。虽然有时需要根据不同的RDBMS来编写特定的SQL语句,但是大同小异,学会标准的SQL语句就可以在各种RDBMS中书写SQL语句了
SQL语句用关键字、表名、列名等组合而成的一条语句来描述操作的内容
关键字:指那些含义或者使用方法已经事先被定义好的英语单词
根据RDBMS赋予的指令种类的不同,SQL语句可以分为:
接下来开始SQL语句书写的学习
书中作者推荐、使用的是PostgreSQL,笔者实践使用的是MySQL,安装相关环境可以通过互联网搜索下载资源和安装方法。笔者认为,SQL的学习需要对各种情况动手实践,方能加深对SQL的理解,建议将书中的相关Demo、练习题反复实践、温习
在书写SQL之前可以先约定相关命名规则
数据存储于数据库中,首先要进行对数据库的创建,执行CREATE DATABASE语句就可以在RDBMS上创建数据库了,如下:
-- 创建数据库的语法
CREATE DATABASE <数据库名称>;
-- 创建数据库shop
CREATE DATABASE shop;
执行CREATE TABLE语句可以在数据库中创建表,如下:
-- 创建表的语法
-- 每一列的数据类型是必须的,有时也需要为列设置约束条件
CREATE TABLE <表名> <列名1> <数据类型> <该列所需约束>, <列名2> <数据类型> <该列所需约束>, <列名3> <数据类型> <该列所需约束>, . . . <该表的约束1>,<该表的约束2>...);
-- 创建Product表
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等关键字,用来声明该列的数据类型,所有的列都必须指定数据类型
数据类型表示数据的种类,包括数字型、字符型和日期型等等,每一列不能存储与该列数据类型不符的数据,常见的几种基本数据类型:
product_id CHAR(4) NOT NULL,
约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能,例如上个SQL语句示例中的“NOT NULL”,称为“NOT NULL约束”。NULL是代表空白(无记录)的关键字,在NULL之前加上了表示否定的NOT,就是给该列设置了不能输入空白,也就是必须输入数据的约束
PRIMARY KEY (product_id)
上例中“PRIMARY_KEY”用来指定主键约束
键:在指定特定数据时使用的列的组合。
主键:可以特定一行数据的列,相当于一行数据的唯一标识
可以使用DROP TABLE语句删除指定名称的表
# 删除表语法
DROP TABLE <表名>;
# 删除Product表
DROP TABLE Product;
特别注意:删除的表是无法恢复,现实中可能会引发灾难,数据无价,三思而行
表的结构是可以改变的,通过ALTER TABLE 语句变更表的定义,这样就不用删除表,重新创建,很方便
可以通过ALTER TABLE ADD为表增加一个列
#ALTER TABLE ADD 语法 ALTER TABLE <表名> ADD COLUMN <列的定义>;
#MySQL向表中添加一个列
ALTER TABLE Product ADD product_test VARCHAR(100);
ALTER TABLE Product ADD COLUMN product_test VARCHAR(100);
#MySQL添加多个列
ALTER TABLE Product ADD( product_testA INTEGER, product_testB CHAR(100), product_testC DATE );
可以用ALTER TABLE DROP删除指定列
#ALTER TABLE DROP 语法 ALTER TABLE <表名> DROP COLUMN <列名>;
#MySQL从表中删除一个列
ALTER TABLE Product DROP product_test;
ALTER TABLE Product DROP product_testA;
ALTER TABLE Product DROP product_testB;
ALTER TABLE Product DROP product_testC;
#按照上面添加多列的方式推测删除多列的方法
#但是MySQL无法运行,原因未知
#ALTER TABLE Product DROP ( # product_testA, # product_testB, # product_testC #);
注意,通过ALTER TABLE对表定义的变更后是无法恢复的
ALTER TABLE操作的对象是表的列名(字段名),如果表名穿件出现问题,就需要使用RENAME来变更表名
# MySQL语法
sp_rename 'Poduct' 'Product';
可以使用INSERT向表中插入一些数据
#向表中插入数据
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');