单表查询
一:单表查询的语法
select 字段1,字段2 from 表名 where 条件 group by having order by limite
二:关键字的执行优先级
from ---找到表 where 条件,按照where指定的约束条件,从表中取出一条条记录 group by 分组整理,没有group by ,整体作为一组 having 过滤,将分组的结果又一次的筛选 select 选择出所需要的内容 distinct 去重 order by 排序字段 limiit 限制结果的显示条数,limit和order by 经常一起使用
三:简单查询
1:select字句指定查询结果---就是要输出的字段名
2:select可以查询多个字段名,中间用逗号隔开
3:使用now()函数来显示当前的时间
select departno as 部门,now() from department;
4:查询的结果显示新的列名有2种方法
1:字段名 as 别名 2:字段名 别名
select departno as 部门 from department; select departno 部门 from department;
5:输出的列名不能有重复的,使用distinct函数
语法
select distinct 列名
输出的系号不能有重复的
select distinct departno from course;
四:使用where字句约束
where字句可以使用运算符
比较运算符 | > >= < <= <> != !> !< | 比较字段值的大小 |
范围运算符 | between ..and not betweeen...and | 判断字段值是否在指定范围内 |
列表运算符 | in ,not in | 判断字段值是否在指定的列表中 |
模式匹配运算符 | like ,not like | 判断字段值是否和指定模式字符串匹配 |
空值判断运算符 | is bull ,is not null | 判断字段值是否为空 |
逻辑运算符 | and,or ,not | 用于多个条件表达式的逻辑连接 |
都是在where语句中发挥作用的
每个运算符使用
比较运算符的使用
查看课程编号>002的课程
select * from course where couno > '002';
范围运算符的使用
查询有哪些课程是在课程编号001和003之间的课程
select couname from course where couno between '001' and '005';
列表运算符的使用
查询学生的学号在一个范围内
select * from student where stuno in ('00000001','00000006','00000008');
模式匹配运算符的使用(模糊查询)
就是在指定的条件不是很明确的条件下,使用like进行运算与字符串进行匹配
通配符
% | 匹配任意长度0或者多个的字符串 |
_ | 匹配单个字符串 |
通配符和字符串必须要在单引号里面
like '张%' 搜索以张开头的名字
like '%张% 匹配有张的名字'
like '张%' 匹配最后一个以张结尾的
like '_张%' 表示匹配的第二个字符为必须为张
如果搜索的字符串有通配符的话,使用转义字符就可以了 \_
搜索以陈开头的名字
select * from student where stuname like '陈%';
空值运算符的使用
就是来判断指定字段的值是否为空值
查看photo中有空值的数据
select * from student where photo is null;
逻辑运算符的使用
and or not
and 连接2个表达式 都成立才行
or 有一个成立就执行
not 给条件取反就执行
查看种类是人文并且学分小于1.5
select * from course where kind = '人文' and credit < 2;
总结一下,where语句就是筛选,匹配列名符合什么条件
所以格式就是 字段 筛选条件
五:order by语句
默认是(asc)升序,desc为降序
中文字符的排序
order by convert(teacher useing gbk) desc;
匹配先学号升序,在按志愿号降序
select * from student order by stuno desc,classno asc;
中文排序
order by convert(teacher using gbk) desc,
六:case语句
对于符合筛选的条件的语句使用case语句重新定义一个·列
格式
select 字段1,字段2, case when 字段1= then '' when 字段2= then '' else '' end as 新列名 from
核酸的时间
select classno,classname, case when classno = '20000%' then '9.13上午8点做核酸' when classno = '2001%' then '9.13上午10点做核酸' else '9.13下午2点做核酸' end as 核酸的时间 from class;
七:分组查询
1:什么是分组
1)分组发生在where之后的,就是先经过了一次筛选之后的记录进行分组
2)分组就是将所有的记录按照某个相同字段进行归类,比如职位分组,或者按照性别分组
3)分组的关键字:各,每,分别
2:group的使用
1)单独的使用
通常与集合函数一起使用,负责查询这个不同组总共有多少个记录选择了
查询各个系的课程总数
select departno,count(couname) as 各个系的课程总数 from course group by departno;
2:与group_concat()函数一起使用
将组里面的记录进行拼接,就是列出这个组里面有多少个人选择
select departno,count(couname),group_concat(couname) from course group by departno;
3:group by与集合函数的使用
集合函数的种类
count(列名) | 就是返回查询到的记录数,可以使用count(*),查询返回条件的行数,包括空值的行,不能与distinct一起使用 |
sum(列名) | 这个就是求和,计算数据的总和,这个字段为数值类型,不能使用count(*) |
avg(列名) | 求这个数据的平均值(这个字段为数值类型) |
max(列名) | 计算指定字段数据中的最大值 |
min(列名) | 计算指定字段数据中的最小值 |
这个查询就是查询这个类组,就是有多少个人去访问,并且就是计算出一种结果,利用集合函数和分组,迅速的查找出来结果,列如,老板要你统计一下这个情报小组里面有多少个人,就可以使用这种办法
3:having的使用
优先级: where------group by -------- having
执行的顺序如下
就是先进行where筛选出来后,在来进行group分组,然后执行集合函数(在各个组里面执行),最后执行having进行筛选
就是having也是后面加上字段,来进行筛选的出来的
4:having与where的区别
就是where发生在分组之前的,having发生在分组之后的
where不允许使用集合函数,having允许使用集合函数
5:保留小数点的操作
cast(avg(字段) as decimal(5,2)) 就是5指的一共有几位(包括小数点后面的),2指的就是保留小数点后2位
八:limit语句
用于限制显示条数的记录,最后一个执行的
格式:
limit offset n
offset就是从第几行还是检索,默认是0
n:就是检索多少条记录
select departno,sum(willnum) from course group by departno limit 1;
可以与order by 实现分页的效果
9:单表查询的总结
就是输出的东西在一个表中,不需要多张表,
集合函数(count,sum,max,min,avg)都是在select句子中使用的
where就是筛选一个条件,运算符在这里面使用,像模糊查询,比较运算符