Select - 语法指南

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

一、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% 的性能瓶颈都在数据库。

    345 引用 • 754 回帖
  • MySQL

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

    693 引用 • 537 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 28 回帖 • 2 关注
  • AWS
    11 引用 • 28 回帖 • 8 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 189 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 312 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1282 回帖
  • Redis

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

    284 引用 • 248 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖 • 1 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 350 关注
  • RemNote
    2 引用 • 16 回帖 • 25 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 677 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 441 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • MySQL

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

    693 引用 • 537 回帖 • 1 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 567 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 766 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 1 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖 • 3 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 4 关注
  • 黑曜石

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

    A second brain, for you, forever.

    24 引用 • 242 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    180 引用 • 3879 回帖 • 2 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 59 回帖