注意事项 - 多条SQL语句以分号(;)结尾 - 代码书写规范 - mysql不区分大小写,但习惯上,关键字用大写,表名等非关键字用小写 - SQL语句中忽略所有空格,可以在同一行写出也可以分多行,一般使用多行 子句执行顺序 SELECT FROM WHERE GROUP BY HAVING ORDER BY LIMIT 基本SELECT检索 检索所有列(*) 检索并返回不重复结果(DISTINCT) 根据所有字段去重,而不是只针对某一字段,必须放在所有列名前 限制结果返回行数(LIMIT) 筛选条件(WHERE) 多个条件之间可用AND或OR连接,不限个数,但需注意计算顺序,优先计算AND,可以用括号来明确计算顺序创建计算字段 拼接字段 MySQL使用Concat()函数实现拼接,而多数DBMS采用其他方式 删除空格 使用别名 使用中文别名时使用单引号,’别名’ 算数计算 可使用 + - * / (),注意,包含NULL的运算结果一定为NULL 聚合排序分组(GROUP BY & HAVING)排序(ORDER BY) GROUPING
被汇总的行中如有NULL,展示的结果可能不好区分其是否为合计行,可使用GROUPING函数优化该问题
CASE所有分支返回值必须一致,因此需使用CAST对日期进行类型转换CUBE
用于条件时,子查询中只能有一个字段,当子查询的结果只有一个值时,where后可以使用比较运算符,结果有多个值时,where后只能用in或not in 关联子查询 函数 用日期做为WHERE条件时,尤其注意判断两侧口径一致,例如,不要用日期时间 = 日期,返回结果很可能不符合预期 日期函数在不同数据库中差异较大 谓词 MySQL仅支持正则表达式中的部分功能,详见正则表达式专题:https://www./anqh/ 0a6f043c133d45e9a5cefbc85afacb51 CASE表达式 可用于任意允许使用表达式的地方,且CASE子句中可以使用谓词、子查询等 CASE各分支返回的数据类型需保持一致 格式 基本用法 CASE分组 注意:在ORACLE等数据库中,不能在GROUP BY中使用字段别名,需使用以下方式 CASE更新 相比于分多条SQL执行,该方式更为准确,且速度更快。避免一笔数据先后被执行两次,造成数据错误,(例如:某人薪资为300000,先执行语句变为270000,又执行语句变为324000) 转二维表 集合运算纵向运算并集(UNION) 交集(INTERSECT) 差集(EXCEPT) Oracle中,使用MINUS关键字 横向运算:联结(JOIN)等值联结 内联结 外部联结 交叉联结 无需指定ON,直接进行笛卡尔积,形成m*n行 自联结 理解:将同一个表引用两次,以不同别名命名,条件中 窗口函数
基本语法
专用窗口函数RANK排序 聚合函数 将聚合函数作为窗口函数使用时,为累计运算,即逐行累加 SUM累加 AVG累计平均 COUNT累计计数 MAX/MIN逐行最值 框架范围
与like正则表达式的区别 1、全文本搜索速度快,且能智能返回匹配度 2、需先建立全文本索引,才能进行搜索 3、并非所有的数据库引擎均支持全文本搜索,例如,在MySQL中InnoDB引擎不支持,而MyISAM支持全文本索引 本质上,全文本搜索是根本预先创建好的索引,按搜索时的检索条件创建一个表示匹配度的计算字段,因此在进行where时,只返回匹配度不等于0的值 全文本搜索的布尔方式(IN BOOLEAN MODE) MySQL支持全文本搜索的布尔方式,该方式不需要提前建立索引,可直接使用
|
|