小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-06-20 / 18 阅读
0
0

MySQL 实验

  1. 创建一个名称为mydb的数据库并使用该数据库。

create database mydb;

2.在mydb数据库中创建两张表,分别是emp表和dept表,字段信息如下所示。

emp表

字段 类型 是否为空 是否主键 备注说明
id int(4) NO PRI 员工编号
ename varchar(30) NO 员工姓名
gender char(2) YES 员工性别
salary float YES 员工工资
did int(4) NO 所属部门编号

dept表

字段 类型 是否为空 是否主键 备注说明
did int(4) NO PRI 部门编号
dname varchar(36) YES 部门名称

mysql> create table emp (id int(4) not null  primary key,ename varchar(30) not null,gender char(23),salary float,did int(4) not null);

mysql> create table dept (did int(4) not null primary key,dname varchar(36));

Query OK, 5 rows affected (0.09 sec)

Records: 5  Duplicates: 0  Warnings: 0

mysql> alter table emp convert to character set utf8mb4;
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table dept convert to character set utf8mb4;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0

3.(1)向emp表中添加5条记录,记录信息如下。

id ename gender salary did
01 李兰 3500 30
02 张俊成 4800 10
03 宋清 6000 30
04 李志博 4500 20
05 吴志 3800 40

mysql> insert into emp (id,ename,gender,salary,did) values (01,'李兰','女',3500,30),(02,'张俊成','男',4800,10),

-> (03,'宋清','女',6000,30),

-> (04,'李志博','男',4500,20),

-> (05,'吴志','男',3800,40);

Query OK, 5 rows affected (0.09 sec)

Records: 5  Duplicates: 0  Warnings: 0

(2)向dept表中添加4条记录,记录信息如下。

did dname
10 技术部
20 财务部
30 销售部
40 后勤部

mysql> insert into dept (did,dname) values (10,'技术部'),(20,'财务部'),(30,'销售部'),(40,'后勤部');

Query OK, 4 rows affected (0.06 sec)

Records: 4  Duplicates: 0  Warnings: 0

4.查询出销售部的员工信息。

mysql> select * from emp where did=30;

+----+-------+--------+--------+-----+

| id | ename | gender | salary | did |

+----+-------+--------+--------+-----+

|  1 | 李兰  | 女     |   3500 |  30 |

|  3 | 宋清  | 女     |   6000 |  30 |

+----+-------+--------+--------+-----+

子查询做法:

mysql> select * from emp where did=(select did from dept where dname='销售部');
+----+-------+--------+--------+-----+
| id | ename | gender | salary | did |
+----+-------+--------+--------+-----+
| 1 | 李兰 | 女 | 3500 | 30 |
| 3 | 宋清 | 女 | 6000 | 30 |
+----+-------+--------+--------+-----+
2 rows in set (0.06 sec)

5.查询得出emp表中性别是男的员工的平均工资。

mysql> select avg(salary) from emp where gender='男';

+-------------------+

| avg(salary)       |

+-------------------+

| 4366.666666666667 |

+-------------------+

1 row in set (0.00 sec)

6.查询出emp表中名字中包含“志”的员工信息。

mysql> select * from emp where ename like '%志%';

+----+--------+--------+--------+-----+

| id | ename  | gender | salary | did |

+----+--------+--------+--------+-----+

|  4 | 李志博 | 男     |   4500 |  20 |

|  5 | 吴志   | 男     |   3800 |  40 |

+----+--------+--------+--------+-----+

2 rows in set (0.00 sec)

7.查询所有员工姓名及对应部门的名称。

mysql> select ename,did from emp;

+--------+-----+

| ename  | did |

+--------+-----+

| 李兰   |  30 |

| 张俊成 |  10 |

| 宋清   |  30 |

| 李志博 |  20 |

| 吴志   |  40 |

+--------+-----+

5 rows in set (0.00 sec)

mysql> select e.ename,d.dname from emp as e,dept as d where e.did =d.did;

+--------+--------+

| ename  | dname  |

+--------+--------+

| 李兰   | 销售部 |

| 张俊成 | 技术部 |

| 宋清   | 销售部 |

| 李志博 | 财务部 |

+--------+--------+

4 rows in set (0.00 sec)

左连接

mysql> select e.ename,d.dname from emp e left join dept d on e.did=d.did;

+--------+--------+

| ename  | dname  |

+--------+--------+

| 李兰   | 销售部 |

| 张俊成 | 技术部 |

| 宋清   | 销售部 |

| 李志博 | 财务部 |

| 吴志   | NULL   |

+--------+--------+

5 rows in set (0.02 sec)

mysql>

