Java——MySQL数据库编程练习

Day18——数据库编程
员工表emp:员工编号,姓名,工作职位,雇佣日期,工资,奖金,部门
部门表dept:部门编号,名称,部门领导

员工数据:
1001,’张三’,’销售’,’1999-12-1’,3000.0,1100.0,’102’
1002,’李四’,’研发员’,’1998-2-11’,3500.0,null,’101’
1003,’王五’,’研发员’,’2001-1-15’,4000.0,null,’101’
1004,’赵六’,’美工’,’2001-12-1’,4000.0,null,’101’
1005,’武六奇’,’研发员’,’2001-7-1’,5500.0,null,’101’
1006,’齐八九’,’销售’,’2001-6-16’,3000.0,1500.0,’102’
1007,’钱多多’,’经理’,’2009-11-10’,6500.0,2000.0,’102’
1008,’张一一’,’销售’,’2007-12-10’,3800.0,1000.0,’102’
1009,’李丽丽’,’研发员’,’1999-8-19’,4500.0,null,’101’
1010,’王旺旺’,’销售’,’1999-9-1’,3600.0,1600.0,’102’
1011,’赵有才’,’经理’,’1999-4-30’,7000.0,1800.0,’101’
1012,’李雷’,’出纳’,’2007-10-10’,5000.0,500.0,’103’
1013,’韩梅’,’会计’,’2005-3-1’,6600.0,1000.0,’103’
1014,’张向阳’,’经理’,’2002-6-1’,7000.0,1500.0,’103’
1015,’李向东’,’销售’,’2004-5-1’,4300.0,1000.0,’102’

部门数据:
‘101’,’研发部’,1007
‘102’,’销售部’,1011
‘103’,’财务部’,1014

1、查询员工姓名及所做工作

SELECT ename,title FROM emp;

2、查询员工姓名及年薪

SELECT ename,salary*12 AS '年薪' FROM emp;

3、查询工资大于4000的员工信息

SELECT * FROM emp WHERE salary>4000;

4、查询年薪大于20000的员工信息

SELECT * FROM emp WHERE salary*12>20000;

5、查询没有奖金的员工

SELECT eid,ename,bonus FROM emp WHERE bonus IS NULL;

6、查询工资大于3000同时有奖金的员工信息

SELECT * FROM emp WHERE salary>2000 AND bonus IS NOT NULL;

7、查询工资大于3500但是小于5000的员工信息

SELECT * FROM emp WHERE salary BETWEEN 3500 AND 5000;

8、查询编号是1001、1003、1004的员工信息

SELECT * FROM emp WHERE eid IN(1001,1003,1004);

9、查询编号不是1001、1003、1004的员工信息

SELECT * FROM emp WHERE eid NOT IN(1001,1003,1004);

10、查询员工姓名是3个字的员工信息

SELECT  * FROM emp WHERE ename LIKE'___';

11、查询姓张的员工信息

SELECT * FROM emp WHERE ename LIKE'张%';

12、查询出在99年雇佣的员工信息

SELECT * FROM emp WHERE hiretime LIKE'%999%';

13、查询出员工工资没有包含6和8的员工信息

SELECT * FROM emp WHERE salary NOT LIKE'%6%'AND SALARY NOT LIKE'%8%';

14、按照工资由高到低查询员工信息

SELECT * FROM emp ORDER BY salary desc;

15、要求查询出101部门的所有雇员信息,查询的信息按照工资由高到低排序,如果工资相等,则按照雇佣日期由早到晚排序。

SELECT * FROM emp WHERE depart='101' ORDER BY salary DESC,hire ASC;

16、查询101部门有多少员工,每月发多少工资

SELECT depart,COUNT(eid) AS '员工数',AVG(salary) AS '平均工资'
FROM emp WHERE depart=101 GROUP BY depart;

17、查询101部门的所有员工信息,并显示所在部门名称

SELECT emp.eid,ename,title,hiretime,salary,bonus,depart,dept.dname AS '部门名称'
FROM emp,dept
WHERE emp.depart=dept.did;

18、查询1001员工的部门领导信息

