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;

原文地址:https://www.cnblogs.com/ganshuoos/p/10798104.html

时间: 2024-10-06 18:30:20

mysql sql知识总结的相关文章

MySQL基本知识及练习(5)

1.求一个班级数学平均分. (1). select sum(math) / count(math) as 数学平均分 from student; (2). select avg(math) as 数学平均分 from student; (3).select avg(name) as 小明平均分 from student;//0 2.求一个班级总分平均分. (1).select (sum(chinese)+sum(math)+sum(english))  /  count(*) from stud

Atitit &#160;补充说明 sql知识图谱与线路图attilax总结补充说明

Atitit  补充说明 sql知识图谱与线路图attilax总结补充说明 1. 常见编程语言的分类  :命令式语言.函数式语言.逻辑语言1 1.1. 按照编程语言的代际划分,又2gl,3gl,4gl,5gl   ,sql属于4gl1 1.2. 按照领域范围可分为通用语言与dsl领域特定语言,sql语言属于dsl1 2. 如何判断一门编程语言完备不完备,为什么脚本语言往往不完备?1 2.1. Sql语言又多少内置函数?2 2.2. Sql语言中的变量与数据结构,很多是表和视图一类复合结构2 2.

MySQL基础知识

MySQL基础知识: 一. 知识点:        1. SQL分类:按照其功能不同,分为3中类别           DDL(Data Defintion Language):数据定义语句,用于定义不同的数据段.数据库.表.列.索引等.常用的语句关键字包括create.drop.alter等;             DML(Data Manipulation Language):数据操纵语句,用于添加.删除.更新和查询数据库记录,并检查数据的完整性.常用的语句关键字主要包括insert.de

MySQL的知识回顾

经过一段时间的NodeJs开发经历,选用的数据库是MySQL,一开始以为自己对数据库的基础知识掌握还ok,因为毕竟自己以前用过Apache+PHP+MySQL做数据库课程设计,但是在开发过程中才知道在这方面的基础非常不扎实,下面把项目中用到的MySQL数据库知识作个总结: 首先在Node环境下开发,一开始是选择mysql模块(https://github.com/mysqljs/mysql),后来该用了easymysql模块,原因可以看Node中使用mysql模块遇到的问题,先小总结下数据库的基

Mysql数据库知识总结(看资料总结出来的)

毕业到现在算起来做了3年多服务端开发了,毕业之后很少有时间想在学校一样可以抽出一些空余的时间对知识进行一个总结,到现在也是时候对一些关键的知识一个总结,今天趁着时间比较多,先来对用了3年多的开源关系型数据库mysql进行一下总结,整理了一下知识点可以分为以下几点进行: 一.基础知识 二.SQL优化与索引 三.数据库规范建议 四.数据库设计 五.数据库架构 一.基础知识 知识点主要包括:数据类型 常用函数 字符集 事务隔离级别 锁机制 (1).数据类型 数值类型 -- TINYINT.SMALLI

MySQL高级知识(四)——Explain

前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句.explain主要用于分析查询语句或表结构的性能瓶颈. 注:本系列随笔如无特殊说明都MySQL版本都为5.7.22. 1.explain的作用 通过explain+sql语句可以知道如下内容: ①表的读取顺序.(对应id) ②数据读取操作的操作类型.(对应select_type) ③哪些索引可以使用.(对应possible_keys) ④哪些索引被实际使用.(对应k

mysql基本知识的总结

Mysql基本sql知识 Navicat快捷方式: 选中当前行 在行尾:shift+home 在行首:shift+end 执行当前行:ctrl+shift+R 复制当前行:ctrl+D 显示所有数据库 Show databases; 创建数据库 Cteate database 数据库名; 删除数据库 Drop database 数据库名; 创建表(not null如果加上,添加数据的时候必须不能为空,否则添加数据的时候就会报错  tabname:表名 col:字段名称  type:类型) Cre

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin

mysql基础知识之增删查改使用介绍

 mysql基础知识之增删查改使用介绍 本文主要介绍mysql常用的SELECT.INSERT.UPDATE.DELETE语句的使用,数据库的安装这里不做介绍,并且事先已经准备好相关数据. 本文中使用的student表中的数据如下: mysql> SELECT * FROM student; 一.SELECT语句的使用 1.单表查询 语法格式: SELECT culom1,culom2,culom3 FROM TABLE_NAME; 可以改变字段显示顺序 2.WHERE子句查询 语法格式: SE