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语句可以用来筛选出符合特定条件的记录,可以使用各种操作符组合条件。
下面是一些常见的过滤查询示例:
- 使用等于运算符:
SELECT * FROM stock_info WHERE code = '000001'
以上示例将检索所有code为 000001的记录。运行结果如下:
- 使用不等于运算符:
SELECT * FROM stock_info WHERE exchange != 'sz'
查询所有非深圳市场的股票信息,如下:
- 使用比较运算符:
SELECT * FROM stock_info WHERE code < '000005'
- 使用逻辑运算符:
SELECT * FROM stock_info WHERE code = '000003' or code = '000004'
- 使用IN运算符:
IN运算符用于在一组值中查找匹配项,各个值之间用逗号隔开。
SELECT * FROM stock_info WHERE code IN (000001,000002,000003)
- 使用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语句的示例:
- 单个列排序:
SELECT * FROM stock_info WHERE code BETWEEN 000001 and 000003 order BY id DESC
- 多列排序:
SELECT * FROM stock_info WHERE code BETWEEN 000001 and 000003 order BY state ASC, id DESC
以上示例将按state升序排序,然后按id降序排序,并返回所有列的结果。
注意跟上一个语句进行比较。
- 降序排序:
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_name
WHERE condition
GROUP BY column_name(s);
其中:
- column_name(s):要检索的列的名称。
- aggregate_function:将应用于列上的聚合函数,例如COUNT,SUM等。
- table_name:要检索的表的名称。
- condition:WHERE子句中的条件。
- GROUP BY column_name(s):根据给定的列分组结果。
下面是一些GROUP BY语句的示例:
- 按单个列分组:
SELECT COUNT(*) AS total, name FROM stock_info WHERE code < '000005' GROUP BY `name`
以上示例将返回股票代码及每个股票的数量。
- 按多个列分组:
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 table1
JOIN table2
ON 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.code WHERE 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.code WHERE a.code = b.code
在连接查询中,如果要查询多个表,则可以在前面的JOIN语句后面继续添加其他的JOIN语句,从而将多个表连接在一起。
连接查询是关系型数据库中一种非常常用的查询方式,它能够在多个表之间建立联系,并以此展示多表信息的整合结果。