mysql高级查询

数据库高级查询语句与其基本运算

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);

三、多表查询

  1. 笛卡尔积

    select 字段名列表 from 表名列表
    
  2. 多表查询

    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;

结果为

外连接

与取得双方表中数据的内连接相比,外连接只能取得其中一方存在的数据,外连接又分为左连接和右连接两种情况。

  1. 左外连接

    ​ 左外连是以左表为标准,只查询在左边表中的存在的数据,当然需要两个表中的键值一致。

    语法为: select 列名1 from 表1 left outer join 表2 on 表1.外键 = 表2.外键 where 条件语句;
    

    结果为:

    可见,左外连接是以左边中的全部数据为基准进行查询。 奥利给和新二近视没有学校id 也可以被查出来。

  2. 右外连接

    同理,右外连接是以右表作为基准,进行检索

    select name,collegename from student right OUTER join college on student.college_id = college.college_id;
    

注意事项:

  • 内连接是抽取量表间键值一致的数据, 而外连接(左连接,右连接)时,是以其中一个表的全部记录作为基准进行检索。
  • 左连接和右连接只有数据基准的区别,本质上是一样的,具体使用哪一种连接要根据情况而定。
  • 无论是外连接还是内连接,在查询时最好使用【表名.列名】的方式指定所需要查询的列名,否则一旦两个表中出现了列名一直的数据时,可能会报错。
  • 表的别名:在查询的过程中,如果遇到了特别复杂的数据表名,可以通过取别名的方式来实现,使用【AS】语句

自连接

​ 本质上是把一张表当做两张表使用。所以在信息查询时需要进行对自身连接(自连接),则我们要为表定义别名;

原文地址:https://www.cnblogs.com/wfszmg/p/13708017.html