MySQL基础练习题:创建数据库

这部分主要是为了帮助大家回忆回忆MySQL的基本语法,数据库来自于MySQL的官方简化版,题目也是网上非常流行的35题。这些基础习题基本可以涵盖面试中需要现场写SQL的问题。

创建数据库

在开始练习之前,我默认你的电脑上是没有本系列练习题需要的数据库。

第一步,准备数据

我这里写好一个.sql文件,放在了网盘里面

链接:pan.baidu.com/s/19r4ap0RB... 提取码:aigo

大小仅仅2KB,下载应该会很快。

我将这个文件放在了 /usr/src/ 下面

csharp 复制代码
[09:16:13 root@MySQL-server src]#ls
data.sql  debug  kernels
[09:16:15 root@MySQL-server src]#

那么该文件要如何使用呢?

第二步,创建数据库

接下来登陆MySQL,

less 复制代码
(root@localhost) [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| book               |
| information_schema |
| mysql              |
| performance_schema |
| springbootdb       |
| sys                |
+--------------------+
6 rows in set (0.03 sec)

(root@localhost) [(none)]>

那么我需要建一个数据库,就叫employees,一系列命令如下。

less 复制代码
(root@localhost) [(none)]>create database employees;
Query OK, 1 row affected (0.10 sec)

(root@localhost) [(none)]>use employees;
Database changed
(root@localhost) [employees]>show tables;
Empty set (0.14 sec)


(root@localhost) [employees]>

第三步,导入数据

很简单且朴实无华的一条命令

bash 复制代码
source /usr/src/data.sql

执行过后

sql 复制代码
(root@localhost) [employees]>show tables;
+---------------------+
| Tables_in_employees |
+---------------------+
| dept                |
| emp                 |
| salgrade            |
+---------------------+
3 rows in set (0.00 sec)

该数据库中就出现了三张表

那么分别对三张表执行select *

yaml 复制代码
(root@localhost) [employees]>select * from dept;
+--------+-------------+----------+
| deptno | dname       | loc      |
+--------+-------------+----------+
|     10 | ACCOUNTING  | NEW YORK |
|     20 | RESEARCHING | DALLAS   |
|     30 | SALES       | CHICAGO  |
|     40 | OPERATIONS  | BOSTON   |
+--------+-------------+----------+
4 rows in set (0.03 sec)

(root@localhost) [employees]>

(root@localhost) [employees]>select * from salgrade;
+-------+-------+-------+
| grade | losal | hisal |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  5000 |
+-------+-------+-------+
5 rows in set (0.05 sec)

(root@localhost) [employees]>


(root@localhost) [employees]>select * from emp;
+-------+--------+-----------+------+------------+---------+---------+--------+
| empno | ename  | job       | mgr  | hiredate   | sal     | comm    | deptno |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | SIMITH | CLERK     | 7902 | 1980-12-17 |  800.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    NULL |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)

(root@localhost) [employees]>

简单练习一下

那今天就先做一道简单的练习题

取得每个部门最高薪水的人员名称

首先分析一下题目,该题目需要返回的是人员名称,其次该人员是该部门薪资最高的人。 人员名称,部门以及薪资都在emp一个表里,那么最多也就是自己join自己

拆解

第一步,我就去看看每个部门最高的薪水。

less 复制代码
(root@localhost) [employees]>select deptno,max(sal) as maxsal from emp group by deptno;
+--------+---------+
| deptno | maxsal  |
+--------+---------+
|     20 | 3000.00 |
|     30 | 2850.00 |
|     10 | 5000.00 |
+--------+---------+
3 rows in set (0.03 sec)

(root@localhost) [employees]>

第二步,自己join自己,条件为 薪资=最大薪资 且 部门相同

less 复制代码
(root@localhost) [employees]>select a.ename,a.deptno,a.sal from emp a join(select deptno,max(sal) as maxsal from emp group by deptno) b on a.sal=b.maxsal and a.deptno=b.deptno;
+-------+--------+---------+
| ename | deptno | sal     |
+-------+--------+---------+
| BLAKE |     30 | 2850.00 |
| SCOTT |     20 | 3000.00 |
| KING  |     10 | 5000.00 |
| FORD  |     20 | 3000.00 |
+-------+--------+---------+
4 rows in set (0.07 sec)

(root@localhost) [employees]>

总结

今天主要是帮助大家建库建表,以及简单地练习一道题。希望能帮助到读者老爷。

相关推荐
蓝鸟19743 分钟前
Oracle 19c JSON_OBJECT 完全实战指南|嵌套、多行多列数组合并、空值踩坑、医保报文落地
数据库·oracle·json_arrayagg·多行转json数组·sql实战踩坑·数据库json拼装·json_object
霸道流氓气质4 分钟前
Mysql中慢 SQL 优化实战:减少不必要的 JOIN 关联
sql·mysql·mybatis
晴天165 分钟前
Agent 全栈学习笔记 1-Day14
数据库·笔记·学习
瀚高PG实验室5 分钟前
几种因网络波动导致应用与数据库操作异常的现象
运维·网络·数据库·postgresql·瀚高数据库
AINative软件工程27 分钟前
LLM 应用的 Feature Flag 工程实践:Prompt、模型与 AI 行为的生产安全灰度
后端·llm·ai编程
崖边看雾27 分钟前
同步上下文管理器规则
开发语言·数据库
.柒宇.30 分钟前
运维常见面试题_02_数据库
运维·数据库·sql·面试
️学习的小王35 分钟前
二级MySQL PHP综合应用题完整考点+历年真题风格练习题
android·mysql·php
weixin_4316004441 分钟前
前端对接 SSE 的两种常见方式
前端·后端·学习·ai·sse·nest.js
Larcher7 小时前
React Router 不只是页面跳转:从 SPA 路由到权限守卫的完整实践
javascript·后端