DML
DML(Data Manipulation Language,数据操纵语言) 用来查询或者变更表中的记录。DML 包含以下几种指令。
SELECT:查询表中的数据
INSERT:向表中插入新数据
UPDATE:更新表中的数据
DELETE:删除表中的数据
SELECT语句
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
SELECT语句基本语法
SELECT 语句基础格式如下:
-- 列的查询- - - ->查询结果中列的顺序和SELECT子句中的顺序相同.
SELECT <列名1> , <列名2> , ...
FROM <表名> ;
-- 查询全部列- - - ->*表示所有列;此时无法设定列的显示顺序.
-- 实际开发不使用*,会降低性能
SELECT *
FROM <表名> ;
可以使用 AS 关键字为查询的列设置别名:
SELECT <列名1> AS name1 ,
<列名2> AS name2 ,
<列名3> AS name3
FROM <表名> ;
别名可以使用中文,使用中文时需要用双引号 (“) 括起来。
如果需要从结果中删除重复的行,可以使用 DISTINCT 关键字:
SELECT DISTINCT <列名>
FROM <表名> ;
在使用 DISTINCT 时,NULL 也被视为一类数据。NULL 存在于多行中时,也会被合并为一条 NULL数据
最后可以使用LIMIT子句限制返回记录的数量:
-- 返回前n行结果
SELECT <列名>
FROM <表名>
LIMIT n;
-- 从第m行开始返回n行记录(返回结果行号从0开始)
SELECT <列名>
FROM <表名>
LIMIT m,n;
SELECT <列名>
FROM <表名>
LIMIT n OFFSET m;
WHERE子句
在SQL 中,WHERE 子句用于在 SELECT、UPDATE 或 DELETE 语句中指定一个条件,以筛选出满足该条件的数据。WHERE子句的基本语法如下:
SELECT <列名> ,...
FROM <表名>
WHERE <条件表达式> ;
常用运算符
算数运算符:+、-、*、/
注意:所有包含 NULL 的计算,结果肯定是 NULL
比较运算符:
注意:不能对 NULL 使用比较运算符。希望选取 NULL 记录时,需要在条件表达式中使用 IS NULL 运算符。希望选取不是 NULL 的记录时,需要在条件表达式中使用 IS NOT NULL 运算符。
逻辑运算符:
- AND: 与,查询满足全部条件的记录 (AND 运算符优先于 OR 运算符)
- OR: 或,查询满足其中一个条件的记录
- NOT: 非,查询不满足该条件的记录 (NOT 运算符用来否定某一条件,但是不能滥用)
ORDER BY 子句
ORDER BY 关键字用于对结果集进行排序,语法格式如下:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
- ASC: 升序排序 (默认)
- DESC: 降序排序
- 使用多个字段作为排序依据时,排序是分层进行的,即第一优先级排序字段无法排出次序时才对第二优先级排序字段进行排序.
- 使用多个字段作为排序依据时,可以为每个排序字段指定排序顺序
INSERT语句
INSERT 语句用于向表中插入数据,其基本语法如下所示:
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
原则上,执行一次INSERT语句会插入一行数据。对表进行全部列 INSERT 时,可以省略表名后的列清单。
要插入数据,除了使用 VALUES 子句指定具体的数据之外,还可以从其他表中复制数据。
-- 从其他表中复制数据
INSERT INTO <表名> (列1, 列2, 列3, ……) select_statement;
UPDATE语句
单表修改
UPDATE <表名>
SET <列名1> = <表达式1>,<列名2> = <表达式2>,...
WHERE <条件>;
多表修改
-- 多表修改示例
UPDATE shopproduct AS sp INNER JOIN product AS p
ON sp.product_id=p.product_id
SET sp.quantity= 100
WHERE sp.shop_id='000A' AND p.product_id='0001';
DELETE语句
如果想将整个表全部删除,可以使用DROP TABLE语句,如果只想删除表中全部数据,需使用DELETE语句。DELETE语句的删除对象并不是表或者列,而是记录(行)。
DELETE语句的基本语法如下:
DELETE FROM <表名> ;
如果想删除部分数据行,只需在WHERE子句中书写对象数据的条件即可。通过WHERE子句指定删除对象的DELETE语句称为搜索型DELETE语句。
DELETE FROM <表名>
WHERE <条件>;
与 SELECT 语句不同的是,DELETE 语句中不能使用 GROUP BY、HAVING 和 ORDER BY 三类子句,而只能使用WHERE 子句。原因很简单,GROUP BY 和 HAVING 是从表中选取数据时用来改变抽取数据形式的,
而 ORDER BY 是用来指定取得结果显示顺序的。因此,在删除表中数据时它们都起不到什么作用。
TRUNCATE语句
TRUNCATE 用于删除表中的全部数据,不能通过WHERE 子句指定条件来删除部分数据。也正是因为它不能具体地控制删除对象,所以其处理速度比 DELETE 要快得多。实际上,DELETE 语句在 DML 语句中也属于处理时间比较长的,因此需要删除全部数据行时,使用 TRUNCATE 可以缩短执行时间。TRUNCATE语句基本语法如下:
TRUNCATE <表名>;