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. Git的配置和使用帮助

    Git的配置和使用帮助 1.Git的配置 ============== Git有三个地方可以存放配置:系统级配置文件/etc/gitconfig.用户级配置文件~/.gitconfig和仓库级配置文件 ...

  2. Oracle-11g 中当执行 DBMS_STATS 时,因数据泵外部表文件缺失 Alert Log 告警 "ORA-20011、ORA-29913" 以及 "KUP-XXXXX"错误

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  3. SSM框架整合(Spring+SrpingMVC+Mybatis) 简单案例

    简介: SSM框架是Spring,SpringMVC 和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,dao层四层. Spring实现 ...

  4. ArcEngine开发遇到的问题(转)

    ArcEngine开发遇到的问题 https://blog.csdn.net/u013751758/article/category/6971559 转载 2018年02月11日 17:28:11 1 ...

  5. HtmlHelper扩展

    扩展 HtmlHelper类 public static class MyHtmlHelper { //扩展方法 //静态类,静态方法,this关键字 //调用方法<%=Html.MyLabel ...

  6. volatile和 锁的区别

    Volatile: 当把变量声明为volatile类型后,编译器和运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其它内存操作一起重排序.volatile变量不会被缓存在寄存器或者对其他处 ...

  7. 61-结点选择(树形dp)

     http://lx.lanqiao.cn/problem.page?gpid=T14 算法训练 结点选择   时间限制:1.0s   内存限制:256.0MB        问题描述 有一棵 n 个 ...

  8. JavaPersistenceWithMyBatis3笔记-第5章Configuring MyBatis in a Spring applications-001

    一. 1.Mapper /** * */ package com.mybatis3.mappers; import java.util.List; import org.apache.ibatis.a ...

  9. 使用pycharm运行调试scrapy

    摘要 Scrapy是爬虫抓取框架,Pycharm是强大的python的IDE,为了方便使用需要在PyCharm对scrapy程序进行调试 python PyCharm Scrapy scrapy指令其 ...

  10. Mr_matcher的细节2

    1.参数服务器 ROS参数服务器能保存数据类型包括:strings, integers, floats, booleans, lists, dictionaries, iso8601 dates, a ...