Select - 语法指南

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

一、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 引用 • 760 回帖
  • MySQL

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

    694 引用 • 537 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1340 回帖
  • 电影

    这是一个不能说的秘密。

    123 引用 • 608 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 94 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 248 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 203 关注
  • CodeMirror
    2 引用 • 17 回帖 • 176 关注
  • Excel
    31 引用 • 28 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 12 关注
  • Love2D

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

    14 引用 • 53 回帖 • 563 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖
  • Follow
    4 引用 • 12 回帖 • 10 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 143 回帖 • 1 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 64 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 5 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    2 引用 • 32 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖 • 1 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 184 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    84 引用 • 414 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 612 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 33 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 2 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    201 引用 • 120 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 1 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    118 引用 • 54 回帖 • 11 关注