MySQL 实验五:验证性实验
初始化数据
创建数据库和使用数据库
1 |
|
创建表和插入数据
说明
1 |
|
创建 bumen 表
1 |
|
或
1 |
|
创建 yuangong 表
1 |
|
在 bumen 表中插入数据
1 |
|
在 yuangong 表中插入数据
1 |
|
插曲:关于自增的小坑
1 |
|
可以看到 foodid 这个字段设置了自增,一开始插入数据时,我以为 foodid 这个字段可以省略(因为它会从某个数(默认是 1)开始自增),于是插入数据时输入的语句如下:
1 |
|
报错:ERROR 1136 (21S01): Column count doesn't match value count at row 1
翻译过来就是列计数与第一行的数值不匹配,当时这个问题困扰了我好久。不过后来,还是找到了问题出现的原因,原因就在于我错误的认为自增的字段在插入时可以省略。**自增的字段插入时也需要填写数据占位(0 或’’或 null)**。语句更改为如下就不会报错了:
1 |
|
验证
查询 yuangong 表的所有记录。
1
SELECT * FROM yuangong;
或者列出 yuangong 表的所有字段名称。
1
SELECT id,name,sex,age,d_id,salary,address FROM yuangong;
查询 yuangong 表的第四条到第五条记录。
1
SELECT id,name,sex,age,d_id,salary,address FROM yuangong LIMIT 3,2;
从 bumen 表查询部门号(d_id)、部门名称(d_name)和部门职能(function)。
1
SELECT d_id,d_name,function FROM bumen;
从 yuangong 表中查询人事部和科研部的员工的信息。先从 bumen 表查询出人事部和科研部的部门号。然后到 yuangong 表中去查询员工的信息。
1
SELECT * FROM yuangong WHERE d_id = ANY(SELECT d_id FROM bumen WHERE d_name IN ('人事部','科研部'));
或者使用下面的代码。
1
SELECT * FROM yuangong WHERE d_id IN (SELECT d_id FROM bumen WHERE d_name='人事部' OR d_name='科研部');
从 yuangong 表中查询年龄在 25 到 30 之间的员工的信息。可以通过两种方式来查询。第一种方式:
1
SELECT * FROM yuangong WHERE age BETWEEN 25 AND 30;
第二种方式:
1
SELECT * FROM yuangong WHERE age >= 25 AND age <= 30;
查询每个部门有多少员工。先按部门号进行分组,然后用 COUNT()函数来计算每组的人数。
1
SELECT d_id,COUNT(id) FROM yuangong GROUP BY d_id;
或者给 COUNT(id)取名为 sum。
1
SELECT d_id,COUNT(id) AS sum FROM yuangong GROUP BY d_id;
查询每个部门的最高工资。先按部门号进行分组,然后用 MAX()函数来计算最大值。
1
SELECT d_id,MAX(salary) FROM yuangong GROUP BY d_id;
用左连接的方式查询 bumen 表和 yuangong 表。使用 LEFTJOINON 来实现左连接。
1
SELECT bumen.d_id,d_name,function,bumen.address,id,name,age,sex,salary,yuangong.address FROM bumen LEFT JOIN yuangong ON yuangong.d_id = bumen.d_id;
计算每个部门的总工资。先按部门号进行分组,然后用 SUM()函数来求和。
1
SELECT d_id,SUM(salary) FROM yuangong GROUP BY d_id;
查询 yuangong 表,按照工资从高到低的顺序排列。
1
SELECT * FROM yuangong ORDER BY salary DESC;
从 bumen 表和 yuangong 表中查询出部门号,然后使用 UNION 合并查询结果。
1
SELECT d_id FROM yuangong UNION SELECT d_id FROM bumen;
查询家是北京市员工的姓名、年龄、家庭住址。这里使用 LIKE 关键字。
1
SELECT name,age,address FROM yuangong WHERE address LIKE'北京%';
强烈建议先自己模仿验证性实验里的查询语句,尝试写出来设计性实验里的问题,如果你尝试了,但遇到了一些困难,可以查看这里实验五:设计性实验。
如果你有什么关于本文章的问题,欢迎留言讨论。