查询Java学科,考试分数前三名的学员信息 select name,score,course from t_student_score where course='java' order by score DESC limit 0,3 #对成绩倒序排序,去前3条记录 查询总分超过180的学员姓名及总分数 select name,sum(score) from t_student_score GROUP BY name HAVING sum(score)>180 #聚合函数不能放在where子句里面 行列转换,表有字段,学员姓名,科目,分数
要求转换成
select NAME from t_student_score t1 GROUP BY t1.name; select NAME, ( select score from t_student_score t2 where t2.course='java' and t2.name=t1.name ) as 'java', ( select score from t_student_score t2 where t2.course='SQL' and t2.name=t1.name ) as 'SQL' from t_student_score t1 GROUP BY t1.name; 查询学生成绩表中,总分数前三名的学员信息 select s.name,sum(s.score) from t_student_score s group by s.name order by sum(s.score) desc limit 0,1 从一张考勤表中,找出员工每天的上班和下班的打卡时间。 表中有字段,ID,name,time(打卡时间)效果如下:SQL如下:
select name,date(time),min(time) as '上班时间',max(time) as '下班时间' from t_card_record group by date(time),name 从订单表中,查询出2018年,订单总金额超过10000的用户,假设该表有如下字段,ID,order_no,user_id,order_time,total_money select o.user_id,sum(o.total_money) from t_order o where o.order_time BETWEEN '2018-01-01' and '2018-12-31' group by o.user_id HAVING sum(o.total_money)>10000 查询2018年入职的员工数量,假设员工表的字段有,ID,employee_no,name,entry select count(1) from t_employee where entry BETWEEN '2018-01-01' and '2018-12-31' 如何查询爱奇艺2018年上架的类型为科幻,爱情,动作的电影信息。 select * from t_film where publish_time BETWEEN '2018-01-01' and '2018-12-31' and type in('科幻','爱情','动作') 假设有两张表,A表有100条记录,B表有10000条记录,做表关联查询时,哪种效率更高?以下两条SQL查询语句,哪种效率更高?
EXPLAIN select * from t_big b inner JOIN t_small s on b.id=s.id; EXPLAIN select * from t_small s inner join t_big b on s.id=b.id; 优化器会内部做对比 每一次在树里面做一次查找都是log(n),所以对比的是10000*log(100)和100*log(10000) 如何快速复制一张现有表的数据到另一张表 insert into t_other(id,name) select id,name from t_small