MySQL常用语法练习题:聚合函数,where,group by ,having ,inner join on,order by,limit,like等

题目:

根据不同条件对表进行查询操作,
1:employee表结构
字段名	字段说明	数据类型	   主键	外键	非空	唯一	自增
e_no	员工编号	int(11)	是	否    	是	    是	    否
e_name	员工姓名	varchar(50)	否	否    	是	    否	    否
e_gender员工性别	char(2)	    否	否    	否	    否	    否
dept_no	部门编号	int(11)	    否	是	    是	    否	    否
e_job	职位	varchar(50)	否	否	    是	    否	    否
e_salary	薪水	int(11)	否	否	    是	    否	    否
hireDate	入职日期	date	否	否	    是	    否	    否
2:dept表结构
字段名	    字段说明	数据类型	        主键	外键	非空	唯一	自增
dept_no	    部门编号	int(11)	    是	    否	    是	    是    	是
d_name	    部门名称	varchar(50)	    否	    否	    是	    否	    否
d_location	部门地址	varchar(100)	否	    否	    否	    否	    否

1:创建数据表employee和dept
2:将指定记录分别插入两个表中,执行过程如下:
向dept表中插入数据
INSERT INTO dept 
VALUES (10, 'ACCOUNTING', 'ShangHai'),
(20, 'RESEARCH ', 'BeiJing '),
(30, 'SALES ', 'ShenZhen '),
(40, 'OPERATIONS ', 'FuJian ');

向employee表中插入数据
INSERT INTO employee 
VALUES (1001, 'SMITH', 'm',20, 'CLERK',800,'2005-11-12'),
(1002, 'ALLEN', 'f',30, 'SALESMAN', 1600,'2003-05-12'),
(1003, 'WARD', 'f',30, 'SALESMAN', 1250,'2003-05-12'),
(1004, 'JONES', 'm',20, 'MANAGER', 2975,'1998-05-18'),
(1005, 'MARTIN', 'm',30, 'SALESMAN', 1250,'2001-06-12'), 
(1006, 'BLAKE', 'f',30, 'MANAGER', 2850,'1997-02-15'),
(1007, 'CLARK', 'm',10, 'MANAGER', 2450,'2002-09-12'),
(1008, 'SCOTT', 'm',20, 'ANALYST', 3000,'2003-05-12'),
(1009, 'KING', 'f',10, 'PRESIDENT', 5000,'1995-01-01'),
(1010, 'TURNER', 'f',30, 'SALESMAN', 1500,'1997-10-12'),
(1011, 'ADAMS', 'm',20, 'CLERK', 1100,'1999-10-05'),
(1012, 'JAMES', 'm',30, 'CLERK', 950,'2008-06-15');
3:在employee表中,查询所有记录的e_no、e_name和e_salary字段值
4:在employee表中,查询dept_no等于10和20的所有记录。
5:在employee表中,查询工资范围在800到2500之间的员工信息。
6:在employee表中,查询部门编号为20的部门中的员工信息。
7:在employee表中,查询每个部门最高工资的员工信息。
8:查询员工BLAKE所在部门和部门所在地。
9:使用连接查询,查询所有员工的部门和部门信息。
10:在employee表中,计算每个部门各有多少名员工。
11:在employee表中,计算不同类型职工的总工资数。
12:在employee表中,计算不同部门的平均工工资。
13:在employee表中,查询工资低于1500的员工信息。
14:在employee表中,将查询记录先按部门编号由高到低排列,再按员工工资由高到低排列。
15:在employee表中,查询员工姓名以字母A或S开头的员工的信息。
16:在employee表中,查询到目前为止,工龄大于等于10年的员工信息。

答案:

1:创建数据表employee和dept

DROP TABLE IF EXISTS employee;

DROP TABLE IF EXISTS dept;

CREATE TABLE IF NOT EXISTS dept(
    dept_no INT PRIMARY KEY,
    d_name VARCHAR(50) NOT NULL,
    d_location VARCHAR(100) NOT NULL
);

CREATE TABLE IF NOT EXISTS  employee(
    e_no INT  PRIMARY KEY,
    e_name VARCHAR(50) NOT NULL,
    e_gender CHAR(2),
    dept_no INT NOT NULL,
    e_job VARCHAR(50) NOT NULL,
    e_salary INT NOT NULL,
    hireDate DATE NOT NULL,
    CONSTRAINT fk_dept_no FOREIGN KEY employee(dept_no) REFERENCES dept(dept_no)
);

