数据库高级查询语句与其基本运算
1. 高级查询命令
一、普通查询
- select ···聚合函数 from 表名
- where ···
- group by ····
- having ······
- order by ···
- linit ···
1.常用聚合函数
方法 | 功能 |
---|---|
avg(字段名) | 该字段的平均值 |
max(字段名) | 该字段的最大值 |
min(字段名) | 该字段的最小值 |
sum(字段名) | 该字段所有记录的和 |
count(字段名) | 统计该字段记录的个数 |
例子:比如我有以下该表
eg1:找出表中id值最大的一条记录
select sum(id) from user;
eg2:找出表中总的记录数
select count(id) from user;
2.group by :给查询的结果进行分组
group by 后字段名必须要为select 后的字段,查询字段和group by 后字段不一致,则必须对该字段进行聚合处理(聚合函数)
eg1:
select sum(id) from user group by id;
3.having语句: 对分组聚合后的结果进行进一步筛选
eg1::如对user表中密码为111111的用户进行查询,再进一步筛选为 状态是未激活
select * from user where password = '111111' group by id having state = '未激活';
查询结果为空
4.distinct语句:不显示字段重复值
1. select username from user
2. select distinct username from user
语句1 的结果是:
,语句二的结果是
5.查询表记录时做数学计算
运算符: + - * / %
eg:查询是把id变为2倍
select username,id * 2 from user
二、嵌套查询(子查询)
- 定义:把内层的查询结果做为最外层的查询条件
- 语法格式:select ···from 表名 where 条件(select··· )
eg: 把id小于平均id 的记录显示出来
select * from user where id < (select avg(id) from user);
三、多表查询
-
笛卡尔积
select 字段名列表 from 表名列表
-
多表查询
select 字段名列表 from 表名列表 where 条件
1.常用术语
- 冗余(Redundancy):存储两次数据,以便使系统更快速。
- 主键(Primary key):主键是唯一的。同一张表中不允许出现两个键值,一个键值只对应着一行。
- 外键(Foreign key):用于连接两个表。
2.表连接的方式
-
内连接
-
外连接
-
自连接
数据准备 -> 两张表如下:
内连接
内连接就是标间的主键与外键相连,只取得键值一致的,可以获取对方表中的数据连接方式。
语法: select 列名1,列名2,······ from 表1 inner join 表2 on 表1.外键= 表2.主键 where 条件语句;
select * from student inner join college on student.college_id = college.college_id;
结果为
外连接
与取得双方表中数据的内连接相比,外连接只能取得其中一方存在的数据,外连接又分为左连接和右连接两种情况。
-
左外连接
左外连是以左表为标准,只查询在左边表中的存在的数据,当然需要两个表中的键值一致。
语法为: select 列名1 from 表1 left outer join 表2 on 表1.外键 = 表2.外键 where 条件语句;
结果为:
可见,左外连接是以左边中的全部数据为基准进行查询。 奥利给和新二近视没有学校id 也可以被查出来。
-
右外连接
同理,右外连接是以右表作为基准,进行检索
select name,collegename from student right OUTER join college on student.college_id = college.college_id;
注意事项
:
- 内连接是抽取量表间键值一致的数据, 而外连接(左连接,右连接)时,是以其中一个表的全部记录作为基准进行检索。
- 左连接和右连接只有数据基准的区别,本质上是一样的,具体使用哪一种连接要根据情况而定。
- 无论是外连接还是内连接,在查询时最好使用【表名.列名】的方式指定所需要查询的列名,否则一旦两个表中出现了列名一直的数据时,可能会报错。
- 表的别名:在查询的过程中,如果遇到了特别复杂的数据表名,可以通过取别名的方式来实现,使用【AS】语句
自连接
本质上是把一张表当做两张表使用。所以在信息查询时需要进行对自身连接(自连接),则我们要为表定义别名
;