MySql语句的基本使用(二)

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%';

猜你喜欢

转载自blog.csdn.net/X_fighting/article/details/82355467