数据库练习题(3)
表结构如下:
作者表:(作者编号,作者姓名,性别,年龄,居住城市,联系电话,销量,最新出版日期);
authors(authorId,authorName,sex,age,city,telephone,sales,isbn);
1)查询姓王的作者信息
select * from authors where authorName like'高%';
注意:like关键词前面要有where
2)查询联系电话第三位为8、9并以888结尾的作者信息
分析:获得联系电话的第三位,这里要用到函数截取,substr();以888结尾用like即可;也可以用substr()函数,substr(telephone,length(telephone)-2,3)='888';方法3,用like '_________888',一个_代表匹配一个数字
截取函数的格式:substr(字段A,截取开始的位置, 截取字符个数 )
语句:
select * from authors where substr(telephone,3,1) in (8,9) and telephone like'%888';
或者:select * from author where substr(telephone,3,1) in (8,9) and substr(telephone,length(telephone)-2,3)='888';
3)查询年龄在20-50之间的男性作者信息
分析:年龄在20-50之间,这里要用到关键词between
语句:
select * from authors where age between 20 and 50 and sex='男';
4)查询显示作者姓名的第二个字符
分析:获取姓名的第二个字符方法,substr(name,2,1)
语句:
select substr(authorName,2,1) from authors;
5)查询显示作者姓名的长度
分析:用到函数,length()
语句:
select authorName,length(authorName) from authors;
6)查询显示最年经的5位作者的平均销量
分析:先把作者表按年龄从小到大排序,然后取前5位数据,对这5位数据算出平均值
语句:
错误写法:
select avg(sales) from authors order by age asc limit 0,5;
分析:这里所算出的是所有销量的平均值
正确写法:
select avg(sales) from (select sales from authors order by age asc limit 0,5) s1;
7)查询显示作者的姓名,出生年份,销量,并按销量降序排列
分析:信息表中没有出生年份,需要自己算出,用获取年份的函数year()-年龄即可;如何获取年份,先获取当前时间,然后提取年份即可,year(curdate());
语句:
select authorName,year(curdate())-age as '出生年份', sales from authors order by sales desc;
8)查询显示最新出版日期在今年前半年的作者信息
分析:先判断是否在今年,然后从最新出版日期获取月份,判断是否小于7即可
语句:
select * from authors where year(isbn)=year(curdate()) and month(isbn)<7;
总结:
从这个题目中,所学习到的函数有:
1、截取函数substr(字段名,截取的开始位置,截取的长度),
2、获取字段的长度函数,length(字段名)
3、截取范围之内值的关键字,between 范围1 and 范围2
4、分页函数,limit m,n:从m行开始,每页取n条;
5、获取当前时间的年份,月份,天数的函数分别为:year(curdate()),month(curdate()),day(curdate());