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. Perl 变量:标量变量、数组变量、哈希变量和变量上下文

    一.Perl 变量变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间.解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型.浮点型.字符串等.上一章 ...

  2. C# 读取文件中的sql语句 创建数据库以及表结构

    大概思路是: 读取文件 根据文件中行内容为GO 作为分割  一条条放到list中 然后在程序中逐条执行sql语句; 值得一提的是 创建数据库的语句是不允许放到程序事务中执行的 所以目前我是分了两个文本 ...

  3. opencv掩膜操作

    #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...

  4. solidity mapping of mapping

    solidity mapping of mapping,两层映射,用的时候可以像二维数组一样去访问和修改值,非常方便. 以下代码示例中的这一句: mapping(string => mappin ...

  5. c语言实践 用1角 2角 5角 凑成10元钱的方法

    /* 用1角,2角,5角凑出10元钱,有几种办法. 也就是0.1a+0.2b+0.3c=10,化简一下就是 a=100-2b-3c 因为a的范围是0到100,所以弄一个循环 把a的值从0尝试到100, ...

  6. Django框架 之 MTV模型、 基本命令、简单配置

    浏览目录 MTV模型 Django框架前奏 Django基础必备三件套 Djaogo基本命令 MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Te ...

  7. [存储过程]中的事务(rollback)回滚

    在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 ... update statement 2 ... del ...

  8. 关于"人工智能Python""系统环境变量设置步骤

    最近无论是JAVA的环境变量配置,还是Python环境变量配置都有学生问我,我在这里写一下回答,当然我以配置Python的环境变脸来举例.首先需要确定本机电脑上安装上了Python 首先解释一下为什么 ...

  9. [GO]随机生成切片元素并使用冒泡排序方式进行排序

    package main import ( "math/rand" "time" "fmt" ) func ButtleData(s []i ...

  10. Robot Framework - 常用断言讲解

    RobotFramework带有丰富的系统关键,使用时无需导入,直接使用,为写自动化用例带来了极大的方便:不能停留在知道或者是会得程度,只有熟练使用各关键字,才能提升自动化用例的写作效率. 下面将逐个 ...