SQL分类
SQL语句主要可以划分为3个类别。
- DML(数据操作语句):用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用关键字有 insert、update、delete和select等。
- DDL(数据定义语句):用于定义了不同的数据段、数据库、表、列、索引等数据库对象。常用关键字有create、alter、drop、truncate等。
- DCL(数据控制语句):用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的关键字有grant、revoke等。
DDL语句
用于定义了不同的数据段、数据库、表、列、索引等数据库对象
创建数据库
创建数据库
CREATE DATABASE dbname;
显示所有数据库
SHOW DATABASES;
选择要操作的数据库
USE dbname;
显示一个数据库的所有表
SHOW TABLES;
删除数据库
DROP DATABASE dbname;
创建表
创建表语句
CREATE TABLE tablename(
column_name_1 column_type_1 constraints, # column_name是列的名字
column_name_1 column_type_1 constraints, # column_type是列的数据类型
...
column_name_1 column_type_1 constraints # constraints是列的约束条件
);
查看表的定义
DESC tablename;
删除表
DROP TABLE tablename;
修改表
- 修改表类型
ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST|AFTER col_name];
例如将student表的name字段类型由varchar(10)改为varchar(20)
ALTER TABLE student MODIFY name varchar(20);
- 增加表字段
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST|AFTER col_name];
例如在student表增加一个sex字段,类型为varchar(2)
ALTER TABLE student ADD column sex varchar(2);
- 删除表字段
ALTER TABLE tablename DROP [COLUMN] col_name;
例如删除刚刚的sex
ALTER TABLE student DROP COLUMN sex;
- 字段改名
ALTER TABLE tablename CHANGE [COLUMN] old_name column_definition [FIRST|AFTER col_name];
例如
ALTER TABLE student CHANGE name student_name varchar(20);
- 修改字段排序顺序
增加一个字段放在最前面
ALTER TABLE student ADD age int(4) FIRST;
增加一个字段放在name前面
ALTER TABLE student ADD age int(4) AFTER name;
- 更改表名
ALTER TABLE tablename RENAME [TO] new_tablename;
DML语句
用于添加、删除、更新和查询数据库记录,并检查数据完整性。
插入记录
INSERT INTO tablename(field1, field2, ..., fieldn) VALUES(value1, value2, ..., valuen);
也可以一次插入多条记录
INSERT INTO tablename(field1, field2, ..., fieldn)
VALUES
(record1_value1, record1_value2, ..., record1_valuen),
(record2_value1, record2_value2, ..., record2_valuen),
...
(recordn_value1, recordn_value2, ..., recordn_valuen)
;
更新记录
UPDATE tablename SET field1 = value1, field2 = value2, ..., fieldn = valuen [WHERE CONDITION];
更新多个表中的数据
UPDATE t1, t2, ..., tn SET t1.field1 = expr1, tn.fieldn = exprn [WHERE CONDITION];
删除记录
DELETE FROM tablename [WHERE CONDITION];
删除多个表中的记录
DELETE t1, t2, ..., tn FROM t1, t2, ..., tn [WHERE CONDITION];
查询记录
最基本的查询
SELECT * FROM tablename [WHERE CONDITION]; # *表示查找所有,也可以查找特定的字段
- 查找不重复的记录,利用
DISTINCT
关键字
SELECT DISTINCT name FROM student;
- 条件查询,利用
WHERE
关键字
SELECT * FROM WHERE name = 'zheng';
- 排序与限制
SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC], field2 [DESC|ASC],..., fieldn [DESC|ASC]];
# 数据库的排序操作可以用关键字ORDER BY实现
# DESC和ASC是排序顺序关键字,DESC表示按照字段进行降序排序,ASC则表示升序排序,默认为升序
排序后若只想显示一部分,则可以用LIMIT
关键字实现
SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC], field2 [DESC|ASC],..., fieldn [DESC|ASC]] [LIMIT offset_start, row_count];
- 聚合
# 一般用于汇总查询
SELECT [field1, field2, ..., fieldn] fun_name
FROM tablename
[WHERE CONDITION] # 聚合前过滤
[GROUP BY field1, field2, ..., fieldn
[WITH ROLLUP]]
[HAVING CONDITION]; # 聚合后过滤
# fun_name表示要做的聚合操作,也就是聚合函数,常用的有SUM(求和)、COUNT(*)(记录数)、max(最大值)、min(最小值)。
# GROUP BY关键字表示要进行分类聚合的字段,比如按照班级分类统计学生数量,班级就应该写在GROUP BY后面。
# WITH ROLLUP是可选语法,标明是否对分类聚合后的结果进行再汇总。
# HAVING关键字表示对分类后的结果再进行条件的过滤。
- 子查询
进行查询时,需要的条件是另外一个SELECT语句的结果,这个时候就要用到子查询,主要的关键字有IN、NOT IN、 =、 !=、EXISTS、NOT EXISTS等。
- 记录联合
# 将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候就需要用到UNION和UNION ALL关键字。
SELECT * FROM t1
UNION|UNION ALL
SELECT * FROM t2
UNION|UNION ALL
...
SELECT * FROM tn
# UNION ALL是把结果集直接合并在一起,而UNION是将UNION ALL后的结果进行一次DISTINCT去重。
参考书籍:《深入浅出MySQL》