基本 SQL 命令 、重要的 SQL命令、SQL 约束 及 SQL语句 的 执行顺序

学习目标:

学习目标如下:

  • SQL语句执行顺序

学习内容:

基本 SQL 命令:`

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. AGG_FUNC
  7. WITH
  8. HAVING
  9. SELECT 从数据库中提取数据
  10. UNION
  11. DISTINCT
  12. ORDER BY 排序
  13. LIMIT

重要的sql命令:

1、SELECT - 从数据库中提取数据

2、UPDATE - 更新数据库中的数据

3、DELETE - 从数据库中删除数据

4、INSERT INTO - 向数据库中插入新数据

5、CREATE DATABASE - 创建新数据库

6、ALTER DATABASE - 修改数据库

7、CREATE TABLE - 创建新表

8、ALTER TABLE - 变更(改变)数据库表

9、DROP TABLE - 删除表

10、CREATE INDEX - 创建索引(搜索键)

11、DROP INDEX - 删除索引

sql约束:

1、NOT NULL - 指示某列不能存储 NULL 值。

2、UNIQUE - 保证某列的每行必须有唯一的值。

3、PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

4、FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

5、CHECK - 保证列中的值符合指定的条件。

6、DEFAULT - 规定没有给列赋值时的默认值。

总结:

  • 一、SQL语句执行顺序:FROM、ON 、JOIN、WHERE、GROUP BY、AGG_FUNC、WITH、HAVING、SELECT、UNION、DISTINCT 、ORDER BY、LIMIT。

在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的数据。

1、FROM:选择FROM后面跟的表,产生虚拟表1。

2、ON:ON是JOIN的连接条件,符合连接条件的行会被记录在虚拟表2中。

3、JOIN:如果指定了LEFT JOIN,那么保留表中未匹配的行就会作为外部行添加到虚拟表2中,产生虚拟表3。如果有多个JOIN链接,会重复执行步骤1~3,直到处理完所有表。

4、WHERE:对虚拟表3进行WHERE条件过滤,符合条件的记录会被插入到虚拟表4中。

5、GROUP BY:根据GROUP BY子句中的列,对虚拟表4中的记录进行分组操作,产生虚拟表5。

6、AGG_FUNC:常用的 Aggregate 函数包涵以下几种:(AVG:返回平均值)、(COUNT:返回行数)、(FIRST:返回第一个记录的值)、(LAST:返回最后一个记录的值)、(MAX: 返回最大值)、(MIN:返回最小值)、(SUM: 返回总和)。

7、WITH 对虚拟表5应用ROLLUP或CUBE选项,生成虚拟表 6。

8、HAVING:对虚拟表6进行HAVING过滤,符合条件的记录会被插入到虚拟表7中。

9、SELECT:SELECT到一步才执行,选择指定的列,插入到虚拟表8中。

10、UNION:UNION连接的两个SELECT查询语句,会重复执行步骤1~9,产生两个虚拟表9,UNION会将这些记录合并到虚拟表10中。

11、DISTINCT 将重复的行从虚拟表10中移除,产生虚拟表 11。DISTINCT用来删除重复行,只保留唯一的。

12、ORDER BY: 将虚拟表11中的记录进行排序,虚拟表12。

13、LIMIT:取出指定行的记录,返回结果集。

  • 二、查询数据

(1)基本查询

SELECT * FROM <表名>;

(2)投影查询

SELECT column_name,column_name
FROM table_name;

(3)查询结果返回唯一值

SELECT DISTINCT column_name,column_name
FROM table_name;

(4)条件查询

SELECT * FROM <表名> WHERE <条件表达式>;

(5)排序

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

(6)分页查询

SELECT column_name(s)
FROM table_name
LIMIT number OFFSET 起始值;

(7)聚合查询

1、COUNT()统计一张表的数据量

SELECT COUNT(*) FROM <表名> WHERE <条件表达式>;

2、SUM() 计算某一列的合计值,该列必须为数值类型

SELECT SUM(*) FROM <表名> WHERE <条件表达式>;

3、AVG() 计算某一列的平均值,该列必须为数值类型

SELECT AVG(*) FROM <表名> WHERE <条件表达式>;

4、MAX() 计算某一列的最大值

SELECT MAX(*) FROM <表名> WHERE <条件表达式>;

5、MIN() 计算某一列的最小值

SELECT MIN(*) FROM <表名> WHERE <条件表达式>;

6、GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

7、HAVING 子句可以让我们筛选分组后的各组数据。

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

(8)多表查询(笛卡尔查询)

SELECT * FROM <表1> <表2>;

(9)连接查询

SELECT … FROM tableA JOIN tableB ON tableA.column1 = tableB.column2;

(10)合并查询

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

(11)AND & OR 运算符用于基于一个以上的条件对记录进行过滤。

(12)WHERE 子句用于过滤记录。

(13)ORDER BY 关键字用于对结果集进行排序。

(14)LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

(15)通配符可用于替代字符串中的任何其他字符。(%:替代 0 个或多个字符,_:替代一个字符)

(16)IN 操作符允许您在 WHERE 子句中规定多个值。

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,…);
IN 与 = 的异同

相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义
不同点:IN可以规定多个值,等于规定一个值

(17)BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

(18)别名

列的别名写法:

SELECT column_name AS alias_name
FROM table_name;

表的别名写法:

SELECT column_name(s)
FROM table_name AS alias_name;

(19)MySQL Date 函数

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式:YYYY-MM-DD
DATETIME - 格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
YEAR - 格式:YYYY 或 YY

MySQL 中最重要的日期函数 如下图 表格中所示:

在这里插入图片描述
我们了解的 sql 语句的执行顺序后 ,在写 sql 查询语句时 结合 sql 语句的执行顺序 ,就会提高 sql 语句的查询效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9289.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:etc/group

etc/group文件中保存着系统中所有组的名称&#xff0c;以及每个组中的成员列表。 文件中的一行为一个组的信息&#xff0c;具体如下&#xff1a; 如果组口令字段为x的话&#xff0c;就还有一个etc/gshadow文件用于存放组口令。 GID用于标识一个组&#xff0c;应保证其唯一性。…

使用 ZBrush、Ornatrix 和 Substance 3D Painter 重现哈利波特中的凤凰

今天瑞云渲染小编给大家带来了Ramn Tapia 分享 Phoenix 项目背后的工作流程&#xff0c;解释了如何在 Ornatrix 中完成修饰&#xff0c;并展示了纹理化过程。 介绍 你好&#xff0c;有创造力的读者朋友们 我的名字是Ramn&#xff0c;但在数字艺术领域&#xff0c;我的名字是ra…

使用fiddler和jmeter进行简单的接口测试。

初学接口测试&#xff0c;以下内容是记录首次使用fiddler和jmeter进行接口测试的步骤&#xff0c;可能步骤有点繁琐&#xff0c;如果有不对的地方&#xff0c;欢迎大家指正。 准备活动&#xff1a; 1、打开fiddler&#xff0c;打开fiddler以后会自动开启代理服务器&#xff08…

89C52RC普中单片机-3

1.LCD1602调试工具 main.c #include<regx52.h> #include "lcd1602.h" void main() {lcd1602_init();//LCD1602初始化();while(1){lcd1602_show_string(0,0,"helloworld");lcd1602_show_string(1,1,"123456.0");} } lcd1602.c #include …

双卡尔曼滤波(KF-UKF)用于考虑电池老化的SOC估计

这篇博文来介绍一下如何使用Simulink来完成无迹卡尔曼滤波的搭建以估计锂电池非线性系统的SOC。 (1)KF估计电池老化。电池的容量会随着每次充放电循环而下降&#xff0c;从而导致SOC估计不准确。当电池在充电和放电之间转换时&#xff0c;使用基于事件的线性卡尔曼滤波器来估计…

Redis 数据库的概念、常用命令

Redis数据库 一、关系数据库与非关系型数据库概述1、关系型数据库2、非关系型数据库3、关系数据库与非关系型数据库区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 4、非关系型数据库产生背…

pytorch的permute(dims) 函数的功能详解

有三块 二维矩阵 如下 把二维矩阵堆叠起来&#xff0c;就是三维 矩阵 这样的矩阵 从x方向看&#xff08;0维&#xff09; 有三块 记为3&#xff0c;每块从y方向看&#xff08;1维&#xff09;的行是3&#xff0c;从z方向看&#xff08;2维&#xff09;列也是3&#xff0c;故三…

架构师进阶之路 - 架构优化为什么难

目录 业务迭代和技术优化难以兼顾 缺少“上帝”视角思维 系统架构腐化 缺少架构师视角 系统迭代机制 设计规范把控 最近在组织团队内的系统架构优化&#xff0c;总而言之就是难&#xff0c;至于为什么难我这边总结了以下六个方面&#xff0c;记录一下自己的架构师进阶之路吧。&…

2. 日志模块(上)

日志需求分析 无论对于业务系统还是中间件来说&#xff0c;日志都是必不可少的基础功能。完善、清晰地日志可以帮助我们观测系统运行的状态&#xff0c;并且快速定位问题。现在让我们站在 MyBatis 框架开发者的角度&#xff0c;来简单做一下日志功能的需求分析&#xff1a; 作…

【REST规范】JAX-RS有哪些实现

JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services&#xff0c;是一个Java 编程语言的应用程序接口&#xff0c;支持按照表述性状态转移&#xff08;REST&#xff09;架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java注解来简化Web服务的客…

YUV 8bit转10bit

在有些场景中&#xff0c;我们经常会使用到YUV 8 bit转10bit的场景。 比如YUV420p 8bit 转 P010,P010le,YUV420p10le。 首先说ffmpeg 8 bit 转 10bit. 对于ffmpeg的P010le 和P010be 分别代表小端和大端&#xff0c;那么它转化的时候非常简单&#xff0c;就是8 bit再增加 8bit&…

一篇读懂React、vue框架的生命周期函数

当涉及到前端框架时&#xff0c;React 和 Vue.js 是两个非常受欢迎的选择。它们都提供了强大的工具和功能&#xff0c;帮助开发者构建交互式的、可扩展的应用程序。在这两个框架中&#xff0c;生命周期函数是一个重要的概念&#xff0c;它们允许我们在组件的不同阶段执行特定的…