如何进行MySQL数据库关联练习?
- 行业动态
- 2024-12-29
- 4272
MySQL数据库关联练习涉及创建表、插入数据和查询操作,通过JOIN语句实现表间关联,提取所需信息。
MySQL数据库关联练习是一个非常重要的技能,它能够帮助我们更好地理解和操作数据库中的数据,下面我将通过一些具体的练习题目和解答来帮助大家熟悉MySQL的多表关联查询。
一、单表查询练习
在进行多表关联练习之前,我们先回顾一下基本的单表查询,以下是一些常见的单表查询示例:
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的单表查询和多表关联查询有了更深入的了解,在实际工作中,多表关联查询是非常常见的需求,掌握好这项技能对于数据库操作和管理至关重要,希望本文能为大家提供有价值的参考和帮助,如果有任何疑问或建议,欢迎随时留言交流。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:https://www.xixizhuji.com/fuzhu/377174.html