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知识总结的更多相关文章

  1. Atitit  补充说明 sql知识图谱与线路图attilax总结补充说明

    Atitit  补充说明 sql知识图谱与线路图attilax总结补充说明 1. 常见编程语言的分类  :命令式语言.函数式语言.逻辑语言1 1.1. 按照编程语言的代际划分,又2gl,3gl,4gl ...

  2. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  3. Mysql存储过程知识,案例--mysql存储过程基本函数

    Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...

  4. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  5. MySQL高级知识(十二)——全局查询日志

    前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...

  6. MySQL高级知识(十一)——Show Profile

    前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...

  7. MySQL高级知识(九)——慢查询日志

    前言:慢查询日志是MySQL提供的一种日志记录,它记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的sql语句,该sql语句会被记录到慢查询日志中.慢查询日志 ...

  8. MySQL高级知识(八)——ORDER BY优化

    前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index. 0.准备 #1.创建test表. drop table i ...

  9. MySQL高级知识(七)——索引面试题分析

    前言:该篇随笔通过一些案例,对索引相关的面试题进行分析. 0.准备 #1.创建test表(测试表). drop table if exists test; create table test( id ...

随机推荐

  1. 浅谈oracle事务

    所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要死一起死,要活一起活. 为什么要引入事 ...

  2. http头部信息解析

    HTTP 头部解释 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Chars ...

  3. laravel中的模型关联之(一对一)

    一对一 一对一的关联关系就相当于,赞和文章之间的关系,一个用户只能赞一次一个文章,只能和文章发生一次关系, 用户和赞的文章是唯一的一份,这里举得是判断用户是否赞过某个文章 一个参数都是你要获取的模型, ...

  4. SaeStorage使用示例

    新浪SAE官方地址:http://apidoc.sinaapp.com/sae/SaeStorage.html SaeStorage的代码详细:http://apidoc.sinaapp.com/__ ...

  5. spring aop自动代理注解配置之二

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. 面试题:try,catch,finally都有return语句时执行哪个 已看1

    1.不管有木有出现异常,finally块中代码都会执行: return 先执行 把值临时存储起来, 执行完finally之后再取出来 值是不会改变的2.当try和catch中有return时,fina ...

  7. 22.NULL 值

    NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不 ...

  8. Luogu 2886 [USACO07NOV]牛继电器Cow Relays

    BZOJ 1706权限题. 倍增$floyd$. 首先这道题有用的点最多只有$200$个,先离散化. 设$f_{p, i, j}$表示经过$2^p$条边从$i$到$j$的最短路,那么有转移$f_{p, ...

  9. IDEA+DevTools实现热部署功能

      开发IDE: Intellij IDEA 2018.1 SpringBoot:1.5.9.RELEASE 热部署 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果, ...

  10. POJ - 2965 The Pilots Brothers' refrigerator(压位+bfs)

    The game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to op ...