ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL-子句

2019-07-17 10:02:41  阅读:236  来源: 互联网

标签:name runoob 子句 tbl MySQL WHERE SELECT


锚点

Where:

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....

读取 runoob_tbl 表中 runoob_author 字段值为 菜鸟教程 的所有记录:

SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程';

1.查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
2.你可以在 WHERE 子句中指定任何条件。
3.你可以使用 AND 或者 OR 指定一个或多个条件。
4.WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
5.WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
6.当提供的查询字段为NULL时,不能用=和!=这些符号,需要用IS NULL和IS NOT NULL

以下为操作符列表,可用于 WHERE 子句中。
下表中实例假定 A 为 10, B 为 20

操作符 描述 实例
= 等号,检测两个值是否相等,如果相等返回true (A = B) 返回false。
<>, != 不等于,检测两个值是否相等,如果不相等返回true (A != B) 返回 true。
> 大于号, 检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true (A > B) 返回false。
< 小于号, 检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true (A < B) 返回 true。
>= 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true (A >= B) 返回false。
<= 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true (A <= B) 返回 true。

Like:

SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

实例

#runoob_tbl 表中获取 runoob_author 字段中以 COM 为结尾的的所有记录:
SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';

WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 “runoob_author = ‘RUNOOB.COM’”。
但是有时候我们需要获取 runoob_author 字段含有 “COM” 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
Like中的%类似与python中的*,是一种通配符;

UNION 连接符:

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

MySQL UNION 操作符语法格式:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

1.expression1, expression2, … expression_n: 要检索的列。
2.tables: 要检索的数据表。
3.WHERE conditions: 可选, 检索条件。
4.DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
5.ALL: 可选,返回所有结果集,包含重复数据

排序:

可以使用 MySQL 的 order by 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]

1.你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
2.你可以设定多个字段来排序。
3.你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
4.你可以添加 WHERE…LIKE 子句来设置条件。

实例

#使用 ORDER BY 子句来读取MySQL 数据表 runoob_tbl 中的数据:
SELECT * from runoob_tbl ORDER BY submission_date ASC;

统计分组 GROUP BY:

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

SELECT column_name, [function(column_name)]
FROM table_name
WHERE column_name operator value
GROUP BY column_name;(column_name需要相同)

可以使用 GROUP BY 来读取数据表中不重复的数据
实例

SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;

±-------±---------+
| name | COUNT(*) |
±-------±---------+
| 小丽 | 1 |
| 小明 | 3 |
| 小王 | 2 |
±-------±---------+(COUNT()计算元素出现次数)

再统计 WITH ROLLUP:
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

实例

SELECT coalesce(name,’总数’), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

±-------±-------------+
| name | singin_count |
±-------±-------------+
| 小丽 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| 总数 | 16 |
±-------±-------------+(SUM(singin)将singi的值加起来)

表的连接分组查询
通过使用join可以连接多个表,每个join后的匹配条件可以不同
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;  (ON语句后是匹配条件)

±------------±----------------±---------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
±------------±----------------±---------------+
| 1 | 菜鸟教程 | 10 |
| 2 | 菜鸟教程 | 10 |
| 3 | RUNOOB.COM | 20 |
| 4 | RUNOOB.COM | 20 |
±------------±----------------±---------------+

分页查询

语法

	select 查询列表
	from 表
	【join type join 表2
	on 连接条件
	where 筛选条件
	group by 分组字段
	having 分组后的筛选
	order by 排序的字段】
	limit 【offset,】size;
	
	offset要显示条目的起始索引(起始索引从0开始)
	size 要显示的条目个数

#案例1:查询前五条员工信息

SELECT * FROM  employees LIMIT 0,5;
SELECT * FROM  employees LIMIT 5;

#案例2:查询第11条——第25条

SELECT * FROM  employees LIMIT 10,15;

#案例3:有奖金的员工信息,并且工资较高的前10名显示出来

SELECT 
    * 
FROM
    employees 
WHERE commission_pct IS NOT NULL 
ORDER BY salary DESC 
LIMIT 10 ;

标签:name,runoob,子句,tbl,MySQL,WHERE,SELECT
来源: https://blog.csdn.net/qq_42933123/article/details/96275598

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有