以实验作业进行讲解
1.进入mysql服务器中,首先执行"drop database if exists two"语句,以此确保打开的mysql中没有数据库two。
2.创建名为two的数据库。
3.练习题使用数据库two并按以下要求创建数据表department。
(1)字段did:设置数据类型int(4)、非空约束、主键约束。 //非空约束:not null 主键约束:primary key
(2)字段dname:设置数据类型varchar(36)。
操作如下:
并插入以下数据:
4.继续使用数据库two创建数据表employee。
(1)字段id:设置数据类型int(4)、非空约束、主键约束。
(2)字段name:设置数据类型varchar(36)。
(3)字段age:设置数据类型int(2)。
(4)字段did:设置数据类型int(4)、非空约束。
操作如下:
并插入如下数据:
5.子查询是指在一个查询语句嵌套在另一个查询语句内部的查询。它可以嵌套在一个select、select...into语句、insert...into等语句中。在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件,在子查询中通常可以使用in、exists、any、all操作符。
(5.1)带in关键字的子查询,使用in关键字进行子查询时,内层查询语句仅返回一个数据列,这个数据列中的值将供外层查询语句进行比较操作。
例题:查询存在年龄为20岁的员工的部门。
命令为:select dname from department where did in(select did from employee where age=20);
例题:查询不存在年龄为20岁的员工的部门。
命令为:select dname from department where did not in(select did from employee where age=20);
6.带exists关键字的子查询,Exists关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回true或false,当返回值为true时,外层查询才会执行。
例题:查询employee表中是否存在年龄大于21岁的员工(子查询),如果存在,则查询department表中的所有记录(使用exists关键字)。
命令为: select * from department where exists(select did from employee where age>21);
例题:查询employee表中是否存在年龄大于23岁的员工(子查询),如果存在,则查询department表中的所有记录(使用exists关键字)。
命令为:select * from department where exists(select did from employee where age>23);
7.带any关键字的子查询,Any关键字表示满足其中任意一个条件,它允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任意一个比较条件就返回一个结果作为外层查询条件。
例题:查询满足department表中部门编码(did)大于employee表中部门编码(did)(子查询)的部门。
命令为:select * from department where did > any(select did from employee where did);
例题:查询满足department表中部门编码(did)等于employee表中部门编码(did)(子查询)的部门。
命令为:select * from department where did = any(select did from employee where did);
例题:查询满足department表中部门编码(did)小于employee表中部门编码(did)(子查询)的部门。
命令为:select * from department where did < any(select did from employee where did);
8.带all关键字的子查询,All关键字查询与any有点类似,只不过all关键字的子查询返回的结果需要同时满足所有内层查询条件。
例题:查询满足department表中部门编码(did)大于employee表中部门编码(did)(子查询)的部门。
命令为:select * from department where did > all(select did from employee where did);
例题:查询满足department表中部门编码(did)等于employee表中部门编码(did)(子查询)的部门。
命令为:select * from department where did = all(select did from employee where did);
例题:查询满足department表中部门编码(did)小于employee表中部门编码(did)(子查询)的部门。
命令为:select * from department where did < all(select did from employee where did);
9.带比较运算符的子查询,在前面讲解的any关键字和all关键字的子查询中使用了“>”比较运算符、
子查询中还可以使用其他的比较运算符,如“<”、“>=”、“=”、“!=”等。
例题:查询赵四是哪个部门的员工。提示:查询赵四部门编码的语句是子查询。
命令为: select dname from department where did = (select did from employee where name='赵四');
例题:查询年龄大于21岁的员工在哪个部门。
命令为:select dname from department where did = (select did from employee where age>21);
例题:查询员工id大于2的部门。
命令为:select dname from department where did = any(select did from employee where id>2);