当前位置:首页 > 行业动态 > 正文

如何进行MySQL数据库关联练习?

MySQL数据库关联练习涉及创建表、插入数据和查询操作,通过JOIN语句实现表间关联,提取所需信息。

MySQL数据库关联练习是一个非常重要的技能,它能够帮助我们更好地理解和操作数据库中的数据,下面我将通过一些具体的练习题目和解答来帮助大家熟悉MySQL的多表关联查询。

如何进行MySQL数据库关联练习?  第1张

一、单表查询练习

在进行多表关联练习之前,我们先回顾一下基本的单表查询,以下是一些常见的单表查询示例:

1、选择部门30中的所有员工

 SELECT * FROM EMP WHERE DEPTNO = 30;

2、列出所有办事员(CLERK)的姓名,编号和部门编号

 SELECT ENAME, EMPNO, DEPTNO FROM EMP WHERE JOB = 'CLERK';

3、找出奖金高于工资的员工

 SELECT * FROM EMP WHERE SAL < BONUS;

4、找出奖金高于工资的60%的员工

 SELECT * FROM EMP WHERE BONUS > SAL * 0.6;

5、找出部门10中所有的经理(MANAGER)和部门20中所有的办事员(CLERK)的详细资料

 SELECT * FROM EMP WHERE (DEPTNO = 10 AND JOB = 'MANAGER') OR (DEPTNO = 20 AND JOB = 'CLERK');

二、多表关联查询练习

接下来是多表关联查询的练习题目和解答:

1、列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资

 SELECT D.DEPTNO, D.DNAME, AVG(E.SAL) AS AVG_SAL, MIN(E.SAL) AS MIN_SAL, MAX(E.SAL) AS MAX_SAL
   FROM DEPT D
   JOIN EMP E ON D.DEPTNO = E.DEPTNO
   GROUP BY D.DEPTNO, D.DNAME;

2、列出薪金比SMITH或者ALLEN多的所有员工的编号、姓名、部门名称、其领导姓名

 SELECT E.EMPNO, E.ENAME, D.DNAME, M.ENAME AS MGR_NAME
   FROM EMP E
   JOIN DEPT D ON E.DEPTNO = D.DEPTNO
   JOIN EMP M ON E.MGR = M.EMPNO
   WHERE E.SAL > (SELECT SAL FROM EMP WHERE ENAME IN ('SMITH', 'ALLEN'));

3、列出所有员工的编号、姓名及其直接上级的编号、姓名,显示的结果按领导年工资的降序排列

 SELECT E.EMPNO, E.ENAME, E.MGR, M.ENAME AS MGR_NAME, M.SAL AS MGR_SAL
   FROM EMP E
   LEFT JOIN EMP M ON E.MGR = M.EMPNO
   ORDER BY M.SAL DESC;

4、列出雇佣日期早于其直接上级的所有员工的编号、姓名、部门名称、部门位置、部门人数

 SELECT E.EMPNO, E.ENAME, D.DNAME, D.LOC, COUNT(*) AS DEPT_COUNT
   FROM EMP E
   JOIN DEPT D ON E.DEPTNO = D.DEPTNO
   WHERE E.HIREDATE < (SELECT HIREDATE FROM EMP M WHERE E.MGR = M.EMPNO)
   GROUP BY E.EMPNO, M.ENAME;

5、列出部门名称和这些部门的员工信息(数量、平均工资),同时列出那些没有员工的部门

 SELECT D.DNAME, IFNULL(COUNT(E.EMPNO), 0) AS EMP_COUNT, IFNULL(AVG(E.SAL), 0) AS AVG_SAL
   FROM DEPT D
   LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO
   GROUP BY D.DNAME;

6、列出所有CLERK的姓名及其部门名称,部门的人数,工资等级

 SELECT E.ENAME, D.DNAME, COUNT(*) AS DEPT_COUNT, S.GRADE
   FROM EMP E
   JOIN DEPT D ON E.DEPTNO = D.DEPTNO
   JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL
   WHERE E.JOB = 'CLERK'
   GROUP BY E.ENAME, D.DNAME, S.GRADE;

7、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数及所在部门名称、位置、平均工资

 SELECT JOB, COUNT(*) AS EMP_COUNT, D.DNAME, D.LOC, AVG(E.SAL) AS AVG_SAL
   FROM EMP E
   JOIN DEPT D ON E.DEPTNO = D.DEPTNO
   WHERE E.SAL > 1500
   GROUP BY JOB, D.DNAME, D.LOC;

三、相关问答FAQs

问:如何在MySQL中进行多表关联查询?

答:在MySQL中,可以使用JOIN关键字来进行多表关联查询,常见的JOIN类型包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN,通过指定连接条件(通常是两个表中的共同字段),可以将这些表关联起来并进行数据查询。SELECT ... FROM table1 INNER JOIN table2 ON table1.column = table2.column。

问:什么是子查询?它在MySQL中有什么作用?

答:子查询是指在一个SQL语句中嵌套另一个SQL语句,子查询可以返回单个值、一行或多行,甚至可以返回整个结果集,它在MySQL中有广泛的应用,如用于过滤数据、计算聚合值、作为派生表使用等。SELECT * FROM table1 WHERE column1 IN (SELECT column2 FROM table2)中的(SELECT column2 FROM table2)就是一个子查询。

小编有话说

通过以上的练习和解答,相信大家对MySQL的单表查询和多表关联查询有了更深入的了解,在实际工作中,多表关联查询是非常常见的需求,掌握好这项技能对于数据库操作和管理至关重要,希望本文能为大家提供有价值的参考和帮助,如果有任何疑问或建议,欢迎随时留言交流。

0