DDL
操作数据库和表
查看—SHOW DESC
创建—CREATE
修改 —ALTER
删除—DROP
SHOW datebase
DESC student;
查看数据库/表的结构
CREATE datebase
CREATE TABLE 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);
创建数据库/表
ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
ALTER TABLE 表名 CHARACTER SET 字符集名称;
修改数据库结构/表结构
DROP DATABASE 数据库名称
DROP TABLE 表名;
删除数据库/表
DML
增删改表中的数据
DQL
查询表中的数据
SELECT *FROM student2; --查询student2 表中的所有表数据;
DQL排序
SELECT *FROM student2 order by match ASC/DESC;
将student2表中对match数据进行(ASC)升序排序(DESC)降序排序
多重排序
SELECT *FROM student2 order by match ASC ,English DESC;
如果match数据大小相等,则按English的降序排序。
聚合函数
将一列数据作为一个整体进行计算
SELECT COUNT(match) FROM student2;
将student2 中的match数据进行个数计算
COUNT计算个数
MAX最大值
MIN最小值
SUM计算和
AVG计算平均数
聚合函数的计算会排除null值
解决:
SELECT COUNT(IFNULL(match,0)) FROM student2;
SELECT COUNT(*) FROM student2;
只要有一列的值不为null就算进去
分组查询
SELECT sex ,AVG(math) FROM student2 GROUP BY sex;
查询sex表 然后按sex分组,最后再将分组的查询出match的平均值
SELECT sex ,AVG(math) FROM student2 WHERE math>70 GROUP BY sex;
查询sex表 ,将分数大于70的进行按sex分组,最后再将分组的查询出match的平均值
SELECT sex ,AVG(math) ,COUNT(id) FROM student2 GROUP BY sex HAVING COUNT(id)>2;
查询sex表 ,将分数大于70的进行按sex分组,最后再将分组的查询出match的平均值,分完组再进行count(id)是否大于2的判断。
where和having的区别
1.where是在分组前进行判断,如果不满足,不进行分组,having是在分组后进行判断,如果不满足,查询不出来
2.where不可以跟聚合函数 having可以
分页查询
SELECT *FROM student2 LIMIT 0,3;
语法:LIMIT 开始的索引,每页查询的个数
查询student2表然后从0开始查询3条记录
公式:开始的索引=(当前页面-1)*每页的条数
约束
- 非空约束
- 唯一约束
- 主键约束
- 外键约束
非空约束
NOT NULL
使用该约束表中列的值就不能为空了
CREATE TABLE yue1(
id INT UNIQUE,
NAME VARCHAR(20) NOT NULL
);
创建一个非空约束的表yue
ALTER TABLE yue MODIFY NAME VARCHAR(20);
删除非空约束
ALTER TABLE yue MODIFY NAME VARCHAR(20) NOT NULL;
添加非空约束
唯一约束
UNIQUE
使用该约束列中的数据就有且只能有一个,但null不属于唯一,因为他是不确定的
CREATE TABLE yue2(
id INT UNIQUE,
NAME VARCHAR(20) UNIQUE
);
创建唯一约束
ALTER TABLE yue2 DROP INDEX NAME;
ALTER TABLE yue MODIFY NAME VARCHAR(20) UNIQUE;
主键约束
PRIMARY KEY
使用该约束 非空且唯一,一般在id列使用
CREATE TABLE yue3(
id INT UNIQUE PRIMARY KEY,
NAME VARCHAR(20)
);
ALTER TABLE yue3 DROP PRIMARY KEY;
ALTER TABLE yue3 MODIFY id INT PRIMARY KEY;
外键约束
使用该约束就可以使得本表中的一列数据与其他表中的数据进行关联
CONSTRAINT 外键名(自定义) FOREIGN KEY (列名) REFERENCES 关联的表名(列名)
CREATE TABLE employe(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
dropid INT ,
CONSTRAINT emp FOREIGN KEY (dropid) REFERENCES drops(id)
);
INSERT INTO employe VALUE(NULL,"张三",1),(NULL,"li",1),(NULL,"wang",2);
CREATE TABLE drops(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
addlist VARCHAR(10)
);
SELECT *FROM employe;
INSERT INTO drops VALUE(NULL,"研发部","深圳"),(NULL,"销售部","深圳");
ALTER TABLE employe DROP FOREIGN KEY emp;
ALTER TABLE employe ADD CONSTRAINT emp FOREIGN KEY (dropid) REFERENCES drops(id);
- 自动增长auto
- 一般在主键上添加自动增长即可输入为null自动填充下一个数字,只能是int
- 也可以手动填充
CREATE TABLE yue4(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
ALTER TABLE yue4 MODIFY id INT;
ALTER TABLE yue4 MODIFY id INT AUTO_INCREMENT;
- 外键的联级操作
- 可以讲外键和本列关联,外键的值改变,本列也会同样该写
ALTER TABLE employe ADD CONSTRAINT emp FOREIGN KEY (dropid) REFERENCES drops(id) ON UPDATE CASCADE;