单表查询

一:单表查询的语法

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就是筛选一个条件,运算符在这里面使用,像模糊查询,比较运算符

 

 

 

 

 

 

 

 

  

posted @ 2023-12-02 21:28  q_7  阅读(38)  评论(0编辑  收藏  举报