mysql sql知识总结
SQL知识总结:
检索不同的行:
SELECT DISTINCT VEND_ID FROM PRODUCTS;
DISTINCT 应用于所有的列
===================
限制结果:
SELECT PROD_NAME FROM PRODUCT LIMIT 5,5;
从0开始
====================
ORDER BY
SELECT * FROM a ORDER BY b,c;
降序 DESC
====================
过滤
SELECT a FROM b WHERE c <> d;
空值检查
SELECT a FROM b WHERE c IS NULL;
组合过滤先后顺序
处理 and 优先于 or
SELECT a FROM b WHERE c OR d AND e;
SELECT a FROM b WHERE (c OR d) AND e;
IN 的使用:
SELECT a FROM b WHERE c IN(x, y, Z) ORDER BY d;
IN 的优点:
清楚直观 次序管理 执行更快 动态创建
=====================
通配符
%:出现任意次,可为0
SELECT a FROM b WHERE a LIKE 'jet%'
_: 单次
通识符置于首部搜寻最慢!
======================
sql正则表达式
对比 LIKE 和 REGEXP
LIKE匹配整个列,REGEXP匹配出现在列值的
| : OR
[] : 匹配特定字符
^ : NOT
. : 任意字符
\\ : 特殊字符前导
* : {0,}
- : {1,}
? : {0,1}
{n, m} 匹配数目的范围
SELECT a FROM b WHERE a REGEXP '[[:digit:]]{4}'
ORDER BY a;
定位符
^ : 文本的开始
$ : 文本的结尾
[[:<:]] : 词的开始
[[:>:]] : 词的结尾
================
字段
拼接:Concat()
SELECT Concat (vend_name, '(', vend_country, ')')
AS vend_title
FROM vendors
ORDER BY vend_name;
注*:RTime()函数去掉右边所有的空格。
AS: 别名
Soundex() : 将任何文本串转换为描述其语音表示的字母数字模式的算法。
========================
汇总
聚集函数
GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
WITH ROLLUP 可以得到每个分组以及每个分组汇总级别的值。
HAVING : 过滤分组 数据分组后过滤
WHERE : 过滤行 数据分组前过滤
SELECT a, COUNT(*) AS b
FROM c
GROUP BY a
HAVING COUNT(*) >= 2;
SELECT a, COUNT(*) AS b
FROM c
WHERE d >= 10
GROUP BY a
HAVING COUNT(*) >= 2;
==========================
分组
ORDER BY 与 GROUP BY
ORDER BY : 排序输出 任意列都可输出 不一定需要
GROUP BY : 分组(不保证有序) 必须使用选择列表达式 与聚集函数一起使用,必须使用
===========================
子查询 由里及外 耗时
相关子查询
主要用于测试 注意性能
============================
联结
笛卡儿积 由没有连接条件的表关系返回,检查出的行的数目为第一个表中的行数乘以第二个表中的行数
内部连接(等值连接)
SELECT a, b, c FROM Table1
INNER JOIN Table2
ON Table1.a = Table2.a;
==============================
高级联结
自联结
SELECT P1.PROD_ID, P1.PROD.NAME
FROM products AS P1, products AS P2
WHERE P1.VEND_ID = P2.VEND_ID
AND P2_PROD_ID = 'DTNTR';
自然联结(自己完成)
标准的联结返回所有数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次。
外部联结
SELECT Table1.a, Table2.b
FROM Table1 OUTER JOIN Table2
ON Table1.c = Table2.c;
外部联结还包括没有关联行的行。RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表.
UNION 多个表SELECt相同的列或项
UNION 自动去除重复的行
UNION ALL 全部,不去重
====================================
全文本搜索 对结果排序
MyISAM 全文本搜索
InnoDB 无
创建全文本搜索
FULLTEXT(note_text);
导入数据 => 修改表 => 定义FULLTEXT
Match() 指定被搜索列
Against() 指定被搜索表达式
查询拓展
1.基本全文本搜索,找出所有匹配行
2.检查匹配行,找出所有有用的词
3.再次进行全文搜索,使用原先的条件外加有用的词
SELECT a FROM Table
WHERE MATCH(a) AGAINST ('c' WITH QUERY EXPANSION);
布尔模式 (50%)
IN BOOLEAN MODE
=====================================
低效插入
INSERT LOW_PRIORITY INTO
单条插入多值
INSERT SELECT
=======================================
更新UPDATE
UPDATE
SET
WHERE
INGORE 忽略错误
DELETE 删除(行, 而不是表本身)
TRUNCATE TABLE :删除表并新建
只允许一个AUTO_INCREMENT列
AUTO_INCREMENT 可被覆盖 后面的值由打断值增加
DEFUALT 指定默认值
=======================================
引擎:
InnoDB : 事务处理引擎,不支持全文搜索
MEMORY : 功能类似于MyISAM,数据存储在内存,速度很快
MyISAM : 性能极高的引擎,支持全文本搜索,但不支持事务处理
引擎可以混用
更改表结构
ALTER TABLE a
ADD x CHAR(20);
==========================================
视图
CERATE VIEW ...
视图更新
==========================================
存储过程
调用(执行存储过程):
CALL productpricing(@pricelow,
@pricehigh,
@priceaverage);
创建存储过程
CREATE PROCEDURE productpricing()
BEGIN
SELECT AVG(PROD_PRICE) AS PRICEAVERAGE
FROM PRODUCTS
END;
DELIMITER : 新结束符
删除存储过程:
DROP PROCEDURE PRODUCTPRICING;
======================================
游标 : 被语句检索出来的结果集
创建游标:
CREATE PROCEDURE a
BEGIN
DECLARE b CURSOR
FOR
SELECT c FROM Table1;
END;
打开关闭游标:
OPEN cursorA;
CLOSE cursorA;
使用FETCH语句从游标中检索
设置循环条件:
DECLARE CONTINUE HANDLE FOR SQLSTATE '02000' SET done=1;
======================================
触发器
响应某个语句:(前后)
DELETE
INSERT
UPDATE
表中唯一,每表最多六个
CREATE TRIGGER a AFTER INSERT ON b
FOR EACH ROW SELECT 'Product added';
删除触发器:
DROP TRIGGER a;
INSERT => new表
DELETE => old表
UPDATE : old表(只读) new表(可写)
触发器不支持存储过程
=======================================
事务处理
用来维护数据库完整性,成批操作要么全部执行,要么完全不执行
事务 回退 提交 保留点
不回退SELECT 隐含事务关闭
事务开始
START TRANSACTION;
回退:
ROLLBACK;
是否自动提交
SET autocommit=0;
mysql sql知识总结的更多相关文章
- Atitit 补充说明 sql知识图谱与线路图attilax总结补充说明
Atitit 补充说明 sql知识图谱与线路图attilax总结补充说明 1. 常见编程语言的分类 :命令式语言.函数式语言.逻辑语言1 1.1. 按照编程语言的代际划分,又2gl,3gl,4gl ...
- Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数
mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...
- Mysql存储过程知识,案例--mysql存储过程基本函数
Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...
- MySQL高级知识(十六)——小表驱动大表
前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...
- MySQL高级知识(十二)——全局查询日志
前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...
- MySQL高级知识(十一)——Show Profile
前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...
- MySQL高级知识(九)——慢查询日志
前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中.慢查询日志 ...
- MySQL高级知识(八)——ORDER BY优化
前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index. 0.准备 #1.创建test表. drop table i ...
- MySQL高级知识(七)——索引面试题分析
前言:该篇随笔通过一些案例,对索引相关的面试题进行分析. 0.准备 #1.创建test表(测试表). drop table if exists test; create table test( id ...
随机推荐
- svn add文件名包含@符号的解决方案
[svn add文件名包含@符号的解决方案] 在iOS开发过程中,代码得用SVN管理起来,但是遇到这么个问题:Default@2x.png文件svn add不成功,总提示找不到这个文件. 结果查了查资 ...
- linux su su -
本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行, ...
- GROUP BY ROLLUP和CUBE 用法
ROLLUP和CUBE 用法 Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句. 如果是Group by ROLLUP(A, B, C)的话 ...
- 面试题--CVTE
2.HashMap和HashSet的实现原理,hashset 和hashMap区别 HashSet底层就是HashMap实现的, *HashMap* *HashSet* HashMap实现了Map接口 ...
- HDU 5293 Tree chain problem
树状数组 + dp 设$f_i$表示以$i$为根的子树中的能选取的最大和,$sum_x$表示$\sum_{f_y}$ ($y$是$x$的一个儿子),这样子我们把所有给出的链按照两点的$lca$分组, ...
- Luogu 3616 富金森林公园
刚看到此题的时候:sb分块??? Rorshach dalao甩手一句看题 于是回去看题……果然是题读错了…… [思路] 对权值离散化后(要先读入所有输入里的权值一起离散化……所以一共有4e4个数据( ...
- 实现一个简单的Plugin
1.准备 1)安装pluginlib_tutorials包: 2)创建一个包 2.创建基类 创建一个基类,所有的插件都将从基类继承,如RegularPolygon基类 创建一个基类头文件 其内容如下 ...
- SpringMVC——视图和视图解析器
请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个Mode ...
- hdu 4678 Mine
HDU 4678 把点开空地时会打开的一大片区域看成一块,题目中说到,在一盘游戏 中,一个格子不可能被翻开两次,说明任意两块空地不会包含相同的格子. 那么就可以看成一个组合游戏. 当空地旁边没连任何数 ...
- C#序列化xml,开发常用
序列化操作对于开发人员来说最熟悉不过了. 序列化分为:序列化和反序列化. 序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程. 与序列化相对的是反序列化,它将流转换为对象.这两个过程结合 ...