mysql sql知识总结

时间:2023-03-09 15:58:05
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;