第十一章 查询
查询 11.1 查询语句的基本格式 11.2 单表查询 11.3 多表查询 11.4 查询聚合数据 11.5 嵌套查询 11.1 查询语句的基本格式 11.2 单表查询 11.3 多表查询 11.4 查询聚合数据 11.5 嵌套查询 11.6 保存查询结果
11.1 查询语句的基本格式 Select 字段列表 From 表名 [Where 条件表达式] [Group By 字段列表 11.1 查询语句的基本格式 Select 字段列表 From 表名 [Where 条件表达式] [Group By 字段列表 [Having 条件表达式]] [Order By 字段列表 [ASC|DESC]]
11.2 单表查询 单表查询 单表查询中几种方式 结果集中字段或查询条件中涉及的属性来源于一个数据表 输出表中所有列 选择部分列输出 11.2 单表查询 单表查询 结果集中字段或查询条件中涉及的属性来源于一个数据表 单表查询中几种方式 输出表中所有列 选择部分列输出 重新命名输出列的列名 去除重复记录 使用where子句 使用order by子句
单表查询 使用Where子句 列名=表达式 表达式形式 算术比较 逻辑组合(and ,or) between…and…(含相等) in like 通配符 %,_,[]
例11-1 查询出所有人员的基本情况
例11-2 查询出所有人员的姓名(EmpName)、性别(SexInfo)和年龄(EmpAge)
例11-3 查询各部门的名称和电话, 并以“部门名称”和“联系电话”表示
例11-4 查询出所有员工的职务(EmpRole)
例11-5 查询出所有编辑(EmpRole)的姓名
例11-6 查询出所有年龄EmpAge>30岁(含30)的男性员工的姓名和职务
例11-7 查询出所有年龄EmpAge在25岁至40岁之间(含25和40)的员工的姓名、职务和年龄
例11-8 查询出所有年龄EmpAge不在25岁至40岁之间(不含25和40)的员工的姓名、职务和年龄
例11-9 查询出由肖盈或秦娟或王玲玲(DesignerName)设计的期刊的编号
例11-10 查询出姓“张”的员工的名单
例11-11 查询出具有“核稿”权限(PermitStr)的人员姓名及职务
例11-12 查询出电话号码DepTel第六位为“2”的部门的名称、负责人姓名及电话
例11-13 查询出2004年发行的期刊名称(MagName)为《北京信息周报》第1至5期的编号和设计者姓名
例11-14 请按年龄(EmpAge)由大到小 输出所有员工情况
例11-15 请按姓名(EmpName)次序输出所有员工情况
例11-16 请按部门升序(DepId)输出所有员工情况,并按年龄(EmpAge)降序排序
11.3 多表查询 多表查询 连接表的先决条件 连接方法 注意 结果集中字段或查询条件涉及的字段来源于多个表 涉及到的表都是有关联关系的 11.3 多表查询 多表查询 结果集中字段或查询条件涉及的字段来源于多个表 连接表的先决条件 涉及到的表都是有关联关系的 通过外键实现 连接方法 在from子句中列出所有表 在where子句中指定连接条件 注意 对于同名字段引用时要有表名 n个表连接应有n-1个连接条件
例11-17 查询出张斌所在部门的名称
例11-18 查询出刊登文章题目(DocTitle)为“去国外旅游”一文的期刊名称和该期设计者的姓名、年龄和职务
11.4 查询聚合数据 常用的聚合函数(集合函数) 使用Group by 使用Having 注意 11.4 查询聚合数据 常用的聚合函数(集合函数) Sum,avg,min,max,count(*),count 使用Group by 分组求聚合函数 使用Having 筛选条件中含有聚合函数 注意 正确选择输出字段 聚合函数不考虑空值( count(*)除外)
例11-19 计算出员工的平均年龄 和员工人数
例11-20 计算出员工的平均年龄和员工人数, 并分别以“平均年龄”和“员工人数”表示
例11-21 按性别SexInfo分别计算出员工的平均年龄和员工人数,并分别以“平均年龄”和“员工人数”表示
例11-22 按性别分别计算出部门编号为1的员工的平均年龄和员工人数,并分别以“平均年龄”和“员工人数”表示
例11-23 查询出部门编号DepId为2的部门名称及员工的平均年龄(以“平均年龄”表示)
11.5 嵌套查询 嵌套查询 子查询 嵌套查询的用法 在Where子句的表达式中出现另一个查询的情况 在一个查询中嵌套的另一个查询 11.5 嵌套查询 嵌套查询 在Where子句的表达式中出现另一个查询的情况 子查询 在一个查询中嵌套的另一个查询 嵌套查询的用法 可用于解决多表查询 当where子句中需使用集合函数时可使用子查询
嵌套查询 子查询结果集为多条记录时使用in 去掉重复记录时使用exists not in和not exists的区别 (尽量避免使用distinct) not in和not exists的区别 not in针对一列
例11-24 查询出年龄EmpAge大于平均年龄的员工姓名及年龄
例11-25 查询出张斌所在部门的名称
例11-26 查询出期刊编号(MagId)为bxz200101至bxz200106的设计者姓名和职务
例11-27 查询出具有与“王涓”编辑的文章所属栏目相同的期刊名称
11.6 保存查询结果 将查询结果保存到一个新的数据表中 Select 输出列表 into [#]新表名 from 表名 where 子句… 11.6 保存查询结果 将查询结果保存到一个新的数据表中 Select 输出列表 into [#]新表名 from 表名 where 子句… 可以将结果保存到变量中 Select @变量名=列名[, @变量名=列名] from 表名 显示变量 Select @变量名
例11-28 将文章字数多于平均字数的文章 标题保存到临时表temp_title中
例11-29 将期刊编号MagId为“bxz200401”的文章总字数及篇数分别保存在变量sumwords和number中