SQL练习之简单问题1(有答案)


 1 ##排序order by
 2 ##按照年龄排序 ,默认是升序
 3 ##asc:升序   desc:降序
 4 select * from student1 order by sage desc;
 5 ##把学号不为5的所有学生的学号降序排列。
 6 ##先条件后排序
 7 select * from student1 where sid<>5 order by sid desc;
 8 ##按照学号年龄降序排列的同时学号升序排列。
 9 ##先年龄后学号
10 select * from student1 order by sage desc,sid;
11 ##总结:优先级顺序:年龄>学号
12 ##结果:在排序过程中优先级高的(sage)且值重复的情况下,按照次优先级(sid)排序。
13 ##分组:group by 
14 ##查询学生表中,学生来自那些地方
15 select distinct saddress from student1 where saddress is not null;
16 select saddress from student1 where saddress is not null group by saddress;
17 ##统计每个地方有多少人
18 select saddress,count(saddress) 人数 from student1 where saddress is not null group by saddress;
19 ##统计男女各有多少人
20 select ssex ,count(ssex) 人数 from student1 group by ssex;
21 ##统计各个地方男女各有多少人
22 select saddress,ssex,count(sid) 人数 from student1 where saddress is not null group by saddress,ssex;
23 ##统计各个地方男女年龄为18岁的各有多少人
24 select saddress,ssex,count(sid) 人数 from student1 where saddress is not null and sage=18 group by saddress,ssex;
25 ##统计各个地方男女各年龄阶段的各有多少人
26 select saddress,ssex,sage,count(sid) 人数 from student1 where saddress is not null group by saddress,ssex,sage;
27 ##统计各个地方男女各年龄阶段的各有多少人,按照人数降序
28 select saddress,ssex,sage,count(sid) 人数 from student1 where saddress is not null group by saddress,ssex,sage order by count(sid) desc;
29 ##统计每个地方人数超过3人的地方
30 select saddress,count(*) 人数 from student1 where saddress is not null group by saddress having count(*)>3;
31 ##总结having是过滤分组后的结果的。
32 ##统计每个地方男女人数超过2人的地方
33 select saddress,ssex,count(*) 人数 from student1 where saddress is not null group by saddress,ssex having count(*)>2;
34 ##统计每个地方男生人数为大于等于2人的地方
35 select saddress,count(*) 人数 from student1 where saddress is not null and ssex='' group by saddress having count(*)>=2;
  1 #查询学生的性别和名字。
  2 select ssex,sname from student;
  3 #查询18岁以下的女性的名字。
  4 select sname from student where sage<18 and ssex='';
  5 #查询16岁以上或者女性的名字和电话。
  6 select sname,stel from student where sage>16 or ssex='';
  7 #查询学号不是7号的男性。
  8 #方式1:
  9 select * from student where sid<>7 and ssex='';
 10 #方式2:
 11 select * from student where sid!=7 and ssex='';
 12 #方式3:
 13 select * from student where not sid=7 and ssex='';
 14 #方式4:(子查询)in
 15 select * from student where sid in(select sid from student where sid!=7);
 16 
 17 
 18 #排序的 order by    desc:降序   asc:升序(可以省略不写)
 19 #把年龄升序排列
 20 select * from student order by sage asc;
 21 #查询学号不是7号的男性的结果降序排列。(3种方式)
 22 select * from student where sid!=7 and ssex='' order by sage desc;
 23 #总结:order by要放在where的后面,因为要对查询出的结果进行排序。
 24 #把学生表中的年龄升序排列且学号降序。
 25 select * from student order by sage asc;
 26 select * from student order by sid desc;
 27 select * from student order by sage asc,sid desc;
 28 #总结:先年龄升序,年龄相同的时学号才会降序排列。
 29 
 30 #模糊查询
 31 #查询姓张的。
 32 select * from student where sname like '张%';
 33 #查询名字中第二为‘梅’。
 34 select * from student where sname like '_梅%';
 35 #%:代表0个或多个
 36 #_:占位符。一个位置。
 37 #查询不姓张的。
 38 select * from student where sname not like '张%';
 39 
 40 #添加一个地址列,到学生表中
 41 alter table student add saddress varchar(30);
 42 
 43 #查询地址为空的。
 44 select * from student where saddress is null;
 45 #查询地址不为空的。
 46 select * from student where saddress is not null;
 47 
 48 
 49 #子查询(查询中嵌套查询)
 50 #执行顺序:先执行()中的,再执行()外面的。
 51 #查询和张三同岁的。
 52 #1.查询张三的年龄。
 53 #2.查询同岁的人
 54 select * from student where sage=(select sage from student where sname='张三');
 55 
 56 #查询学号为6 7 8 9 57 #方式1:
 58 select * from student where sid in(6,7,8,9);
 59 #方式2:
 60 select * from student where sid=6 or sid=7 or sid=8 or sid=9;
 61 #查询学号不为6 7 8 9 62 #方式1:
 63 select * from student where sid not in(6,7,8,9);
 64 #方式2:
 65 select * from student where sid!=6 or sid<>7 or sid<>8 or sid<>9;
 66 
 67 起别名
 68 分组
 69 
 70 
 71 #起别名
 72 #方式一:
 73 select sname as 名字 from student;
 74 #方式二:
 75 select sname 名字 from student;
 76 
 77 #聚合函数  max   min   sum   avg   count 
 78 #求年龄最大的人
 79 select max(sage) from student;
 80 #求学号的最小值
 81 select min(sid),sname,stel,sage,ssex from student;
 82 #求年龄的和
 83 select sum(sage) from student;
 84 #求年龄的平均值
 85 select avg(sage) from student;
 86 #有多号人
 87 select count(*) from student;
 88 
 89 #求比班级平均年龄大的人的信息
 90 select * from student where sage>(select avg(sage) from student);
 91 
 92 ######因为聚合函数不能出现的where条件中。
 93 
 94 #分组group by
 95 #按照年龄分组
 96 select * from student group by sage;
 97 #按照性别分组
 98 select * from student group by ssex;
 99 #查询再长沙的男生数量和女生数量
100 select count(sid),ssex from student where saddress='长沙' group by ssex;
101 #查询各个地方的男生数量和女生数量
102 select count(*),ssex,saddress from student group by ssex,saddress;
103 #查询各个地方的男生数量和女生数量,并按照数量降序排列
104 select count(*),ssex,saddress from student group by ssex,saddress order by count(*) desc;
105 
106 #当where条件和group by和order by 同时出现在一个题目中时的顺序:先where条件  group by  order by (具体题目根据具体的题目来)
107 
108 
109 #having语法结构 一般和group by一起使用。且出现在group by的后面,用来对分组后的结果进行过滤。
110 #查询各个地方的男生数量和女生数量,求大于等于3人的队
111 select count(*),ssex,saddress from student group by ssex,saddress having count(*)>=3;
112 
113 
114 #查询武汉的男生数量和女生数量,求大于等于3人的队
115 select count(*),ssex,saddress from student where saddress='武汉' group by ssex having count(*)>=3;