数据库练习题(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());

posted @ 2016-12-09 12:46  momo_2016  阅读(604)  评论(0编辑  收藏  举报