MYSQL数据 所有表都是由一个或多个列组成的
列是有title的
每一行 存储了一个完整的包含所有列(字段)的信息行 是一个记录 一个完整的记录
检索的时候:得到的 数据是 所有数据行的 这个字段 信息
【列是字段 行是记录】
>> 检索出来的字段是数据表的所有该字段 ALL
【select】
select 检索的理解 不带where :
select * from table
1、检索的标的是整张表 检索出来之后 select之后的函数和方法 可以进行数据的二次处理和加工
带有where的检索
做了一个过滤 是对整张表的查询和拉出数据之间的一个 筛选过程 过滤
在拉取 检索的时候 不检索所有的行
过滤的方式是 通过限定的条件 操作符 每一个行的字段和限定条件的的一个比较
这个比较的过程也是 一行一行的比较 单张表的时候 行与行之间是有独立性的
select * from table where zd = != <> < > <= >= is NULL 等等的判断
【过滤数据】
对检索出来的行数据进行一个筛选
前面检索的时候
筛选:不要所有的zd字段,只要指定的字段
如何指定? 指定搜索条件过滤 根据字段的值来筛选 排除该字段所在的 行(记录) 从而排除 zd
select zd from table where zd = x;
select 最大整体过滤字段 from where 过滤字段里面的单个元素
具体的筛选的比较操作符就
!= 和 <> 一样的
between 5 and 10 之间 左开 右开区间
1、可以直接对目标字段进行筛选
2、也可以通过其他的字段来筛选目标字段
【ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后】
对筛选出来的数据 最后进行order by 排序
select zd from table where zd = x ordr by zd
【SQL过滤与应用过滤? 放在哪一端来过滤】
1、数据也可以在应用层来过滤,客户机过滤 造成网络带宽的浪费 降低客户机的性能
2、放在近端处理是比较好的
【mySQL在执行匹配时默认不区分大小写】
where name = "fuse"
>>Fuse
where binary name = "fuse" binary mysql 区分大小写
【空值 检查】 NULL
NULL 无值(no value),它与字段(0、空字符串或仅仅包含 空格不同)
where zd is NULL
备注:NULL 无值(no value)不等于 0、空字符串或仅仅包含空格不同
【多条件过滤】
逻辑操作符 AND OR
逻辑操作符在where 后面 组合使用
AND在计算次序中优先级更高
解决操作符优先级的方法: 用括号来处理()
IN (V,V,V,V,V)
IN 和 OR 是等效的
有点:
1、比or看起来更简洁 操作符少
IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建
立WHERE子句。
NOT 取反条件
NOT IN (V,V,V,V,V)
NOT BETWEEN (V,W)
NOT EXISTS()
【使用通配符来进行过滤】
LIKE + 通配符
前述的过滤条件都是已知的 NOT IN (V,V,V,V,V) =v BETWEEN (V,W)
like 用于模糊匹配 LIKE是谓词而不是操作符
1、%任何字符出现 任意次数
like "a" 匹配 字符串 a 不使用通配符 like 是等号的意思
like "a%" 匹配末尾 找出所有以词a起头的行
like "%aaaa"
like "%aaaa%" '%anvil%'表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符
【任何字符 任意次数 包括0】
【不匹配 NULL 注意未空格不会和字符串匹配 匹配后面+ %】
2、_ 匹配单个字符字符出现
like _ ton >> 1 ton , 2 ton ,a ton 只是匹配一个字符
【通配符使用注意优化】
通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长 * 模糊匹配比精准匹配更花费时间
不过度使用
不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的