mysql练习3

2021-06-30 22:24发布

CREATE DATABASE gjp CHARSET "utf8";


CREATE TABLE gjp_sort(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(100),

parent VARCHAR(100),

sdesc VARCHAR(10000)

);


CREATE TABLE gjp_ledger(

lid INT PRIMARY KEY AUTO_INCREMENT,

parent VARCHAR(100),

money DOUBLE,

sid INT,

account VARCHAR(100),

createtime DATE,

ldesc VARCHAR(1000)

);


ALTER TABLE gjp_ledger CHANGE idesc ldesc VARCHAR(1000);



#需求4.1:统计gjp_ledger表有多少条数据

SELECT COUNT(*) FROM gjp_ledger;


#需求4.2:统计工商银行的内容有多少条

SELECT COUNT(account) FROM gjp_ledger WHERE account = "工商银行";


#需求4.3:统计账务表中金额大于3000的有多少条记录

SELECT COUNT(money) FROM gjp_ledger WHERE money > 3000;



#需求4.4:查询账务表,求出money字段的和

SELECT SUM(money) FROM gjp_ledger;


#需求4.5:查询账务表,统计所有支出的金额总和

SELECT SUM(money) FROM gjp_ledger WHERE parent = "支出";



#需求4.6:查询账务表,统计出 支出中的最大值 和 收入中的最小值

SELECT MAX(money) FROM gjp_ledger WHERE parent = "支出";

SELECT MIN(money) FROM gjp_ledger WHERE parent = "收入";


#需求4.7:查询账务表,计算出,所有支出的平均数

SELECT AVG(money) FROM gjp_ledger WHERE parent = "支出";


#需求4.8:查询账务表,使用money字段,进行升序排序 

SELECT * FROM gjp_ledger ORDER BY money ASC;


#需求4.9:查询账务表,使用createtime字段,进行降序排序 

SELECT * FROM gjp_ledger ORDER BY createtime DESC;



#需求5.1:查询出,支出的共计多少钱,收入的共计多少钱

SELECT parent,SUM(money) FROM gjp_ledger GROUP BY parent;



#需求5.2:查询出,所有的金额总和,先按照支出和收入分类,再按照银行的类型分。

SELECT parent,account,SUM(money) FROM gjp_ledger GROUP BY parent ASC,account ASC;


#需求5.3:查询出,支出的共计多少钱,收入的共计多少钱, 只显示大于20000元的

SELECT parent,SUM(money) s FROM gjp_ledger GROUP BY parent HAVING s >20000;


/*

作业2

*/

#1.返回员工信息以及员工所在的部门名称和部门地址。

SELECT e.* ,d.dname,d.loc FROM emp e INNER JOIN dept d ON e.deptno = d.DEPTNO;


#2.工资水平多于smith的员工信息。

SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = "smith");


#3.返回员工和所属经理的姓名。

SELECT e.ename,f.ename FROM emp e LEFT JOIN emp f ON e.mgr = f.EMPNO ;


#4.返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名

SELECT e.ename,e.HIREDATE,f.ename,f.HIREDATE FROM emp e INNER JOIN emp f ON e.MGR = f.EMPNO AND e.HIREDATE < f.HIREDATE;


#5.返回员工姓名及其所在的部门名称。

SELECT e.ename,d.dname FROM emp e INNER JOIN dept d ON e.deptno = d.deptno;


#6.返回从事clerk工作的员工姓名和所在部门名称。

SELECT e.ename,e.job,d.dname FROM emp e INNER JOIN dept d ON e.deptno = d.deptno AND e.job = "clerk";


#7.返回部门号及其本部门的最低工资。

SELECT deptno,MIN(sal) FROM emp GROUP BY deptno;


#8.返回销售部(sales)所有员工的姓名。

SELECT ename FROM emp e INNER JOIN dept d ON e.DEPTNO = d.DEPTNO AND d.dname = "sales";


#9.返回工资水平多于平均工资的员工。

SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp) ;


#10.返回与30部门员工工资水平相同的员工姓名与工资。

SELECT ename,sal FROM emp WHERE deptno != 30 AND sal = ANY(SELECT sal FROM emp WHERE deptno = 30);


#11.返回工资高于30部门所有员工工资水平的员工信息。

SELECT * FROM emp WHERE deptno != 30 AND sal > ALL(SELECT sal FROM emp WHERE deptno = 30);


#12.返回部门号、部门名、部门所在位置及其每个部门的员工总数。

SELECT d.DEPTNO,d.DNAME,d.LOC,COUNT(e.ename) 员工数 FROM dept d INNER JOIN emp e ON d.DEPTNO = e.DEPTNO GROUP BY e.DEPTNO;



#13.返回员工的姓名、所在部门名及其工资。

SELECT e.ename,d.dname,e.sal FROM emp e INNER JOIN dept d ON e.DEPTNO = d.DEPTNO;