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 ...
随机推荐
- 详解PHP执行定时任务的实现思路
PHP本身是没有定时功能的,PHP也不能多线程.PHP的定时任务功能必须通过和其他工具结合才能实现,例如WordPress内置了wp-cron的功能,很厉害. 一.Linux服务器上使用CronTab ...
- MySQL分组条件,group by order by limit 顺序
having 中如果没有用聚合函数(必须sum,min),涉及到的字段名称必须在select 中有对应字段名称才可以,用到聚合函数可以不必在select中有相应字段名称的 limit 2,3:2表示从 ...
- 【bzoj3940】[Usaco2015 Feb]Censoring
[题目描述] FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过10^5的字符串S.他有一个包含n个单词的列表,列表里的n个单词 记为t_1...t_N.他希望从S中删除这些单词. FJ每次 ...
- 696. Count Binary Substrings统计配对的01个数
[抄题]: Give a string s, count the number of non-empty (contiguous) substrings that have the same numb ...
- Docker学习笔记_Dockerfile基本知识
Dockerfile由一行行命令语句组成,并支持以#开头的注释行. 1.编写一个Dockerfile文件 创建一个空的Docker工作目录,进入该目录,使用sudo vim Dockerfile指令新 ...
- Luogu 3206 [HNOI2010]城市建设
BZOJ 2001 很神仙的cdq分治 先放论文的链接 顾昱洲_浅谈一类分治算法 我们考虑分治询问,用$solve(l, r)$表示询问编号在$[l, r]$时的情况,那么当$l == r$的时候 ...
- sed陷阱
sed陷阱: sed -i 后不要紧跟字母, 否则会产生一个新的备份文件(在原文件后多出来一个字母) // 正确写法 /usr/bin/sed -i "/PREFIX=/d" ...
- SpringMVC——处理 JSON:使用 HttpMessageConverter
一.SpringMVC处理JSON流程 1. 加入 jar 包: jackson-annotations-2.1.5.jarjackson-core-2.1.5.jarjackson-databind ...
- The user specified as a definer (”@sa’%') does not exist 解决方法
mysql数据库报错The user specified as a definer (”@sa’%') does not exist.尝试过两种方式,第一种重启之后好用,但是一会就又不好用了.第二种算 ...
- what is diff. b/w app state & session state
Application state is a data repository available to all classes in an ASP.NET application. Applicati ...