而今

导航

第五章 数据表的数据操作(DML)(第一部分)

此篇是select的基本操作

5.1 查询数据

  查询就是对已经存在于数据库中的数据按特定的组合,条件或次序进行检索

  查询功能是数据最基本也是最重要的功能

  5.1.1 查询单列数据(select)

    查询学生信息表中的学号

use stu
-- 查询学生信息表学生姓名
select 姓名
from 学生信息表

  5.1.2 查询多列数据

    查询学生学号,姓名,籍贯

select 学号,姓名,籍贯
from 学生信息

  5.1.3 查询所有列

    查询学生信息表学生的全部信息

select *
from 学生信息表

  5.1.4 使用去重查询(distinct 关键词查询)

    如果用户希望在查询返回结果中删除重复的行就可以在select句中使用distinct关键字

-- 用法 select distinct 列名 from 表名称
select distinct 籍贯
from 学生信息表

  5.1.5 使用top关键字查询

    top语句用于规定要返回的记录的数目

    例子:查询前8列的学生籍贯的信息,且要求去重

-- 语法 select top num * | column from table
select distinct top 8 籍贯
from 学生信息

    例子:查询前三条记录在学生表中

select top 3 * 
from 学生信息表

  5.1.6使用别名查询(本质:将查询结果返回表的列名重命名)

    使用select语句查询数据的时候,可用别名的方法根据需要对数据显示的标题进行修改,主要由三种方法

      1. 在列的表达式中给出别名

-- 语法: select 列名 '别名' from 表名
select 学号 'NO' from 学生信息

      2.使用'='表达式

-- 语法:select '别名' = 列名 from 表名
select 'NO' = 学号 from 学生信息表

      3.使用as关键字(比较常用的形式)

-- 语法: select 列名 as '别名' from 表名
select 学号 as 'NO' from 学生信息表

  5.1.7 在查询的结果进行再次的计算

    例: 将学生信息表中查询学号和成绩,成绩-10的三列数据

select 学号, 成绩 as '调整前成绩' , 成绩-10 as '调整后成绩'
from 学生信息表

 

5.2 选择查询

  一般查询都是针对全表所有行进行查询,

  但如果我们只是从整个表中选出满足指定条件的行,这就要用到where子句

/*
选择的基本语法
select 列名
from 表名
where 选择条件
*/

  5.2.1选择条件中需要用到的比较运算符

  =(等于) >(大于) <(小于) >=(大于且等于) <=(小于且等于) <>(不等于) !>(不大于) !<(不小于) !=(不等于)

    利用比较运算符在选择条件的运用例子

    例:查询籍贯是北京的学生信息

select *
from 学生信息 
where 籍贯 = 'beijing'

    例:查询成绩及格学生信息情况

select *
from 成绩表
where 成绩>=60

  5.2.2选择条件中需要用到的逻辑运算符

   and 两边条件同时满足

  or 两边条件满足其中一个即可

    利用逻辑运算符在选择条件的运用例子

    例:查询籍贯是北京且性别为男的学生信息

select *
from 学生信息表
where 性别 = '' and 籍贯 = 'beijing'

    例:找出籍贯为安徽或北京的学生

select *
from 学生信息表
where 籍贯 = 'anhui' or  籍贯 = 'beijing'

  5.2.3 范围搜索条件

    范围搜索返回介于两个指定值之间所有值,可分为包括范围和排他范围两种类型

    between 值1 and 值2, not between 值1 and 值2 

    between 的选择条件范围的左右边界值都包含在内

      例:查询成绩在70到90(包含70和90)之间的学生信息

select *
from 成绩表
where 成绩 between 70 and 90

  5.2.4 列表搜索条件

    使用关键字in构成列表中来匹配对应关系表中匹配的行

    例:找出籍贯为安徽或北京的学生

select *
from 学生信息表
where 籍贯 in ( 'anhui' , 'beijing')

    tip:

     在很多时候用in比用=好因为它允许多个值和一个值,而=只能允许一个值,如果套用字句由多个结果,使用=就会出现语法错误

    属性 in (值1,值2)   相当于  属性 = 值1  or  属性 = 值2 

    属性 between 值1 and 值2 相当于 属性 >= 值1 and 属性 <= 值2

  5.2.5 选择条件中的字符匹配

    Like关键字搜索于指定模式匹配的字符串,日期或时间值.

      模式包含要搜索的字符串,字符串中可包含4种通配符的任意组合

