Select - 语法指南

本贴最后更新于 2468 天前,其中的信息可能已经斗转星移

一、Select - 语法解析

``` SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [PARTITION partition_list] [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]
</font> ## 二、Select - 语法示例 <font size=4> ### 单表查询 >查询表结构

mysql> desc t3;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(200) | YES | | NULL | |
| email | varchar(200) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> show columns from d1.t3;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(200) | YES | | NULL | |
| email | varchar(200) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

>查询表中数据

mysql> select * from t3;
mysql> select id,name,email from t3;
+----+------+-------+
| id | name | email |
+----+------+-------+
| 1 | n1 | e1 |
| 2 | n2 | e2 |
| 3 | n3 | e3 |
| 4 | n1 | e1 |
| 5 | n2 | e2 |
| 6 | n3 | e3 |
+----+------+-------+

### 单表条件查询 >`= 等于`、`<> != 不等于`、`in 包含`、`not in 不包含`、`like 模糊查找`

mysql> select id,name,email from t3 where name='n1';
+----+------+-------+
| id | name | email |
+----+------+-------+
| 1 | n1 | e1 |
| 4 | n1 | e1 |
+----+------+-------+
2 rows in set (0.00 sec)

### 单表多条件查询 >`or 或`、`and 与`、`in 包含`、`not in 不包含`

mysql> select id,name,email from t3 where name='n1' and id>1;
+----+------+-------+
| id | name | email |
+----+------+-------+
| 4 | n1 | e1 |
+----+------+-------+
1 row in set (0.00 sec)

### 排序查询 >单列升序

mysql> select id,name,email from t3 order by id;
+----+------+-------+
| id | name | email |
+----+------+-------+
| 1 | n1 | e1 |
| 2 | n2 | e2 |
| 3 | n3 | e3 |
| 4 | n1 | e1 |
| 5 | n2 | e2 |
| 6 | n3 | e3 |
+----+------+-------+
6 rows in set (0.00 sec)

>单列降序

mysql> select id,name,email from t3 order by id desc;
+----+------+-------+
| id | name | email |
+----+------+-------+
| 6 | n3 | e3 |
| 5 | n2 | e2 |
| 4 | n1 | e1 |
| 3 | n3 | e3 |
| 2 | n2 | e2 |
| 1 | n1 | e1 |
+----+------+-------+
6 rows in set (0.00 sec)

>多列混合排序 第一列升序,第二列降序

mysql> select name,age from t5 order by name,age desc;
+------+------+
| name | age |
+------+------+
| n1 | 22 |
| n2 | 23 |
| n3 | 24 |
| n4 | 25 |
| n5 | 25 |
| n5 | 11 |
| n6 | 22 |
+------+------+
7 rows in set (0.00 sec)

第一列降序,第二列升序

mysql> select name,age from t5 order by name desc,age;
+------+------+
| name | age |
+------+------+
| n6 | 22 |
| n5 | 11 |
| n5 | 25 |
| n4 | 25 |
| n3 | 24 |
| n2 | 23 |
| n1 | 22 |
+------+------+
7 rows in set (0.00 sec)

### 分组查询 >`max() 最大值`、`min()最小值`、 `avg() 平均值`、 `count() 计数`

mysql> select name,count(email) as sum from t3 group by name;
+------+-----+
| name | sum |
+------+-----+
| n1 | 2 |
| n2 | 2 |
| n3 | 2 |
+------+-----+
3 rows in set (0.00 sec)

### 条件、分组、排序、过滤

mysql> select name,count(email) sum from t3 where id>1 group by name having sum>1 order by name desc;
+------+-----+
| name | sum |
+------+-----+
| n3 | 2 |
| n2 | 2 |
+------+-----+
2 rows in set (0.01 sec)

### 笛卡尔积

mysql> select a.,b. from t3 a,t4 b;
+----+------+-------+------+------+------+
| id | name | email | id | name | age |
+----+------+-------+------+------+------+
| 1 | n1 | e1 | 1 | n1 | 22 |
| 1 | n1 | e1 | 2 | n2 | 23 |
| 1 | n1 | e1 | 3 | n3 | 24 |
| 2 | n2 | e2 | 1 | n1 | 22 |
| 2 | n2 | e2 | 2 | n2 | 23 |
| 2 | n2 | e2 | 3 | n3 | 24 |
| 3 | n3 | e3 | 1 | n1 | 22 |
| 3 | n3 | e3 | 2 | n2 | 23 |
| 3 | n3 | e3 | 3 | n3 | 24 |
| 4 | n1 | e1 | 1 | n1 | 22 |
| 4 | n1 | e1 | 2 | n2 | 23 |
| 4 | n1 | e1 | 3 | n3 | 24 |
| 5 | n2 | e2 | 1 | n1 | 22 |
| 5 | n2 | e2 | 2 | n2 | 23 |
| 5 | n2 | e2 | 3 | n3 | 24 |
| 6 | n3 | e3 | 1 | n1 | 22 |
| 6 | n3 | e3 | 2 | n2 | 23 |
| 6 | n3 | e3 | 3 | n3 | 24 |
+----+------+-------+------+------+------+
18 rows in set (0.00 sec)

### 多表查询

mysql> select a.id,a.name,b.id,b.name from t4 a,t5 b where a.id=b.id and a.id<4 and b.name<>'n2';
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | n1 | 1 | n1 |
| 3 | n3 | 3 | n3 |
+------+------+------+------+
2 rows in set (0.00 sec)

### 嵌套查询

mysql> select name , email from t3 where id > 4 and name in(select name from t4 where id =(select id from t5 where id=2));
+------+-------+
| name | email |
+------+-------+
| n2 | e2 |
+------+-------+
1 row in set (0.01 sec)

### 关联查询 >左关联

mysql> select a.name,a.email,b.name,b.age from t3 a left join t4 b on a.name=b.name;
+------+-------+------+------+
| name | email | name | age |
+------+-------+------+------+
| n1 | e1 | n1 | 22 |
| n1 | e1 | n1 | 22 |
| n2 | e2 | n2 | 23 |
| n2 | e2 | n2 | 23 |
| n3 | e3 | n3 | 24 |
| n3 | e3 | n3 | 24 |
| n6 | e4 | NULL | NULL |
| n7 | e5 | NULL | NULL |
+------+-------+------+------+
8 rows in set (0.00 sec)

>右关联

mysql> select a.name,a.email,b.name,b.age from t3 a right join t4 b on a.name=b.name;
+------+-------+------+------+
| name | email | name | age |
+------+-------+------+------+
| n1 | e1 | n1 | 22 |
| n2 | e2 | n2 | 23 |
| n3 | e3 | n3 | 24 |
| n1 | e1 | n1 | 22 |
| n2 | e2 | n2 | 23 |
| n3 | e3 | n3 | 24 |
| NULL | NULL | n4 | 25 |
| NULL | NULL | n5 | 25 |
+------+-------+------+------+
8 rows in set (0.00 sec)

>内关联

mysql> select a.name,a.email,b.name,b.age from t3 a join t4 b on a.name=b.name;
+------+-------+------+------+
| name | email | name | age |
+------+-------+------+------+
| n1 | e1 | n1 | 22 |
| n2 | e2 | n2 | 23 |
| n3 | e3 | n3 | 24 |
| n1 | e1 | n1 | 22 |
| n2 | e2 | n2 | 23 |
| n3 | e3 | n3 | 24 |
+------+-------+------+------+
6 rows in set (0.00 sec)

mysql> select a.name,a.email,b.name,b.age from t3 a inner join t4 b on a.name=b.name;
+------+-------+------+------+
| name | email | name | age |
+------+-------+------+------+
| n1 | e1 | n1 | 22 |
| n2 | e2 | n2 | 23 |
| n3 | e3 | n3 | 24 |
| n1 | e1 | n1 | 22 |
| n2 | e2 | n2 | 23 |
| n3 | e3 | n3 | 24 |
+------+-------+------+------+
6 rows in set (0.00 sec)

### 合并查询 >结果集直接合并,不做任何处理

mysql> select id,name from t3 union all select id,name from t4;
+------+------+
| id | name |
+------+------+
| 1 | n1 |
| 2 | n2 |
| 3 | n3 |
| 4 | n1 |
| 5 | n2 |
| 6 | n3 |
| 7 | n6 |
| 8 | n7 |
| 1 | n1 |
| 2 | n2 |
| 3 | n3 |
| 4 | n4 |
| 4 | n5 |
+------+------+
13 rows in set (0.00 sec)

>结果集去重合并

mysql> select id,name from t3 union select id,name from t4;
+------+------+
| id | name |
+------+------+
| 1 | n1 |
| 2 | n2 |
| 3 | n3 |
| 4 | n1 |
| 5 | n2 |
| 6 | n3 |
| 7 | n6 |
| 8 | n7 |
| 4 | n4 |
| 4 | n5 |
+------+------+
10 rows in set (0.00 sec)

### 克隆/备份表

mysql> create table t5 as select * from t4;
mysql> select * from t5;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | n1 | 22 |
| 2 | n2 | 23 |
| 3 | n3 | 24 |
| 4 | n4 | 25 |
| 4 | n5 | 25 |
+------+------+------+
5 rows in set (0.00 sec)

mysql> create table t6 as select * from t4 where name='n1';
mysql> select * from t6;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | n1 | 22 |
+------+------+------+
1 row in set (0.00 sec)

### 快速复制数据

mysql> insert into t6 select * from t5;
mysql> select * from t6;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | n1 | 22 |
| 1 | n1 | 22 |
| 2 | n2 | 23 |
| 3 | n3 | 24 |
| 4 | n4 | 25 |
| 4 | n5 | 25 |
+------+------+------+
6 rows in set (0.00 sec)

mysql> insert into t6 select * from t5 where name='n3';
mysql> select * from t6;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | n1 | 22 |
| 1 | n1 | 22 |
| 2 | n2 | 23 |
| 3 | n3 | 24 |
| 4 | n4 | 25 |
| 4 | n5 | 25 |
| 3 | n3 | 24 |
+------+------+------+
7 rows in set (0.00 sec)

</font>
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    346 引用 • 757 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    694 引用 • 537 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 253 关注
  • Excel
    31 引用 • 28 回帖
  • 笔记

    好记性不如烂笔头。

    311 引用 • 794 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 3 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • V2Ray
    1 引用 • 15 回帖 • 4 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    59 引用 • 22 回帖 • 5 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 564 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 13 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 223 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 70 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 232 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 51 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1444 引用 • 10083 回帖 • 508 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    43 引用 • 44 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    24 引用 • 246 回帖
  • sts
    2 引用 • 2 回帖 • 243 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    373 引用 • 1858 回帖 • 1 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    93 引用 • 122 回帖 • 615 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 572 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    172 引用 • 1538 回帖 • 1 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 684 关注