8.公司架构调整导致要撤销后勤部,请你完成对dept表中相关数据的删除工作。

mysql> delete from dept where did=40;

Query OK, 1 row affected (0.08 sec)

mysql> desc dept;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| did   | int(4)      | NO   | PRI | NULL    |       |

| dname | varchar(36) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

2 rows in set (0.08 sec)

实验结果

mysql>
mysql>
mysql>
mysql>
mysql> create database mydb;
Query OK, 1 row affected (0.06 sec)

mysql> create table emp (id int(4) not null  primary key,ename varchar(30) not n
ull,gender char(23),salary float,did int(4) not null);
ERROR 1046 (3D000): No database selected
mysql> create table emp (id int(4) not null  primary key,ename varchar(30) not n
ull,gender char(23),salary float,did int(4) not null);
ERROR 1046 (3D000): No database selected
mysql> use mydb;
Database changed
mysql> create table emp (id int(4) not null  primary key,ename varchar(30) not n
ull,gender char(23),salary float,did int(4) not null);
Query OK, 0 rows affected (0.17 sec)

mysql> create table dept (did int(4) not null primary key,dname varchar(36));
Query OK, 0 rows affected (0.03 sec)

mysql> alter table emp convert to character set utf8mb4;
Query OK, 0 rows affected (0.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table dname convert to character set utf8mb4;
ERROR 1146 (42S02): Table 'mydb.dname' doesn't exist
mysql> alter table dept convert to character set utf8mb4;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into emp (id,ename,gender,salary,did) values (01,'李兰','女',3500,
30),(02,'张俊成','男',4800,10),
    -> (03,'宋清','女',6000,30),
    -> (04,'李志博','男',4500,20),
    -> (05,'吴志','男',3800,40);
Query OK, 5 rows affected (0.09 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql>
mysql>
mysql> insert into dept (did,dname) values (10,'技术部'),(20,'财务部'),(30,'销售
部'),(40,'后勤部');
Query OK, 4 rows affected (0.06 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql>
mysql> select * from emp where did=30;
+----+-------+--------+--------+-----+
| id | ename | gender | salary | did |
+----+-------+--------+--------+-----+
|  1 | 李兰  | 女     |   3500 |  30 |
|  3 | 宋清  | 女     |   6000 |  30 |
+----+-------+--------+--------+-----+
2 rows in set (0.02 sec)

mysql> select avg(salary) from emp where gender='男';
+-------------------+
| avg(salary)       |
+-------------------+
| 4366.666666666667 |
+-------------------+
1 row in set (0.00 sec)

mysql> select * from emp where ename like '%志%';
+----+--------+--------+--------+-----+
| id | ename  | gender | salary | did |
+----+--------+--------+--------+-----+
|  4 | 李志博 | 男     |   4500 |  20 |
|  5 | 吴志   | 男     |   3800 |  40 |
+----+--------+--------+--------+-----+
2 rows in set (0.00 sec)

mysql> select ename,did from emp;
+--------+-----+
| ename  | did |
+--------+-----+
| 李兰   |  30 |
| 张俊成 |  10 |
| 宋清   |  30 |
| 李志博 |  20 |
| 吴志   |  40 |
+--------+-----+
5 rows in set (0.00 sec)

mysql> delete from dept where did=40;
Query OK, 1 row affected (0.08 sec)

mysql> desc dept;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| did   | int(4)      | NO   | PRI | NULL    |       |
| dname | varchar(36) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

mysql> show all columns from dept;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'all c
olumns from dept' at line 1
mysql> show full columns from dept;
+-------+-------------+--------------------+------+-----+---------+-------+-----
----------------------------+---------+
| Field | Type        | Collation          | Null | Key | Default | Extra | Priv
ileges                      | Comment |
+-------+-------------+--------------------+------+-----+---------+-------+-----
----------------------------+---------+
| did   | int(4)      | NULL               | NO   | PRI | NULL    |       | sele
ct,insert,update,references |         |
| dname | varchar(36) | utf8mb4_general_ci | YES  |     | NULL    |       | sele
ct,insert,update,references |         |
+-------+-------------+--------------------+------+-----+---------+-------+-----
----------------------------+---------+
2 rows in set (0.00 sec)
mysql> select * from emp where did=(select did from dept where dname='销售部');
+----+-------+--------+--------+-----+
| id | ename | gender | salary | did |
+----+-------+--------+--------+-----+
|  1 | 李兰  | 女     |   3500 |  30 |
|  3 | 宋清  | 女     |   6000 |  30 |
+----+-------+--------+--------+-----+
2 rows in set (0.06 sec)

mysql>


评论