1. 通配符得使用:

%:匹配0或多个字符;
_:匹配任意字符;
[ ]:匹配[]中任意一个字符;
[- ]匹配[]中连续多个字符;
[^ ]:不匹配[ ]中任意一个字符;

查询大学中含有“北京”两个字得大学。
select device_id,age,university from user_profile WHERE university like ‘%北京%’

例23.查询学生表中姓‘张’的学生的详细信息。 SELECT * FROM 学生表 WHERE 姓名 LIKE ‘张%’

例24.查询姓“张”且名字是3个字的学生姓名。 SELECT * FROM 学生表 WHERE 姓名 LIKE '张__’ 如果把姓名列的类型改为nchar(20),在SQL Server 2012中执行没有结果。原因是姓名列的类型是char(20),当姓名少于20个汉字时,系统在存储这些数据时自动在后边补空格,空格作为一个字符,也参加LIKE的比较。可以用rtrim()去掉右空格。 SELECT * FROM 学生表 WHERE rtrim(姓名) LIKE ‘张__’

例25.查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。 SELECT * FROM 学生表 WHERE 姓名 LIKE '[张李刘]%’

例26.查询学生表表中名字的第2个字为“小”或“大”的学生的姓名和学号。 SELECT 姓名,学号 FROM 学生表 WHERE 姓名 LIKE ‘_[小大]%’

例27.查询学生表中所有不姓“刘”的学生。 SELECT 姓名 FROM 学生 WHERE 姓名 NOT LIKE '刘%’

例28.从学生表表中查询学号的最后一位不是2、3、5的学生信息。 SELECT * FROM 学生表 WHERE 学号 LIKE ‘%[^235]’

2. 分组关键字
2.分组语句的一般形式:
[GROUP BY ]
[HAVING ] —条件过滤
GROUP BY子句中的分组依据列必须是表中存在的列名,不能使用AS子句指派的结果集列的别名。
带有GROUP BY 子句的SELECT语句的查询列表中只能出现分组依据列或统计函数,因为分组后每个组只返回一行结果。

例34.统计每门课程的选课人数,列出课程号和人数。

SELECT 课程号, COUNT(课程号) AS 选课人数
FROM 成绩表
GROUP BY 课程号
该语句首先对查询结果按课程号的值分组,所有具有相同课程号值的元组归为一组,然后再对每一组使用COUNT函数进行计算,求得每组的学生人数。

例35.查询每名学生的选课门数和平均成绩。

SELECT 学号,
COUNT(*) 选课门数,
AVG(成绩) 平均成绩
FROM 成绩表
GROUP BY 学号
题解
题目:现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。

SELECT gender,university,COUNT(*)user_num,AVG(active_days_within_30)avg_active_days,
 AVG(question_cnt)avg_quesition_cnt
 FROM user_profile
 GROUP BY gender,university

2.1.条件过滤

题目:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。

SELECT university,AVG(question_cnt)avg_quesition_cnt,AVG(answer_cnt)avg_answer_cnt
 FROM user_profile
 GROUP BY university
 HAVING avg_quesition_cnt < 5 OR avg_answer_cnt < 20