INSERT INTO dept 
VALUES (10, 'ACCOUNTING', 'ShangHai'),
    (20, 'RESEARCH ', 'BeiJing '),
    (30, 'SALES ', 'ShenZhen '),
    (40, 'OPERATIONS ', 'FuJian ');


INSERT INTO employee 
VALUES (1001, 'SMITH', 'm',20, 'CLERK',800,'2005-11-12'),
    (1002, 'ALLEN', 'f',30, 'SALESMAN', 1600,'2003-05-12'),
    (1003, 'WARD', 'f',30, 'SALESMAN', 1250,'2003-05-12'),
    (1004, 'JONES', 'm',20, 'MANAGER', 2975,'1998-05-18'),
    (1005, 'MARTIN', 'm',30, 'SALESMAN', 1250,'2001-06-12'), 
    (1006, 'BLAKE', 'f',30, 'MANAGER', 2850,'1997-02-15'),
    (1007, 'CLARK', 'm',10, 'MANAGER', 2450,'2002-09-12'),
    (1008, 'SCOTT', 'm',20, 'ANALYST', 3000,'2003-05-12'),
    (1009, 'KING', 'f',10, 'PRESIDENT', 5000,'1995-01-01'),
    (1010, 'TURNER', 'f',30, 'SALESMAN', 1500,'1997-10-12'),
    (1011, 'ADAMS', 'm',20, 'CLERK', 1100,'1999-10-05'),
    (1012, 'JAMES', 'm',30, 'CLERK', 950,'2008-06-15');
    


-- 3.在employee表中,查询所有记录的e_no、e_name和e_salary字段值
    SELECT e_no , e_name , e_salary FROM employee;

-- 4:在employee表中,查询dept_no等于10和20的所有记录
    SELECT * FROM employee WHERE dept_no=10 OR dept_no=20;

-- 5:在employee表中,查询工资范围在800到2500之间的员工信息。
    SELECT * FROM employee WHERE e_salary BETWEEN 800 AND 2500;

-- 6:在employee表中,查询部门编号为20的部门中的员工信息。
    SELECT * FROM employee WHERE dept_no=20;
    
-- 7:在employee表中,查询每个部门最高工资的员工信息。
    SELECT * FROM employee  GROUP BY dept_no HAVING MAX(e_salary);

-- 8:查询员工BLAKE所在部门和部门所在地。
    SELECT d_name , d_location FROM  employee INNER JOIN dept 
        ON employee.`e_name`="BLAKE" AND employee.`dept_no`=dept.`dept_no`;

-- 9:使用连接查询,查询所有员工的部门和部门信息。
    SELECT e_name , d_name FROM employee INNER JOIN dept
        ON employee.`dept_no`=dept.`dept_no`;

-- 10:在employee表中,计算每个部门各有多少名员工。
    SELECT d_name 部门,COUNT(e_name) 员工人数 FROM employee INNER JOIN dept
    ON dept.`dept_no`=employee.`dept_no` GROUP BY dept.`dept_no`;

-- 11:在employee表中,计算不同类型职工的总工资数。
    SELECT e_job 职工,SUM(e_salary) 总工资 FROM employee GROUP BY employee.`e_job`;

-- 12:在employee表中,计算不同部门的平均工工资。
    SELECT d_name 部门,AVG(e_salary) 平均工资 FROM employee INNER JOIN dept
    ON dept.`dept_no`=employee.`dept_no` GROUP BY employee.dept_no;

-- 13:在employee表中,查询工资低于1500的员工信息。
    SELECT * FROM employee WHERE e_salary<1500;

-- 14:在employee表中,将查询记录先按部门编号由高到低排列,再按员工工资由高到低排列。
    SELECT * FROM employee ORDER BY dept_no ASC , e_salary ASC;
    
-- 15:在employee表中,查询员工姓名以字母A或S开头的员工的信息。
    SELECT * FROM employee WHERE e_name LIKE 's%' OR e_name LIKE 'A%';

-- 16:在employee表中,查询到目前为止,工龄大于等于10年的员工信息。
    SELECT * FROM employee WHERE TIMESTAMPDIFF(YEAR,hireDate,CURRENT_DATE())>10;
    

 

你可能感兴趣的:(MySQL)