SELECT * FROM emp WHERE eid=(
    SELECT leader FROM dept
    WHERE did='101' );

19、查询部门员工数量,平均工资,最低工资及最低工资的员工姓名

SELECT depart,COUNT(eid)'员工数量',AVG(salary)'平均工资',MIN(salary)'最低工资',ename
FROM emp GROUP BY depart;

20、查询所有部门领导的信息,并统计领导的员工数量及总工资,统计中不包含领导及领导的工资

SELECT * FROM emp WHERE EXISTS(SELECT * FROM dept WHERE leader=emp.eid AND leader!=0);
SELECT depart,COUNT(eid)'员工数量',SUM(salary)'总工资' FROM emp GROUP BY depart;

经过夜里一位高人指点,得以领悟,修改如下:

SELECT l.*,c.num,c.工资 
 FROM(SELECT e.* FROM emp e INNER JOIN dept d ON e.eid = d.leader) l
  INNER JOIN (SELECT depart,COUNT(IF(title='经理',null,salary)) AS num,
  SUM(IF(title='经理',0,salary)) AS '工资' FROM emp GROUP BY depart)c 
   ON l.depart = c.depart;

代码部分

我在eclipse里没有显示,把表创建完之后在MySQL的unicode里操作,都出结果了。
最后一题我分开查有结果,还没想出合为一句的方法,如果您有解决方案,敬请指教。

//连接数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class WorkJDBC {
    public static void main(String[] args) {
        connSQLServer();
    }

    public static void connSQLServer() {
        String url = "jdbc:mysql://localhost:3306/student";//连接数据库的地址
        String user = "root";
        String password = "1234";
        try {
            Class.forName("com.mysql.jdbc.Driver");// 数据库厂家提供的驱动程序,就是一个实现了jdbc标准的类
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println(conn);
            // String sql = "create table emp(eid int,ename char(40),title
            // varchar(20)," + "hiretime date,salary float,bonus float,depart varchar(10))";//创建emp表

            // String sql = "create table dept(did varchar(10),dnamechar(40),leader int);";//创建dept表

        //添加员工表的数据
            String sql = "insert into emp(eid,ename,title,hiretime,salary,bonus,depart) values"
                    + "(1001,'张三','销售','1999-12-1',3000.0,1100.0,'102'),"
                    + "(1002,'李四','研发员','1998-02-11',3500.0,null,'101'),"
                    + "(1003,'王五','研发员','2001-01-15',4000.0,null,'101'),"
                    + "(1004,'赵六','美工','2001-12-1',4000.0,null,'101'),"
                    + "(1005,'武六奇','研发员','2001-7-1',5500.0,null,'101'),"
                    + "(1006,'齐八九','销售','2001-6-16',3000.0,1500.0,'102'),"
                    + "(1007,'钱多多','经理','2009-11-10',6500.0,2000.0,'102'),"
                    + "(1008,'张一一','销售','2007-12-10',3800.0,1000.0,'102'),"
                    + "(1009,'李丽丽','研发员','1999-8-19',4500.0,null,'101'),"
                    + "(1010,'王旺旺','销售','1999-9-1',3600.0,1600.0,'102'),"
                    + "(1011,'赵有才','经理','1999-4-30',7000.0,1800.0,'101'),"
                    + "(1012,'李雷','出纳','2007-10-10',5000.0,500.0,'103'),"
                    + "(1013,'韩梅','会计','2005-3-1',6600.0,1000.0,'103'),"
                    + "(1014,'张向阳','经理','2002-6-1',7000.0,1500.0,'103'),"
                    + "(1015,'李向东','销售','2004-5-1',4300.0,1000.0,'102')";

        //添加部门表的数据
            // String sql="insert into dept(did,dname,leader) values"
            // + "('101','研发部',1007),"
            // + "('102','销售部',1011),"
            // + "('103','财务部',1014);";

            // String sql="SELECT ename,title FROM emp;";
            Statement st = conn.createStatement();
            boolean b = st.execute(sql);

            st.close();
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
} 

你可能感兴趣的:(java,Mysql)