sql 练习题 (二)

创建表:

员工 employees
工资表 salary
部门 departments

create or replace table employees(
empID  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  ,
empName  VARCHAR(20)  NOT NULL , #姓名
sex  VARCHAR(4)  , #性别
birth  date, #出生日期
deptID  INT(20) , #部门编码
jobs VARCHAR(20) , #工作岗位
firJob date,  #开始工作的日期
hiredate date,#入职日期
politicalStatus  VARCHAR(20) ,  # 政治面貌
leader  INT(10) #领导编码
);

create or replace table salary(
sid  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  ,
empID INT(10) not null,
salary INT(10) not null,#工资
lastedit date #上次调薪日期
);

create or replace table departments(
deptid  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  ,
deptname VARCHAR(20) not null,#部门名称
faterdeptid INT(10)   # 上级部门编码
);

单表查

1、显示所有职工的基本信息。

SELECT * FROM `employees`;

2、查询所有职工所属部门的部门号,不显示重复的部门号。

SELECT DISTINCT deptID FROM employees

3、求出所有职工的人数.

SELECT COUNT(*) FROM employees

4、列出最高工和最低工资。

SELECT MAX(salary)AS '最高工资' ,MIN(salary) AS '最低工资' FROM salary

5、列出职工的平均工资和总工资。

SELECT AVG(salary)AS '平均工资',SUM(salary) AS '总工资' FROM salary

6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。

CREATE table work_date(
workID INT(10) NOT NULL UNIQUE PRIMARY KEY ,
empID INT(10) NOT NULL ,
employeesName VARCHAR(20) NOT NULL,
workDate date
);

7、显示所有女职工的年龄

SELECT employees.empID,employees.empName, TIMESTAMPDIFF(YEAR,birth,SYSDATE()) AS age FROM employees WHERE employees.sex = '女'


8、列出所有姓刘的职工的职工号、姓名和出生日期。
SELECT empID,empName, birth FROM employees WHERE empName LIKE '刘%'

9、列出1990年以前出生的职工的姓名、参加工作日期。

SELECT empName, firJob, birth FROM employees WHERE birth <'1990-00-00';

SELECT empName, firJob, birth FROM employees WHERE YEAR(birth) < 1990


10、列出总人数大于4的部门号和总人数。

SELECT deptID AS '部门号', COUNT(*) AS '总人数' FROM employees GROUP BY deptID HAVING COUNT(*)>= 4

11、列出所有陈姓和李姓的职工姓名。

SELECT empID,empName FROM employees WHERE empName LIKE '刘%' or empName LIKE '李%'

12、列出所有部门号为1002和1003的职工号、姓名。

SELECT empID,empName, deptID FROM employees WHERE deptID = '1002' or deptID = '1003';

SELECT empID,empName, deptID FROM employees WHERE deptID IN ('1002','1003')


13、将职工表worker中的职工按出生的先后顺序排序。

SELECT * FROM employees ORDER BY birth ASC

14、求出各部门党员的人数。

SELECT deptID,COUNT(*) FROM employees WHERE politicalStatus = 'dangyuan' GROUP BY deptID

 

多表查询:

1、列出每名职工的职工号、姓名和部门名。

SELECT employees.empID, employees.empName, departments.deptname FROM employees, departments WHERE employees.deptID = departments.deptid

2、列出市场部的所有女职工的姓名和政治面貌。

SELECT a.empName, a.politicalStatus FROM employees a, departments b WHERE b.deptname = '市场部' AND a.deptID = b.deptid


3、显示所有职工的姓名、部门名和工资数。

SELECT a.empID, a.empName, b.deptname, c.salary FROM employees a ,departments b, salary c WHERE a.deptID = b.deptid AND a.empID = c.empID

4、显示所有职工的职工号、姓名、部门名和工资,并按部门名顺序排列。
SELECT a.empID, a.empName, b.deptname, c.salary FROM employees a ,departments b, salary c WHERE a.deptID = b.deptid AND a.empID = c.empID
ORDER BY b.deptID

SELECT a.empID, a.empName, b.deptname, c.salary FROM employees a LEFT JOIN departments b ON a.deptID = b.deptid
LEFT JOIN salary c ON a.empID = c.empID ORDER BY b.deptID

5、显示各部门名和该部门的所有职工平均工资。

SELECT d.deptid, d.deptname, AVG(s.salary) AS '平均工资' FROM departments d LEFT JOIN employees a ON d.deptid = a.deptID LEFT JOIN
salary s ON a.empID = s.empID GROUP BY d.deptid


6、显示所有平均工资高于1200的部门名和对应的平均工资。

SELECT d.deptid, d.deptname, AVG(s.salary) AS '平均工资' FROM departments d LEFT JOIN employees a ON d.deptid = a.deptID LEFT JOIN
salary s ON a.empID = s.empID GROUP BY d.deptid HAVING AVG(s.salary)>1200


7、查询刘欣所在的部门。
SELECT a.empName, b.deptid, b.deptname FROM employees a ,departments b WHERE a.deptID = b.deptid AND a.empName = '刘欣'

8、查询部门名为财务处的职工的情况。
SELECT a.* FROM employees a ,departments b WHERE a.deptID = b.deptid AND b.deptname = '财务处'


9、列出工资在1000-2000之间的所有职工姓名。

SELECT a.empID, a.empName, b.salary FROM employees a ,salary b WHERE a.empID = b.empID AND b.salary>=1000 AND b.salary <2000

10、显示工资最高的前3名职工的职工号和姓名。

SELECT a.empID, a.empName, b.salary FROM employees a ,salary b WHERE a.empID = b.empID ORDER BY b.salary DESC LIMIT 3

 

 

 

posted @ 2019-09-26 16:33  初学者,方圆几里  阅读(1046)  评论(0编辑  收藏  举报