【MySQL笔记】2 SELECT语句拓展

MySQL笔记基于教材,笔记中用到的数据库可以点击该链接下载

用SELECT的ORDER BY子句排序

子句 (clause) :SQL语句由子句构成,有些子句是必须的,有些子句是可选的。一个子句通常由一个关键字和所提供的数据组成。

如果使用了ORDER BY子句,则结果按ORDER BY后指定的列排序。可以指定多个排序的列,优先级从左到右。注意ORDER BY应放在FROM

mysql> SELECT prod_id, prod_price, prod_name
    -> FROM products
    -> ORDER BY prod_price, prod_name;
+---------+------------+----------------+
| prod_id | prod_price | prod_name      |
+---------+------------+----------------+
| FC      |       2.50 | Carrots        |
| TNT1    |       2.50 | TNT (1 stick)  |
| FU1     |       3.42 | Fuses          |
| SLING   |       4.49 | Sling          |
| ANV01   |       5.99 | .5 ton anvil   |
| OL1     |       8.99 | Oil can        |
| ANV02   |       9.99 | 1 ton anvil    |
| FB      |      10.00 | Bird seed      |
| TNT2    |      10.00 | TNT (5 sticks) |
| DTNTR   |      13.00 | Detonator      |
| ANV03   |      14.99 | 2 ton anvil    |
| JP1000  |      35.00 | JetPack 1000   |
| SAFE    |      50.00 | Safe           |
| JP2000  |      55.00 | JetPack 2000   |
+---------+------------+----------------+
14 rows in set (0.01 sec)

例子里的排序prod_price优先于prod_name,仅在prod_price相同时依据prod_name排序。

还可以对排序的每个列指定升序 (ascending) 或降序 (descending)。用到ASCDESC关键字。不指定时默认升序

ORDER BY prod_price ASC, prod_name DESC;

ORDER BYLIMIT 1一起用可以实现找最大/小的值。

用SELECT的WHERE子句指定搜索条件

搜索条件 (search criteria):只搜索需要的数据。

WHERE子句限定了某列的值与某已知值的关系(等于,不等于,大于,小于等)。关系由WHERE子句的操作符给出。

操作符 说明
= 等于
<> 或 != 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN a AND b 在值a和值b之间
IS NULL 值为NULL

值为NULL时,只要限定的条件不是IS NULL,一定不会返回。

WHERE子句还可以使用AND、OR、IN、NOT等逻辑连接词组合条件。

  • AND的运算优先级高于OR
  • IN后的合法值清单用圆括号括起来
  • MySQL的NOT可以对IN、BETWEEN、EXISTS子句取反

在WHERE中使用带LIKE关键字的通配符搜索

通配符 (wildcard):用来匹配值的一部分的特殊字符。
搜索模式 (search pattern):由字面值、通配符或两者组合构成的搜索条件。

LIKE表示后跟的条件中使用了通配符,而非普通的相等匹配

两种常用的通配符:%_

通配符 作用
% 匹配任意长度(包括0)的字符,但不能匹配NULL
_ 恰好匹配一个字符
  • 通配符会拖慢搜索速度。如非必要,用别的操作代替通配符
  • 将通配符放在搜索模式的开头会大大延长搜索用时。因此不建议把通配符放在开头
  • 如果结尾处有一些空格,最好在搜索模式最后加上%进行匹配
mysql> SELECT prod_id, prod_name
    -> FROM products
    -> WHERE prod_name LIKE '%anvil%';
+---------+--------------+
| prod_id | prod_name    |
+---------+--------------+
| ANV01   | .5 ton anvil |
| ANV02   | 1 ton anvil  |
| ANV03   | 2 ton anvil  |
+---------+--------------+
3 rows in set (0.01 sec)

在WHERE中使用正则表达式搜索

关键字REGEXP,表示后跟的内容作为正则表达式处理。注意REGEXPLIKE的一个重要区别是,LIKE一定会匹配整个列值,而REGEXP只会从整个列值中寻找匹配的字段。如果想要正则表达式匹配整个列值,则需要用到^$定位符。

MySQL支持典型的正则表达式语法,在此不赘述。

在SELECT中使用计算字段

拼接 (concatenate):将值联结到一起构成单个值。MySQL中,函数Concat()用来拼接字段。

计算字段 (field) 在地位上与列 (column) 等同,在结果中也像列一样显示。可以在计算字段后加上AS关键字对该计算字段命名,方便客户机上对计算结果的使用。

mysql> SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title
    -> FROM vendors
    -> ORDER BY vend_name;
+------------------------+
| vend_title             |
+------------------------+
| ACME(USA)              |
| Anvils R Us(USA)       |
| Furball Inc.(USA)      |
| Jet Set(England)       |
| Jouets Et Ours(France) |
| LT Supplies(USA)       |
+------------------------+
6 rows in set (0.01 sec)

除了Concat()拼接列值外,MySQL还支持对数值的四则运算(+-*/

mysql> SELECT prod_id,
    -> quantity,
    -> item_price,
    -> quantity * item_price AS expanded_price
    -> FROM orderitems
    -> WHERE order_num = 20005;
+---------+----------+------------+----------------+
| prod_id | quantity | item_price | expanded_price |
+---------+----------+------------+----------------+
| ANV01   |       10 |       5.99 |          59.90 |
| ANV02   |        3 |       9.99 |          29.97 |
| TNT2    |        5 |      10.00 |          50.00 |
| FB      |        1 |      10.00 |          10.00 |
+---------+----------+------------+----------------+
4 rows in set (0.01 sec)

用Trim函数去除空格

函数 作用
RTrim() 去除右端的空格
LTrim() 去除左端的空格
Trim() 去除左右两端的空格

用SELECT进行函数测试

Now()函数返回当前日期与时间

mysql> SELECT Now();
+---------------------+
| Now()               |
+---------------------+
| 2018-02-22 16:07:14 |
+---------------------+
1 row in set (0.01 sec)

MySQL系列笔记


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