第三章 数据库查询

Posted 岁月如歌,往事随风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章 数据库查询相关的知识,希望对你有一定的参考价值。

1、前言
-》查询:就是对数据库内的数据进行检索、创建、修改或删除的特定请求。
-》数据库的基本查询:简单查询、分组查询、数据汇总、子查询、连接查询

2、select查询语法格式
select [distinct] [top n [percent]] *
from table1
join table2 on ... join table3 on ...
where ....
group by ... [with cube |rollup]
having ...
order by ...

-》为表起别名as
-》查询全部列、指定列
为列起别名as
-》查询前n部分数据:
top n 列名:表示查看前n行
top n percent 列名:表示查看前百分之几的数据
-》排序:asc升序 desc降序
order by 列名1 asc|desc,列名1 asc|desc...
-》消除重复行:distinct
-》条件查询:写在where后面
对行进行筛选,返回bool类型的值,如果某行中的列数据满足条件,则加入结果集,否则不出现在结果集中
比较运算符:=,>,>=,<,<=,!=或<>
between ... and ...表示在一个连续的范围内
in表示在一个非连续的范围内
逻辑运算符:and,or,not
模糊查询:用于处理字符串类型的值,运算符包括:like % _ [] ^
%与_写在[]中表示本身的含义
在[]表示一个连续的范围可以使用-
^写在[]内部的开头,表示不使用内部的任何字符
null的判断:使用is null或is not null,与其它值计算时返回null,排序时null被认为是最小
优先级:小括号,not,比较运算符,逻辑运算符
-》连接查询:join 表名 on 关联条件
内连接:inner join,两表中完全匹配的数据
左外连接:left outer join,两表中完全匹配的数据,左表中特有的数据
右外连接:right outer join,两表中完全匹配的数据,右表中特有的数据
完全外连接:full outer join,两表中完全匹配的数据,左表中特有的数据,右表中特有的数据
-》聚合函数:对行数据进行合并
sum,avg,count,max,min
一般是对数字类型的列进行操作
一条查询中可以同时写多个聚合函数,但是不能与普通列混写
聚合中的null问题:不参与计算
-》开窗函数:over()
将统计出来的数据分布到原表的每一行中
结合聚合函数、排名函数使用
-》分组:group by 列名1,列名2...
聚合函数一般结合分组使用,进行分组内的数据进行统计
根据指定列进行分组
分组后条件筛选:having ...

3、子查询
-》当一个查询依赖另一个查询结果时,就可以用子查询。
-》无关子查询
·比较子查询:将一个表达式的值与子查询返回的单值进行比较。
例:在“教学库”中查询C007号课的考试成绩比“郑辉”高的学号和姓名。
语句: use 教学库
select 学生表.学号,姓名 from 学生表,选课表
where 学生表.学号=选课表.学号 and 课程号=‘007‘
and 成绩>(select 成绩 form 选课表 where 课程号=‘007‘ /*2、确定郑辉成绩,并比较测试*/
and 学号=(select 学号 from 学生表 where 姓名=‘郑辉‘)) /*1、确定学号*/
·some、any、all和in子查询
用在子查询前,在比较测试时,any表示子查询集中任意一个,
all表示子查询集中的所有,
in表示在子查询集范围内。
-》相关子查询
·比较查询
获取员工工资低于所在部门的平均工资的员工信息
select empno,ename,sal,deptno from emp out
where sal <(
select avg(sal) from emp inner
where inner.deptno=out.deptno
)
·exists在关联子查询的使用
获取80年的员工号信息
select empno,ename,sal,hiredate,substr(hiredate,8,2)
from emp out where exists(
select empno from emp inner
where out.empno=inner.empno
and substr(hiredate,8,2)=’80’);

3、联合查询
-》将多个查询的结果集合并成一个结果集
-》联合要求:
结果集列数要一致
对应列的类型要一致
-》union(合并)、union all、except(返回不包含右侧的左侧查询)、intersect(返回不包含重复的左右两侧查询)
select 列名 from 表名1
union | except | intersect
select 列名 from 表名2
-》用处:在查询结果处显示汇总

4、数据库操作中使用select子句
·在insert语句中使用
insert into 副本表(列名1,列名2,···) select * from 源表
where 条件表达式
·在update语句使用
update 表名
set 列名=值
where 条件表达式
注:select子句用在条件表达式中
·在delete语句使用
delete 表名
where 条件表达式
注:select子句用在条件表达式中

5、快速备份
-》存储查询结果:
select 列名 into 新表名 from 源表名 where 查询条件
注意:select···into不能与compute子句一起使用
-》备份:
select 列名 into 新表名 from 源表名
备份表可以不存在,会新建表,表的结构完成一致,但是不包含约束
如果想只包含结构不包含数据,可以加个top 0
-》向已有表备份:insert into 备份表名 select 列名 from 源表名

6、内置函数
-》类型转换函数:
cast(expression as data_type):将任意类型转到到任意类型
convert(date_type,expression[,style]):将任意类型转到到任意类型
如果目标类型是字符串,则style可以设置格式,具体格式参考帮助
-》字符串函数:ascii(求字符的ascii值),char(根据ascii转到字符),
left,right,substring:字符串截取
len:返回字符串的长度
lower,upper:转小写、大写
ltrim,rtrim:去空格
注意:索引从1开始,而不是0
-》日期函数:getDate(获取当前日期时间),
dateAdd(日期加),
dateDiff(日期差),
datePart(取日期的某部分),year,month,day
注意:dateAdd、dateDiff、datePart的第一个参数使用双引号

以上是关于第三章 数据库查询的主要内容,如果未能解决你的问题,请参考以下文章

查询执行

MySQL数据操作与查询(第三章 下)

数据库系统概念笔记——第十三章:查询优化

《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集 (转)

数据库原理与应用(SQL Server)笔记 第三章 连接查询

第三章 MySQL高级查询