SQL语言是与数据库交互的机制,是关系型数据库的标准语言。SQL语言可以用于创建、修改和查询关系数据库。SQL的SELECT语句是最重要的命令之一,用于从指定表中查询数据。在此博客中,我们将进一步了解SELECT语句以及WHERE子句以及它们的重要性。

前面我们已经大致讲了一下mysql的安装等介绍,MySQL 中的“新增、删除与修改”操作。但是查询太重要了,我们再花点时间来说道说道。

【MySQL新手入门系列一】:手把手教你入门MySQL

【MySQL新手入门系列二】:手把手教你入门MySQL – 数据库及数据表操作

【MySQL新手入门系列三】:MySQL的新增、删除与修改操作

目录

    • 一、介绍SQL的SELECT语句以及WHERE子句
    • 二、简单查询
    • 三、过滤查询
    • 四、排序查询
    • 五、分组查询
    • 六、连接查询

一、介绍SQL的SELECT语句以及WHERE子句

这里我们再啰嗦几句。

SELECT语句是SQL语言的核心命令之一,它可以从一个或多个表中选取数据。语法如下:

SELECT 列名1,列名2... FROM 表名;

在该语法中,列名指定从表中返回的数据列,表名指定从中选择数据的数据表。此外,还可以使用一些其他的关键字来改变数据的返回。

WHERE子句是SQL所拥有的条件选择语句,它可以筛选出表中符合条件的数据。WHERE子句通常与SELECT语句结合使用,以在返回的结果中过滤数据。

SELECT 列名1, 列名2... FROM 表名 WHERE 条件

条件可以是简单或复杂的表达式,包括:

  • 运算符(例如,=,LIKE等)、
  • 函数
  • 逻辑运算符(例如AND和OR)。

二、简单查询

对于简单的查询,我们定义为从某个表里面查询所有数据,也即非常简单的sql语句,没有添加任何附加条件。
以下示例显示本质上是SELECT语句的查询。
查询包括从“trade_user”表中所有数据。

SELECT * FROM trade_user

我们以实际的表来举例,如下图所示:

三、过滤查询

在MySQL中,过滤查询通常使用WHERE语句。
WHERE语句可以用来筛选出符合特定条件的记录,可以使用各种操作符组合条件。

下面是一些常见的过滤查询示例:

  1. 使用等于运算符:
SELECT * FROM stock_info WHERE code = '000001'

以上示例将检索所有code为 000001的记录。运行结果如下:

  1. 使用不等于运算符:
SELECT * FROM stock_info WHERE exchange != 'sz'

查询所有非深圳市场的股票信息,如下:

  1. 使用比较运算符:
SELECT * FROM stock_info WHERE code < '000005'

  1. 使用逻辑运算符:
SELECT * FROM stock_info WHERE code = '000003' or code = '000004'

  1. 使用IN运算符:
    IN运算符用于在一组值中查找匹配项,各个值之间用逗号隔开。
SELECT * FROM stock_info WHERE code IN (000001,000002,000003)

  1. 使用BETWEEN运算符:
SELECT * FROM stock_info WHERE code BETWEEN 000001 and 000003

这些都是一些常用的过滤查询示例,在实际使用中,您可以根据需要使用不同的运算符和组合条件。

四、排序查询

在MySQL中,排序查询使用ORDER BY语句。
ORDER BY语句允许按升序或降序顺序对结果进行排序,可以按一个或多个列进行排序。

ORDER BY语句的语法格式如下:

SELECT column_name(s) FROM table_name ORDER BY column_name1 [ASC|DESC], column_name2 [ASC|DESC], ...;也可以结合条件语句进行排序 select * from xxx where xxx order by xxx asc

其中:

  • ASC:按升序排序。
  • DESC:按降序排序。

下面是一些ORDER BY语句的示例:

  1. 单个列排序:
SELECT * FROM stock_info WHERE code BETWEEN 000001 and 000003 order BY id DESC

  1. 多列排序:
SELECT * FROM stock_info WHERE code BETWEEN 000001 and 000003 order BY state ASC, id DESC

以上示例将按state升序排序,然后按id降序排序,并返回所有列的结果。
注意跟上一个语句进行比较。

  1. 降序排序:
SELECT * FROM stock_info WHERE code BETWEEN 000001 and 000003 order BY state DESC

总之,ORDER BY语句使我们可以根据一个或多个列对记录进行排序,并使其易于查看和分析结果集。

五、分组查询

MySQL中的分组查询,是指将表中的数据按照指定的列或表达式进行分组,并对每个组进行计算的查询操作。
在分组查询中,使用GROUP BY子句来指定所要分组的列名,同时还可以使用聚集函数(例如SUM,AVG,MAX等函数)来对每个组进行计算,从而得到每个组的统计结果。

GROUP BY语句的语法格式如下:

SELECT column_name(s), aggregate_function(column_name)FROM table_nameWHERE conditionGROUP BY column_name(s);

其中:

  • column_name(s):要检索的列的名称。
  • aggregate_function:将应用于列上的聚合函数,例如COUNT,SUM等。
  • table_name:要检索的表的名称。
  • condition:WHERE子句中的条件。
  • GROUP BY column_name(s):根据给定的列分组结果。

下面是一些GROUP BY语句的示例:

  1. 按单个列分组:
SELECT COUNT(*) AS total,name FROM stock_info WHERE code < '000005' GROUP BY `name`

以上示例将返回股票代码及每个股票的数量。

  1. 按多个列分组:
SELECT COUNT(*) AS total,code, name FROM stock_info WHERE code < '000005' GROUP BY code,`name`

总之,GROUP BY语句是一种非常强大的聚合数据的工具,它允许我们根据一个或多个列对数据进行分组,并使用聚合函数计算分组结果的总和、平均值、最小值、最大值等。

六、连接查询

MySQL连接查询是指在查询两个或多个表时,通过特定的连接方式将数据进行关联,以便获得需要的数据。连接查询是基于关系型数据库模型设计的,它能够将多个表中的数据按照特定的条件进行联合,形成一个新的结果集。

MySQL连接查询通常使用JOIN关键字来实现。JOIN关键字有多种类型,包括INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL OUTER JOIN等,每种JOIN方式都有其特定的语法格式和用途。在连接查询中,JOIN关键字表示要根据哪个列或哪些列进行表的关联,以及关联方式的类型。

下面是一个MySQL连接查询的基本语法:

SELECT table1.column1, table2.column2...FROM table1JOIN table2ON table1.column = table2.column;

其中,
table1和table2是要连接的表,
column1和column2是要查询的列,
ON后面的条件表示连接两个表时所用的条件(一般是表中列的相等条件)。
JOIN关键字其实是INNER JOIN关键字的简写形式,如果需要使用LEFT JOIN或RIGHT JOIN等其他类型的连接方式,则需要在JOIN关键字前加上相应的关键字。

例如,下面是一个连接查询使用LEFT JOIN关键字的语法:

SELECT stock_info.code, stock_selected.code FROM stock_info LEFT JOIN stock_selected ON stock_info.code = stock_selected.codeWHERE stock_info.code = stock_selected.code

我们可以简化一下代码

SELECT a.code, b.code FROM stock_info as a LEFT JOIN stock_selected as b ON a.code = b.codeWHERE a.code = b.code 

在连接查询中,如果要查询多个表,则可以在前面的JOIN语句后面继续添加其他的JOIN语句,从而将多个表连接在一起。

连接查询是关系型数据库中一种非常常用的查询方式,它能够在多个表之间建立联系,并以此展示多表信息的整合结果。