通配符  含义
% 替代零个或多个字符
- 仅替代一个字符
[] 代替指定范围内的单个字符,[]中可以是单个字符(如[acef]),也可以是字符范围(如[a-f])
[^] 代表不在指定范围内的单个字符,[^]中可以是单个字符(如[^acef]),也可以是字符范围(如[^a-f])

 

 

 

 

 

      例:查询出名字当中包含大或小的学生

--第一种写法
select *
from 学生信息表 
where sname like '%大%' or sname like '%小%'

--第二种写法
select *
from 学生信息表 
where sname like '%[大小]%'

 

      例:查询出姓张或姓王且名字为一个字

select *
from 学生信息表
where sname like '[王张]_'

  

  5.2.6 涉及空值查询

    空值(null)在数据库中表示不确定的值

    如学生选修课程后还没有考试是,考试成绩就是null,因为成绩还不能确定

    判断某值是否为null值,不能使用普通的比较运算符

    判断取值为空的语句格式为

      列名 is null 

    判断取值不为空的语句格式为

      列名 is not null

 

5.3 聚合函数

  聚合函数对一组值执行计算,并返回单个值.T-SQL提供下列的聚合函数

聚合函数的语法 作用
sum([distinct]<列名>) 计算列值总和
avg([distinct]<列名>) 计算列值平均值
max([distinct]<列名>) 求列的最大值
min([distinct]<列名>) 求列的最小值
count(*) 统计表中的记录个数
count([distinct]<列名>) 统计属性的列值个数

 

 

 

 

 

 

上述函数中处理count(*)外,其他函数在计算过程中均忽略null值

  5.3.1 在select中使用聚合函数

    语法 select 聚合函数 from 表名

    例:求成绩表中的总成绩

select sum(成绩) as '总成绩'
from 学生成绩表

    例:求成绩表中的平均值

select avg(成绩) as '平均成绩'
from 学生成绩表

    例:求学生成绩表中的最大值

select max(成绩) as '最高分'
from 学生成绩表  

    例:求学生成绩表中的最小值

select min(成绩) as '最低分'
from 学生成绩表

    例:求学生信息表中学生总人数

select count(*) as '学生总人数'
from 学生信息表

    例:求学生成绩表中学生总人数(表中每个学号对应多个成绩)

select count(distinct 学号) as '学生总人数'
from 学生信息表

 

5.4 数据分组

  针对的列值不能是唯一的

  group by 语句用于结合聚合函数中的函数,比如向学生成绩表中1个学号对应多个学科成绩,那么我们学号来给每个学生分组,然后结合特定的聚合函数来求想要的数据

  例:查询每个年级的总人数和班级数量

/*
语法格式:
seelct 列名, 聚合函数中的合计函数
from 表名
group by 列名    --注意这里的列名于select开头的列名一致
*/
select 年级,sum(人数) as 年纪总人数 ,count (班级编号) as 班级数量
from 班级信息
group by 年级

  例:查询每门课的最高分和最低分

select 课程编号 , max(成绩) as '最高分' , min(成绩) as '最低分'
from 成绩表
group by 课程编号  

  5.4.1 分组语句中的条件查询 

    having通常与group by 子句一起使用,相当于一个用于分组的where自居,指定组的搜索条件.

    having子句可以包含聚合函数,但是where不可以

select 学号,sum(成绩) from 成绩表
group by 学号
having sum(成绩)<600

 

5.5 对查询结果进行排序

  使用关键字 order by 语句用于对指定的结果进行排序

  order by 语句默认升序

  降序排序可以使用 desc关键字  升序关键字为asc

    例:对成绩表中的数学科目进行降序排序

select * 
from 成绩表
where 科目 = '数学' 
order by 成绩表[desc] 

  

5.6 select语法总结

select select_list

from table_list

[where search_conditions]

[group by group_by_list]

[having search_conditions]

[order by order_list [ASC | DESC]]

 

其中顺序不能弄反

 

  

posted on 2019-11-14 20:58  而今  阅读(294)  评论(0)    收藏  举报