mysql 数据查询

语法形式:select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句];

字段或表达式列表:

  • 字段,自然是来源于“表”,则其必然依赖于from子句;
  • 表达式是类似这样一个内容:8,8+3, now()
    这里写图片描述
  • concat()函数是mysql中的系统函数,用于“连接”多个字符串;
    这里写图片描述

每个“输出项”(字段或表达式结果),都可以给其设定一个“别名”(字段别名)形式为: 字段或表达式 as 别名;

这里写图片描述

注意:实际上,表的字段并没有改变,而只是改变了“结果集”的字段名;

all 和 distinct

用于设定select出来的数据,是否消除“重复行”,可以不写,那就是默认值all:

  • all:表示不消除,即所有都出来,默认值;
  • distinct:表示会消除;
  • 使用all(跟不使用结果是一样的):
    这里写图片描述
    对比:
    这里写图片描述

from子句

from子句表示select部分从中“取得”数据的数据源——其实就是表

where子句

说明:

  • where子句就是对from子句中的“数据源”中的数据进行筛选的条件设定,筛选的机制是“一行一行进行判断”,其作用,几乎就跟各种语言中if语句的作用一样。
  • where子句依赖于from子句;
  • where子句中,通常都需要使用各种“运算符”;
  • 算术运算符: + - * / %
  • 比较运算符: > >= < <= =(等于) < >(不等于) ==(等于) !=(不等于)
  • 逻辑运算符: and or not
    这里写图片描述

对where子句的更进一步理解: is运算符:空值和布尔值的判断

形式含义
XX is null判断某个字段是“null”值——就是没有值
XX is not null判断某个字段不是“null”值
XX is true判断某个字段为“真”(true)
XX is false判断某个字段为“假”(false):0, 0.0, ‘’, null

所谓布尔值,其实是tinyint(1)这个类型的一个“别名”,本质上,只是判断一个数字是否为0;

between运算符:范围判断

用于判断某个字段的数据值是否在某个给定的范围——适用于数字类型;

语法:

  • XX between 值1 and 值2;

含义:

  • XX字段的值在给定“值1”和“值2”之间,其实相当于: XX >=值1 and XX <= 值2;

in运算符:给定确定数据的范围判断

语法:

XX  in  (值1,值2, 值3.....);

含义:

  • 表示字段XX的值为所列出的这些值中的一个,就算是满足了条件;这些值,通常是零散无规律的。
  • 它罗列出的数据,如果有一定的规律,则其实可以使用逻辑运算符或between运算符来代替。

like运算符:对字符串进行模糊查找

语法:

XX  like  ‘要查找的内容’

含义:

实现对字符串的某种特征信息的模糊查找。它其实依赖于以下2个特殊的“符号”:

  • % :它代表“任何个数的任何字符”;
  • _ :(下杠),它代表“一个任何字符”;

如果我要找某个字段中含“%”(或_)的行,怎么办?转义就ok:

  • \%:表示%这个字符本身
  • \ _ :表示_这个字符本身

group by 子句:分组

形式:group by 字段1 【desc|asc】, 字段2 【desc|asc】, .....

说明:

  • 分组是对“前述”已经找出的数据(即where已经筛选过了)进行某种指定标准(依据)的分组。
  • 同时,该分组结果,可以同时指定其“排序方式”:desc(倒序),asc(顺序);
  • 通常,分组就一个字段(依据),2个以上很少。

分组:就是将多行数据,以某种标准(就是指定的字段)来进行“分类”存放。

特别注意:

  • 分组之后的结果,一定要理解为:只有一个一个组了
  • 结果是:在select语句中的“输出(取出)”部分,只应该出现“组的信息”:
select  组信息1, 组信息2, .....  from  数据源   group  by  字段;

应用中,分组之后,通常只有如下几种可用的“组信息”了(即可以出现在select中):

  • 每一组的“数量”信息:就是用count(*)获得;
  • 原来数据中的“数值类型字段的聚合信息”,包括如下几个:
类型形式
最大值max(字段名)
最小值min(字段名)
平均值avg(字段名)
总和值sum(字段名)

having子句

having的作用跟where完全一样,但其只是对“分组的结果数据”进行筛选;

  • where对原始数据行进行筛选;
  • having对分组之后的数据行进行筛选;
    例:找出商品数超过2个的品牌信息:
    这里写图片描述
    结果为:
    这里写图片描述
  • count(*)是独立计算的结果:即对每一组进行原始数据行的统计,并用该条件进行筛选。
    例:
    这里写图片描述
    结果为:
    这里写图片描述

“恢复”(导入)数据:

mysql登录后:source “备份数据文件的完整路径”

order by 子句

  • 它用于将前面“取得”的数据以设定的标准(字段)来进行排序以输出结果。
  • 形式:
order  by  字段1asc|desc】, 字段2asc|desc】,......

说明:

  • 对前面的结果数据以指定的一个或多个字段排序;
  • 排序可以谁定正序(asc,默认值)或倒序(desc);
  • 多个字段的排序,都是在前一个字段排序基础上,如果还有“相等值”,才继续以后续字段排序;

limit子句

含义:

它用于将“前述取得的数据”,按指定的行取出来:从第几行开始取出多少行;

形式:

limit  起始行号, 要取出的行数;

说明:

  • 起始行号都是从0开始算起的;
  • 起始行号跟数据中的任何一个字段(比如id)没有关系;
  • 要取出的行数也是一个数字,自然应该是大于0的;
  • 有一个简略形式:limit 行数; 表示直接从第0行开始取出指定的行数,它相当于limit 0, 行数;

对整个select语句的一些总结

  • 虽然在形式上,select的很多子句都是可以省略的,但他们的顺序(如果出现),就不能打乱的:必须仍然按照给出的顺序写出;
  • where子句依赖于from子句:即没有from,就不能有where;
  • having子句依赖于groupby子句:即没有groupby,就不能有having;
  • select中的“字段”也是依赖于from子句;
  • 上述各子句的“内部执行过程”,基本上也都是按照该顺序进行的:
    这里写图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值