**①单表查询:
1.排序
*ASC升序/DESC降序=>SELECT * FROM 表名 ORDER BY 字段 ASC|DESC
2.聚合
*count:统计指定列记录数,记录为NULL的不统计
例:SELECT COUNT(*) FROM student; -- 哪列最多返回哪列
*sum:计算指定列的数值和,如果不是数值类型,那么计算结果为0
例:SELECT SUM(math) FROM student;
*max:计算指定列的最大值,如果是字符串类型,那么使用字符串排序运算
例:SELECT MAX(math) FROM student;
*min:计算指定列的最小值
例:SELECT MIN(math) FROM student;
*avg:计算指定列的平均值,如果不是数值类型,那么计算结果为0
例:SELECT AVG(math) FROM student;
3.分组
*将分组字段结果中不同内容作为一组
例:SELECT * FROM student GROUP BY sex;#只显示男和女两列
*SELECT MAX(age), COUNT(sex), sex FROM student GROUP BY sex;#显示男和女的平均分、条数、性别
4.Having:
having与where的区别
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数
代码例示:
#1 按性别分组
SELECT sex FROM student GROUP BY sex;
#2 查询男女各多少人
-- 分成男女2组, 分别统计每组人数
SELECT sex, COUNT(*) 总数 FROM student GROUP BY sex;
#3 查询男女各多少人,并且查出每组的最大年龄
SELECT sex, COUNT(*), MAX(age) FROM student GROUP BY sex;
#4 查询每种性别各多少人,并只显示性别人数>1的数据
SELECT sex, COUNT(*) FROM student GROUP BY sex HAVING COUNT(*) > 1;
# 查询年龄大于30岁的人,按性别分组,统计每组的人数, 并只显示性别人数>1的数据
SELECT sex, COUNT(*) FROM student WHERE age > 30 GROUP BY sex HAVING COUNT(*) >
**②数据库还原与备份
1.备份数据库:语法格式(没有登录mysq的情况下):mysqldump -u用户名 -p密码 -B 数据库 > 文件的路径;
2.语法格式(没有登录mysq的情况下):mysql -u用户名 -p密码 < 文件的路径;
**③SQL约束
1.分类:
*DEFAULT:默认值约束#address VARCHAR(50) DEFAULT '广州'#默认值就是广州
*NOT NULL: 不为空约束#NAME VARCHAR(10) NOT NULL,
*UNIQUE: 唯一约束#NAME VARCHAR(10) UNIQUE
*PRIMARY KEY: 主键约束
*FOREIGN KEY: 外键约束
*AUTO_INCREMENT:自动增长#id INT PRIMARY KEY AUTO_INCREMENT,
**④多表操作(重点,以后工作常用)
1.外键约束:一个表中的字段,引用另一表中的主键
2.新建表时添加外键约束步骤:
主表: 约束别人, 表结构不变
副表/从表: 被别人约束,修改表结构添加外键约束
DROP TABLE employee;
CREATE TABLE employee (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
age INT,
dep_id INT,
-- 添加外键约束
-- CONSTRAINT: 添加约束
-- fk_emp_dep 外键名称
-- FOREIGN KEY(dep_id) 添加外键
-- dep_id哪个字段作为外键
-- REFERENCES 外键参照
-- department(id) 外键是哪张表的那个字段#department是一个表名
CONSTRAINT fk_emp_dep FOREIGN KEY(dep_id) REFERENCES department(id)
);
3.删除外键约束
*alter table 从表 drop foreign key 外键名称;
例:ALTER TABLE employee DROP FOREIGN KEY fk_emp_dep;