Mysql——进阶语法

Mysql-进阶语法

导语

在上一篇《MySQL的基本语法》中我们了解了mysql基本的增删改查的语句。本篇我们将进一步对“查”做深入的了解。


REGEXP

mysql的where子句也支持正则匹配

[](OR)

[]用来表示OR匹配

用法:

  • SELECT * FROM table WHERE name REGEXP '[34]tmp;'检索name中含有3tmp或者4tmp的列。

tips:

  • 要是连续的字符[012345679]或[abcdefg]可以用[0-9]或[a-g]来表示
  • 可以用.来表示任意字符
  • 由于正则匹配都是特殊字符,所以匹配特殊字符时需要转义,而Mysql的转义必须用“\\”,如“\\.”表示匹配.这个字符。
元字符

重复元字符:

用于匹配元字符前面的任何字符的次数

  • *:0个或多个匹配
  • +:1个或多个匹配(同{1,})
  • ?:0个或1个匹配(同{0,1})
  • {n}:指定数目匹配
  • {n,}:不少于指定数目的匹配
  • {n,m}:匹配数目的范围(MAX(m)==255)

语句:
SELECT * FROM table WHERE name REGEXP 'hello?'匹配含有字符hellohelloh这类的行。

定位元字符:

限定匹配字符串的位置

  • ^:文本的开始
  • $:文本的结尾
  • [[:<:]]:词的开始
  • [[:>:]]:词的开始

Contact

Mysql的Contact用来表示拼接字符串,在其他SQL中使用+||来表示.

语句:
[图片上传失败...(image-340ce3-1525193389477)]

tips:

  • AS来取别名

算术操作符

Mysql也支持字段间用算术操作符来计算

  • +:加
  • -:减
  • *:乘
  • \:除

基本函数

文本处理函数
  • Left():返回串左边的字符
  • Length():返回字符串长度
  • Locate():找出一个子串
  • Lower():字符串转换为小写
  • LTrim():去掉左边的空格
  • Right():返回字符串右边的字符
  • RTrim():去掉字符串右边的空格
  • SubString():返回子串
  • Upper():字符串转换为大写
日期和时间处理函数
  • CurDate():返回当前日期
  • CurTime():返回当前时间
  • Date():返回日期部分
  • DateDiff():计算两个日期之差
  • Date_Format():返回一个格式化的日期或时间串
  • DateOfWeek():返回对应的星期
  • Now():返回当前日期和时间
  • Year():返回年份部分
  • Month():返回月份部分
  • Day():返回天数部分
  • Hour():返回小时部分
  • Minute():返回分钟部分
  • Second():返回秒部分

聚合函数

AVG()函数

对表中选中的行数计算其平均值

语句:
SELECT AVG(price) FROM table;

tips: AVG()会忽略NULL值得行

COUNT函数

计算行数

语句:
SELECT COUNT(*) FROM table;

MAX()函数

返回指定列中的最大值

语句:
SELECT MAX(price) FROM table;

MIN()函数

返回指定列中的最小值

语句:
SELECT MIN(price) FROM table;

SUM()函数

返回指定列的和

语句:
SELECT SUM(price) FROM table;

tips:

  • 这些聚合函数要想计算不同值可加上DISTINCT :AVG(DISTINCT price)

GROUP BY

通常分组是和聚合函数搭配使用

语句:
SELECT id,COUNT(*) FROM table GROUP BY id以id来分组计算每个id的个数

tips:

  • GROUP BY 子句中不能是聚合函数
  • SELECT语句中每个列(除聚合函数外)必须在GROUP BY子句中出现
  • NULL值将作为一个分组返回
  • WHERE之后,ORDER BY之前
  • 分组后过滤只能用HAVING,HAVING用法与WHERE相同,只是having针对组级过滤,而where是行级过滤,where过滤掉的数据不会出现分组中

子查询

使用子查询时,应要确保子查询中SELECT返回的列与WHERE子句的列数相同

语句:

SELECT id FROM table WHERE name IN (
 SELECT name FROM table WHERE pid = 5);

联结表(JOIN)

通常我们会把数据有效分散在多个表中,要把我们统一起来查询就要用到联结(JOIN)
用联结表示,要注意列名必须使用完全限定列名(列名前跟上表面),以避免歧义

INNER JOIN

内部联结只会返回关联的行

语句:
SELECT table1.id,table2.name FROM table1 INNER JOIN table2 ON table1.id = table2.id;

等同于

SELECT table1.id,table2.name FROM table1,table2 WHERE table1.id = table2.id

OUTER JOIN

外部联结必须要用RIGHT OUTER JOINLEFT OUTER JOIN来指定包括的所有行的表(RIGHT指定OUTER JOIN右边的表,LEFT反之)


UNION

与多WHERE查询基本相同

语句:
[图片上传失败...(image-a0b9e6-1525193389477)]

tips:

  • UNION中的每个查询必须包含相同的列、表达式
  • UNION会自动去除重复的行,若想返回全部的行,可以用UNION ALL

事务

事务主要用于保护数据表的完整性

事务开始

START TRANSACTION;

事务回退

ROLLBACK

例子:

SELECT * FROM table1;
START TRANSACTION;
DELECT FROM table1;
SELECT * FROM table1;
ROLLBACK;
SELECT * FROM table1;

tips:

  • ROLLBACK只能在一个事务处理内使用(一个START TRANSACTION之后)
  • 回退用来处理INSERT,UPDATEDELETE
事务提交

在事务中数据库是不自动提交保存
事务外的更新可以设置SET autocommit = 0来关掉自动提交

例子:

SELECT * FROM table1;
START TRANSACTION
DELETE FROM table1 WHERE id = 1; 
COMMIT;
SELECT * FROM table1;

tips:

假设事务提交是多表时,只有多表语句均正确才会提交,有一个语句错误都会自动撤销,不会提交。

保存点

在复杂的事务流程中,事务是被分成多步骤,进行部分保存。方便回退到某个节点

语句: SAVEPOINT pointOne;

回退保存点:ROLLBACK TO pointOne
在执行COMMIT或者ROLLBACK之后保存点会自动释放掉

索引

加快查询速度

创建索引

用法:

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON `table`(col1,···)

tips:

UNIQUE -- 唯一索引,FULLTEXT -- 全文索引, SPATIAL -- 空间索引,不指定的话为普通索引
index_type 为索引方式,有BTREEHASH两种。但是InnoDB只使用BTREE
复合索引时,column用逗号隔开

删除索引

用法:

ALTER TABLE `table`
DROP INDEX index_name;

tips:

修改索引的话为先deletecreate

查看索引

用法:

SHOW INDEX FROM [db_name.]`table_name`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容