SQL语句及其种类
-
DDL(数据定义语言)
用来创建或者删除存储数据用的数据库以及数据库中的表等对象。
1. CREATE:创建数据库和表等对象 2. DROP: 删除数据库和表等对象 3. ALTER: 修改数据库和表等对象的结构 -
DML(数据操作语言)
用来查询或者变更表中的记录。
1. SELECT: 查询表中的数据 2. INSERT: 向表中插入新数据 3. UPDATE: 变更表中的数据 4. DELETE: 删除表中的数据 -
DCL(数据控制语言)
用来确认或者取消对数据库中数据进行的变更。除此之外,还可以对RDBMS的用户是否有权限操作数据库中的对象(数据库表等)进行设定。
1. COMNIT: 确认数据库中的数据进行的变更 2. ROLLBACK: 取消对数据库中的数据进行的变更 3. GRANT: 赋予用户操作权限 4. REVOKE: 取消用户的操作权限
SQL的基本书写规范
-
SQL语句要以分好(;)结尾
-
SQL语句不区分大小写
SQL不区分关键字的大小写。例如,不管写成SELECT还是select,解释都是一样的。表名和列名也是如此。 虽然可以根据个人喜好选择大写还是小写,但是为了理解起来更加容易,本书使用一下规则来书写SQL语句。
1. 关键字大写 2. 表名的首字母大写 3. 其余(列名)小写但是插入到表中的数据时区分大小写的。例如,在操作过程中,数据Computer、COMPUTER或computer,三者是不一样的。
-
常数的书写方式是固定的
-
单词需要用半角空格或者换行来分隔
表的创建
数据库的创建(CREATE DATABASE语句)
在前面提到,创建表之前,一定要先创建用来存储表的数据库。运行CREATE DATABASE 语句就可以在RDBMS上创建数据库了。CREATE DATABASE 语句的语法如下:
CREATE DATABASE <数据库名称>
表的创建(CREATE TABLE 语句)
创建好数据库之后,接下来我们使用CREATE TABLE 语句在其中创建表。CREATE TABLE语句的语法如下:
CREATE TABLE <表名>
(<列名1> <数据类型> <该列所需约束>,
<列名2> <数据类型> <该列所需约束>,
<列名3> <数据类型> <该列所需约束>,
<列名4> <数据类型> <该列所需约束>,);
该语法清楚的描述了我们要创建一个包含<列名1>、<列名2>、的名称为<表名>的表。
例如:
CREATE TABLE Product
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type CARCHAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
数据类型的指定
Product表所包含的列,定义在CREATE TABLE Product()的括号中。列名右边的INTEGER或者CHAR等关键字,是用来声明改列的数据类型的,所有的列都必须指定数据类型。
数据类型表示数据的种类,包括数字型。字符型和日期型等。每一列都不能存储与该列数据类型不服的数据。声明为整数型的列中不能存储‘adb’这样的字符串,声明为字符型的列中也不能存储123这样的数字。
-
INTEGER型
用来指定存储整数的列的数据类型(数字型),不能存储小数。
-
CHAR型
用来存储字符串的列的数据类型(字符型),在括号中指定该列可以存储的字符串的长度。
-
VARCHAR型
同CHAE类型一样,VARCHAR型也是用来指定存储字符串的列的数据类型(字符串类型),也可以通过括号内的数字来指定字符串的长度。
-
DATE型
用来指定存储日期的列的数据类型(日期型)。
约束的设置
约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能。Product表中设置了两种约束。
Product表中product_id列、product_name列和product_type列的定义如下所示:
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
数据类型的右侧设置了NOT NULL约束。NULL是代表空白(无记录)的关键字。在BULL之前加上了表示否定的NOT,就是给该列设置了不能输入空白,也就是必须输入数据的约束(如果什么都不输入就会出错)。
这样一来,Product表的product_id(商品编号)列、product_name(商品名称)列和product_type(商品种类)列都成了必须输入的项目。
另外,在创建Product表的CREATE TABLE语句的后面,还有下面这样的记述。
PRIMARY KEY (product_id)
这是用来给product_id列设置主键约束的,所谓键,就是值在特定数据时使用列的租户。键种类多样,主键(primary key)就是可以特定一行数据的列。也就是说,如果吧product_id列指定为主键,就可以通过该列取出特定商品数据了。
反之,如果向product_id列中输入了重复数据,就无法取出唯一的特定数据了(因为无法确定唯一的一行数据)。
表的删除和更新
表的删除(DROP TABLE 语句)
删除表的语句:
DROP TABLE <表名>;
如果想要删除Product表, DROP TABLE Product;
DROP在英语中是“丢掉”,“舍弃”的意思,需要特别注意的是,删除的表示无法恢复的。即使是被误删的表,也无法恢复。只能重新创建,然后重新插入数据。
表定义的更新(ALTER TABLE 语句)
有时好不容易把表创建出来之后才发现少了几列,其实这时无需把表删除重新创建,只需要变更定义的ALTER TABLE语句就可以了。ALTER在英语中就是“改变”的意思。
首先是添加列时使用语法。
ALTER TABLE <表名> ADD COLUMN <列的定义>;
特定的SQL
Oracle和SQL Server中不用写COLUMN。
ALTER TABLE <表名> ADD <列名>;
另外,在Oracle中同时添加多列的时候,可以像下面这样使用括号。
ALTER TABLE <表名> ADD (<列名1>,<列名2>....);
删除列的ALTER TAVLE语句
ALTER TABLE <表名> DROP COLUMN <列名>;
ALTER TABLE 语句和DROP TABLE 语句一样,执行之后无法恢复。误添的列可以通过ALTER TABLE 语句删除,或者将表全部删除之后重新创建。
向Product表中插入数据。
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');