DDL 语句:
创建数据库
CREATE DATABASE database_name;
查看系统中有哪些数据库
SHOW DATABASES;
选择要操作的数据库
USE database_name;
查看数据库中有哪些数据表
SHOW TABLES;
删除数据库
DROP DATABASE database_name;
注意:数据库删除后,下面的所有表数据都会全部删除,所以删除前一定要仔细检查做好相应的备份。
创建表
CREATE TABLE table_name(
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
....
column_name_n column_type_n constraints,
);
其中: cloumn_name 表示列名称,column_type 是列的数据类型,constraints 是列的约束条件。
查看表的定义
DESC table_name;
查看创建表的 SQL 语句
SHOW CREATE TABLE table_name \G;
其中 “\G” 选项的含义是使得记录能够按照字段竖向排列,便于显示内容较长的记录。
删除表
DROP TABLE table_name;
修改表
1. 修改表类型
ALTER TABLE table_name MODIFY [COLUMN] cloumn_definition [FIRST | AFTER col_name];
eg: ALTER TABLE emp MODIFY ename varchar(20);
2. 增加表字段
ALTER TABLE table_name ADD [COLUMN] column_difinition [FIRST|AFTER col_name];
eg: ALTER TABLE emp ADD age int(3);
3. 删除表字段
ALTER TABLE table_name DROP [COLUMN] col_name;
eg: ALTER TABLE emp DROP age;
4. 字段改名
ALTER TABLE table_name CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name];
eg: ALTER TABLE emp CHAGE age age1 int(4);
注意: change 和 modify 都可以修改表的定义,不同的是:
change 后面需要些两次列名,可以修改列名称。
modify 只能修改列的属性,不能修改列的名称。
5. 修改字段排列顺序
字段增加(ADD) 和 字段修改(CHANGE/MODIFY) 都有一个可选项 first|after col_name, 这个选项可以用来修改字段在表中的位置。
ADD 增加的新字段默认是加在表的最后位置,而 CHANGE/MODIFY 默认都不会改变字段的位置。
eg: ALTER TABLE emp ADD birth date after ename;
eg: ALTER TABLE emp MODIFY age int(3) first;
6. 更改表名
ALTER TABLE table_name RENAME [TO] new_table_name;
DML 语句
插入记录
插入指定列
INSERT INTO table_name (field1, field2,...fieldn) VALUES(value1, value2,...valuen);
插入所有列
INSERT INTO table_name VALUES (,,,,);
一次插入多行
INSERT INTO table_name VALUES
(val1,val2……),
(val1,val2……),
(val1,val2……);
注意:可以 指定字段名称,也可不指定字段名称。如果不指定字段名称 VALUES 后面的顺序应该和字段的排列顺序一致。
从一个表的数据全部插入另外一个表
INSERT INTO `arc_test`
SELECT * FROM `arc`
where
`date_added`>= '2018-05-01 00:00:00'
and
`date_added` < '2018-08-01 00:00:00' ;
更新记录
UPDATE table_name
SET
field1=value1, field2=value2,....,fieldn=valuen
[WHERE CONDITION]
同时更新多个表中数据
UPDATE T1,T2,....,TN SET T1.field1=expr1, tn.fieldn=exprn [WHERE CONDITION];
eg: UPdate emp a, dept b SET a.sal=a.sal*b.deptno,b.deptname=a.ename WHERE a.deptno=b.deptno;
注意:多表更新的语法更多的用在了根据一个表的字段来动态地更新另外一个表的字段。
通过连接更新某个表中的一个字段
UPDATE `arc`
LEFT JOIN `arc_back`
ON arc.`id`= arc_back.`id`
SET arc.`date_added` = arc_back.`delivery_date`
WHERE
arc.`delivery_date` >= '2018-05-01 00:00:00'
AND
arc.`delivery_date`<'2018-12-01 00:00:00';
删除记录
DELETE FROM table_name [WHERE CONDITION];
注意:如果不加 where 条件将会把表中的所有记录删除,操作时一定要小心。
查询记录
SELECT * FROM table_name [WHERE CONDITION];
其中 “*” 表示要将所有的记录都选出来,也可以用逗号分割所有字段来代替。
查询不重复的记录:有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现:
select distinct deptno from emp;
条件查询:
SELECT * FROM
table_name
[WHERE CONDITION];
where 后面的字段是一个字段的 比较 或是逻辑运费的多条件联合查询。
排序和限制
SELECT * FROM
table_name
[WHERE CONDITION]
[ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],fieldn [DESC|ASC]];
DESC 和 ASC 是排序关键字, DESC 表示按照字段进行降序排序
ASC 则表示升序排序,如果不写此关键字默认是升序排序。
ORDER BY 后面可以跟多个不同的排序字段,并且每个排序字段可以有不同的排序顺序。如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,以此类推。如果只有一个排序字段,则这些字段瞎弄的记录将会无序
SELECT......[LIMIT offset_start, row_count]
offset_start 表示记录的起始偏移量, row_count 表示显示的行数。
默认情况下,起始偏移量为 0 ,只需要写记录行数就可以。
LIMIT 经常和 ORDER BY 一起配合使用来进行记录的分页显示。
聚合
SELECT [fild1,field2,...fieldn] fun_name
FROM table_name
[WHERE CONDITION]
[GOUP BY field1,field2,....,fieldn]
[WITH ROLLUP]
[HAVING CONDITION]
fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(),count(*),max(),ming().
GROUP BY 关键字表示要进行分类聚合的字段。
WITH ROLLUP 是可选语法,表示是否对分类聚合后的结果进行再汇总。
HAVING 表示对分类后的结果再进行条件的过滤。
注意: having 和 where 的区别在于,having 是对聚合后的结果进行条件的过滤,而whereshi zai
聚合前就对记录进行过滤,如果逻辑允许,尽可能用 where 先过滤记录,最后在根据逻辑看是否用 having 进行再过滤。