车辆管理所有如下表:车辆所属关系表Ownership(车辆号,车主身份证号),车主身份信息表Ownerinfo(车主身份证号,姓名,年龄),
限行表Restriction(尾号,限行日期)。
1 写出SQL查询,名下有多部车辆的车主列表(车主身份证号,名下车辆数量)
Group by是指对所得的数据按某类别进行分组,即划分为几个小区域,之后用having可以对sql中的函数进行操作。
select Ownerid,count(*) from Ownershipgroup by Ownerid HAVING count(*)>1;
结果为:
+---------+----------+
| Ownerid | count(*) |
+---------+----------+
| 111 | 2 |
| 112 | 2 |
| 113 | 2 |
| 114 | 2 |
+---------+----------+
4 rows in set
2 写出SQL查询,40岁以下车主名下的车辆牌照列表(车主姓名,车辆牌照)
select Name,o1.Ownerid,Platenumber fromOwnerinfo o1,Ownership o2 where o1.Ownerid=o2.Ownerid and Age<40;
结果如下:
| Name | Ownerid | Platenumber |
+------+---------+-------------+
| 张飞 | 113 | 京3 |
| 赵云 | 114 | 京4 |
| 马超 | 115 | 京5 |
| 张飞 | 113 | 京9 |
| 赵云 | 114 | 京10 |
+------+---------+-------------+
5 rows in set
3 写SQL查询,周三没有车可以开的车主姓名列表。
substring(Platenumber,-1)为截取Platenumber的最后一位。
select Platenumber,o1.Ownerid,Namefrom Ownership o1,Ownerinfo o2 whereo1.Ownerid=o2.Ownerid and substring(Platenumber,-1)=(select Lastdigit fromRestriction where Restriction='周三') group by Ownerid;
结果如下:
+-------------+---------+------+
| Platenumber | Ownerid | Name |
+-------------+---------+------+
| 京2 | 111 | 刘备 |
+-------------+---------+------+
1 row in set