mysql like having_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;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值