mysql的基本语句
常用的聚合函数
* COUNT(列名) -- 求个数
* MAX(列名) -- 求最大值
* MIN(列名) -- 求最小值
* SUM(列名) -- 求和
* AVG(列名) -- 求平均值
* 注意事项:聚合函数排除为null的列
* 解决方案:函数IFNULL(列名,0)
* -- 查询学生表中英语成绩总数
* SELECT SUM(IFNULL(英语成绩,0)) FROM 学生表;
分组(GROUP BY)
* GROUP BY 分组的字段
* -- 按性别统计人数
* SELECT 性别,COUNT(主键id) FROM 学生表 GROUP BY 性别;
* Having(对分组后的结果进行筛选)
* -- 从学生表中查询成绩大于80分的人,要求最后显示的结果中人数大于2
* SELECT COUNT(主键id) FROM 学生表 WHERE 成绩>80 GROUP BY 性别 HAVING COUNT(主键ID)>2;
分页查询(LIMIT) mysql数据库专属
*LIMIT 起始位置,每页条数 -- (起始位置 = (当前页数-1)*每页条数)
*-- 每页条数为5 在第二页的写法
*SELECT *FROM 表名称 LIMIT 5,5;
约束条件
1.非空约束 NOT NULL
-- 不能添加为空的数据
CREATE TABLE 表名称 (列名1 数据类型1,列名2 数据类型2 NOT NULL);
-- 创建好表之后,在添加非空约束
ALTER TABLE 表名称 MODIFY 列名称 数据类型 NOT NULL;
-- 删除非空约束
ALTER TABLE 表名称 MODIFY 列名称 数据类型;
2.唯一约束 UNIQUE
-- 不能添加重复的数据,NULL只能有一个
CREATE TABLE 表名称 (列名1 数据类型1,列名2 数据类型2 UNIQUE);
-- 先创建好表,在添加唯一约束(条件:不能有重复的值)
ALTER TABLE 表名称 MODIFY 列名称 数据类型 UNIQUE;
-- 删除唯一约束
ALTER TABLE 表名称 DROP INDEX 列名称;
3.主键约束 PRIMARY KEY
* AUTO_INCREMENT --根据上一行的数据进行自动增长
*
-- 非空并且唯一,而且在一张表当中只能有一个主键
CREATE TABLE 表名称 (列名1 数据类型1 PRIMARY KEY AUTO_INCREMENT,列名2 数据类型2);
-- 创建好表之后,在添加主键
ALTER TABLE 表名称 MODIFY 列名称 数据类型 PRIMARY KEY AUTO_INCREMENT;
-- 删除主键约束
ALTER TABLE 表名称 DROP PRIMARY KEY;
-- 删除自动增长
ALTER TABLE 表名称 MODIFY 自动增长的列名称 自动增长的数据类型 ;
4.外键约束 FOREIGN KEY
* 让两个表之间产生关联,自己表的"外键"连上别人表的"主键"
*
-- 创建表的时候,添加外键约束
CREATE TABLE 表名称(
列名1 数据类型1,
列名2 数据类型2,
CONSTRAINT 外键别名 FOREIGN KEY (外键列名称) REFERENCES 其他表名称(其他表主键)
);
-- 表创建完毕之后,再添加外键约束
ALTER TABLE 表名称 ADD CONSTRAINT 外键别名 FOREIGN KEY (外键列名称) REFERENCES 其他表名称(其他表主键);
-- 删除外键约束
ALTER TABLE 表名称 DROP FOREIGN KEY 外键别名;
数据库备份与恢复
*命令行备份和还原
*备份数据库
mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
*还原数据库
*登录数据库
*创建数据库
*使用数据库
*执行文件 source 文件路径
MySql语句的简单使用
-- 创建表
CREATE TABLE employee_test(
id INT(11) ,
NAME VARCHAR(20),
sex VARCHAR(10),
birthday DATE ,
salary FLOAT(10,2) , -- 薪水
bonus FLOAT(10,2) , -- 奖金
department VARCHAR(20), -- 部门
RESUME VARCHAR(200) -- 简介
);
-- 添加数据
INSERT INTO employee_test VALUES
(1,'zhangsan','male','1980-11-25',2000,100,'总裁办','good body'),
(2,'lisi','male','1980-04-25',1000,200,'研发部','good body'),
(3,'xiaohong','female','1978-11-25',4000,100,'财务部','good girl'),
(4,'wangwu','male','1981-01-25',4000,400,'人事部','good body'),
(5,'zhaoliu','male','1978-12-25',2000,NULL,'人事部','good body'),
(6,'tianqi','female','1998-05-25',2000,100,'人事部','good girl'),
(7,'renba','male','1968-10-25',3000,500,'财务部','good body');
-- 1. 查询表中所有员工的信息。
SELECT *FROM employee_test ;
-- 2. 查询表中所有员工的姓名和对应的薪水。
SELECT NAME,salary FROM employee_test;
-- 3. 使用汉语展示员工信息。(列名翻译成中文展示)
SELECT id 编号,NAME 姓名,sex 性别,birthday 生日,salary 薪水,bonus 奖金 ,department 部门, RESUME 简介 FROM employee_test;
-- 4. 查询姓名为zhangsan的员工的薪水
SELECT salary FROM employee_test WHERE NAME='zhangsan';
-- 5. 查询姓名为zhangsan的员工的总收入
SELECT salary+bonus 总收入 FROM employee_test WHERE NAME = 'zhangsan';
-- 6. 查询薪水大于3000的员工信息
SELECT *FROM employee_test WHERE salary>=3000;
-- 7. 查询总收入大于4000的员工的姓名 部门 薪水 奖金
SELECT NAME,department,salary,bonus FROM employee_test WHERE salary+bonus>4000;
-- 8. 查询80后的员工
SELECT *FROM employee_test WHERE birthday BETWEEN '1980-01-01' AND '1990-01-01';
-- 9. 查询所有女性薪水大于4000的员工
SELECT *FROM employee_test WHERE salary>=4000 AND sex = 'male';
-- 10. 查询所有女性薪水大于4000的员工按薪水降序排列
SELECT *FROM employee_test WHERE salary>=4000 AND sex = 'male' ORDER BY salary DESC;
-- 11. 查询各个部门员工数量
SELECT department,COUNT(id) FROM employee_test GROUP BY department;
-- 12. 查询各个部门的员工数量及薪水支出
SELECT department,COUNT(id),SUM(salary) 薪水支出 FROM employee_test GROUP BY department;
-- 13. 查询各个部门的员工数量及总支出
SELECT department,COUNT(id),SUM(salary+bonus) 总支出 FROM employee_test GROUP BY department;
-- 14. 查询公司男性和女性的数量
SELECT sex,COUNT(sex) FROM employee_test GROUP BY sex;
-- 15. 查询公司男性员工和女性员工的收入总和
SELECT sex,SUM(salary+bonus) FROM employee_test GROUP BY sex;
-- 16. 查询公司中男性员工的收入总和
SELECT sex,SUM(salary+bonus) 收入总和 FROM employee_test WHERE sex='female';
-- 17. 查询公司中总支出大于2000的部门
SELECT department,SUM(salary+bonus) FROM employee_test WHERE salary + bonus >2000 GROUP BY department;
-- 18. 查询公司中所有zhang姓员工的平均工资
SELECT AVG(salary) FROM employee_test WHERE NAME LIKE 'zhang%';
-- 19. 查询公司中zhang姓员工的工资总和
SELECT SUM(salary) FROM employee_test WHERE NAME LIKE 'zhang%';
-- 20. 查询公司中zhang姓员工的总收入
SELECT SUM(salary+bonus) 总收入 FROM employee_test WHERE NAME LIKE 'zhang%';