今天是数据库语言分类的第一讲,主要会介绍数据库的四类语言,以及其语法,课程大纲详见脑图。
数据库定义语言
数据库定义语言(DDL,Data Definition Language)是负责数据的模式定义与数据的物理存取构建,主要包括CREATE建表语句,ALTER 更新表结构语句,DROP 删除语句,DECLARE 创建游标。
CREATE建表语句
创建一张名为OrderItems的空表
代码语言:javascript复制CREATE TABLE OrderItems
(
order_num INTEGER NOT NULL,
order_item INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
item_price DECIMAL(8,2) NOT NULL
)
已有部分数据表,关联数据表,建中间表
代码语言:javascript复制CREATE VIEW ProductCustomers AS
SELECT cust_name, cust_contact, prod_id
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num;
ALTER 更新表结构
ALTER之前需要完成表的备份,因为ALTER的过程是不可逆的。
代码语言:javascript复制#增加一列
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
#删除一列
ALTER TABLE Vendors
DROP COLUMN vend_phone;
DROP 删除表
代码语言:javascript复制DROP TABLE CustCopy;
数据操纵语言
数据操纵语言(DML,Data Manipulation Language):负责数据的操纵,包括查询及增、删、改等操作,SELECT(选择),DELETE(删除),UPDATE(更新),INSERT(插入)四类语法。
SELECT(选择)
SELECT说起来大家都不陌生,它是SQL中最常见的语法,主要用法是从数据表中选择你想要的那几列数据。
代码语言:javascript复制#选择表中的某列
SELECT
prod_name
FROM
Products;
#选择表中的多个列
SELECT prod_id, prod_name, prod_price
FROM Products;
#选择表中的所有列
SELECT
*
FROM
Products;
DELETE(删除)
DELETE删除行,甚至删除所有的行,但是并不删除表本身。如果要快速删除所有行,可以使用TRUNCATE TABLE语句,因为不记录数据变动。下面举几个例子。
1.从表中删除特定的行
下面这个例子是从Customers 这张表中,删除cust_id = '1000000006'的行。
代码语言:javascript复制DELETE FROM Customers
WHERE cust_id = '1000000006';
2.从表中删除所有的行
下面例子删除所有的行,但是并不删除Customers 这张表。
代码语言:javascript复制DELETE FROM Customers
UPDATE(更新)
UPDATE(更新)由三部分组成,分别是要更新的表,列名和他们的新值,确定要更新那些行的过滤条件。
1.更新表中特定的列
代码语言:javascript复制#更新一列
UPDATE Customers
SET cust_email = 'kim@thetoystore.com' WHERE cust_id = '1000000005';
#更新多列
UPDATE Customers
SET cust_contact = 'Sam Roberts',
cust_email = 'sam@toyland.com' WHERE cust_id = '1000000006';
#删除某列
#删除某列可以将该列设为null
UPDATE Customers
SET cust_email = NULL
WHERE cust_id = '1000000005';
2.更新表中所有的行
该示例将Customers表中cust_email列全部更新为'kim@thetoystore.com' 。
代码语言:javascript复制UPDATE Customers
SET cust_email = 'kim@thetoystore.com'
INSERT(插入)
INSERT插入可以在数据表中插入完整的行,插入行的一部分,插入某些查询结果,下面我们将会给出几个例子进行说明。
1.插入完整的行
在Customers这张表中插入一行数据。
代码语言:javascript复制INSERT INTO Customers
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
2.插入行的一部分
在Customers表中插入部分行,cust_contact,cust_email字段没有插入数据。
代码语言:javascript复制INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
3.插入某些查询结果
从CustNew中SELECT出一些结果插入到Customers表中。
代码语言:javascript复制INSERT INTO Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM CustNew;
数据控制语言
数据控制语言(DCL,Data Control Language):负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能,主要语法有GRANT授权,REVOKE取消授权等。大部分情况下,这部分语法主要是提供给数据库工程师以及数仓开发使用的,分析师不太能用到这些语法,所以也不细讲了。
事务控制语
事务控制语言(TCL,Transaction Control Language)包括SAVEPOINT 设置保存点,它是事务处理中设置临时的占位符,可以对它发布回退;ROLLBACK 回滚,撤销指定的SQL语句;COMMIT提交,将未储存的SQL写入数据库表。