首页 > 数据库 >SQL的语法知识

SQL的语法知识

时间:2023-08-28 18:00:25浏览次数:42  
标签:name 知识 id 语法 score student SQL 查询 class

 

1.全表查询  

示例:select * from 表名

2.选择查询  选择特定的列或者字段

示例:select name,age 表名

3.查询别名   {原始字段名} as {别名}

示例:select name as '学生姓名'  表名

4.查询 常量和运算   加减乘除、取平均值、连接文本等

示例:select name,score,score / 2 as double_score from student

5.条件查询  where

示例:select name,score from student where name = '鱼'

6.条件查询  运算符  =!=<>

示例:select name,score,age from student  where name != 'dog' 

7.条件查询  空值   "IS NULL" 和 "IS NOT NULL" 来判断字段是否为空值或非空值

示例:select name,age,score from student where age is not null

8.条件查询  模糊查询   like    not like

  • 百分号(%):表示任意长度的任意字符序列。
  • 下划线(_):表示任意单个字符。

示例:select name,score from student where name not like '%李%'

9.条件查询  逻辑运算

  • AND:表示逻辑与,要求同时满足多个条件,才返回 true。
  • OR:表示逻辑或,要求满足其中任意一个条件,就返回 true。
  • NOT:表示逻辑非,用于否定一个条件(本来是 true,用了 not 后转为 false)

示例:select name,score from student where name like '%李%' or score > 500

10.基础语法  去重  使用 DISTINCT 关键字来实现去重操作

示例:select distinct class_id ,score from student

11.基础语法   排序

在 SQL 中,我们可以使用 ORDER BY 关键字来实现排序操作。ORDER BY 后面跟上需要排序的字段,可以选择升序(ASC)或降序(DESC)排列

示例:select name,age,score from student order by score desc ,age asc

12.基础语法  截断和偏移

1)你可以使用手指挡住不需要看的部分(即截断)

2)根据任务的编号,直接翻到需要查看的位置(即偏移)

在 SQL 中,我们使用 LIMIT 关键字来实现数据的截断和偏移。

示例:select name,age from student order by age asc limit 1,3

13.基础语法  条件分支  case when 是 SQL 中用于根据条件进行分支处理的语法

示例:

select   name,   case     when (age > 60) then '老同学'     when (age > 20) then '年轻'     else '小同学'   end as age_level from   student order by   name asc

14.函数   时间函数

  • DATE:获取当前日期
  • DATETIME:获取当前日期时间
  • TIME:获取当前时间

示例:select name ,date() as '当前日期' from student

15.函数 - 字符串处理    转换大小写、计算字符串长度以及搜索和替换子字符串等

示例:select id,name ,upper(name) as upper_name  from student where  name = '热dog'

16.函数 - 聚合函数

  • COUNT:计算指定列的行数或非空值的数量。
  • SUM:计算指定列的数值之和。
  • AVG:计算指定列的数值平均值。
  • MAX:找出指定列的最大值。
  • MIN:找出指定列的最小值。

示例:

select   sum(score) as total_score,   avg(score) as avg_score,   max(score) as max_score,   min(score) as min_score from   student

17.分组聚合 - 单字段分组     GROUP BY 关键字对数据进行分组

示例:

select   class_id,   avg(score) as avg_score from   student group by   class_id

18.分组聚合 - 多字段分组   多字段分组和单字段分组的实现方式几乎一致,使用 GROUP BY 语法即可

示例:

select   class_id,   exam_num,   count(id) as total_num from   student group by   class_id,   exam_num

19.分组聚合 - having 子句  

HAVING 子句与条件查询 WHERE 子句的区别在于,WHERE 子句用于在 分组之前 进行过滤,而 HAVING 子句用于在 分组之后 进行过滤。

示例:

select   class_id,   sum(score) as total_score from   student group by   class_id having   sum(score) > 150

20.查询进阶 - 关联查询 - cross join

CROSS JOIN 是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔积

示例:

select   s.name as student_name,   s.age as student_age,   s.class_id as class_id,   c.name as class_name from   student s   cross join class c

21.查询进阶 - 关联查询 - inner join 

INNER JOIN 只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行

示例:

select   s.name as student_name,   s.age as student_age,   s.class_id as class_id,   c.name as class_name,   c.level as class_level from   student s   join class c on s.class_id = c.id

22.查询进阶 -关联查询 - outer join 

OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并 包含没有匹配的行

在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分

示例:

select   s.name as student_name,   s.age as student_age,   s.class_id as class_id,   c.name as class_name,   c.level as class_level from   student s   left join class c on s.class_id = c.id

23.查询进阶 - 子查询

子查询是指在一个查询语句内部 嵌套 另一个完整的查询语句,内层查询被称为子查询。子查询可以用于获取更复杂的查询结果或者用于过滤数据。

示例:

select   name,   score,   class_id from   student where   class_id in (     select       id     from       class   );

24.查询进阶 -子查询 - exists

子查询中的一种特殊类型是 "exists" 子查询,用于检查主查询的结果集是否存在满足条件的记录,它返回布尔值(True 或 False),而不返回实际的数据。

和 exists 相对的是 not exists,用于查找不满足存在条件的记录

示例:

select   name,   age,   class_id from   student where   not exists (     select       1     from       class     where       class.id = student.class_id   )

25.查询进阶 -组合查询

两种常见的组合查询操作:UNION 和 UNION ALL。

  1. UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。

  2. UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。两种常见的组合查询操作:UNION 和 UNION ALL。

    1. UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。

    2. UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。

示例

select name,age,score,class_id from student union all select name,age,score,class_id from student_new

26.查询进阶 -开窗函数 - sum over

在 SQL 中,开窗函数是一种强大的查询工具,它允许我们在查询中进行对分组数据进行计算、 同时保留原始行的详细信息

开窗函数可以与聚合函数(如 SUM、AVG、COUNT 等)结合使用,但与普通聚合函数不同,开窗函数不会导致结果集的行数减少。

SUM(计算字段名) OVER (PARTITION BY 分组字段名)

示例

select  id,name,age,score,class_id,   avg(score) over (partition by class_id) as class_avg_score from   student

27.查询进阶 -开窗函数 - sum over order by

sum over order by,可以实现同组内数据的 累加求和

SUM(计算字段名) OVER (PARTITION BY 分组字段名 ORDER BY 排序字段 排序规则)

示例

select  id,name,age,score,class_id,   sum(score) over (partition by class_id order by score asc) as class_sum_score from   student

28.查询进阶 -开窗函数 -rank

Rank 开窗函数是 SQL 中一种用于对查询结果集中的行进行 排名 的开窗函数。它可以根据指定的列或表达式对结果集中的行进行排序,并为每一行分配一个排名。在排名过程中,相同的值将被赋予相同的排名,而不同的值将被赋予不同的排名。

当存在并列(相同排序值)时,Rank 会跳过后续排名,并保留相同的排名。

Rank 开窗函数的常见用法是在查询结果中查找前几名(Top N)或排名最高的行。

Rank 开窗函数的语法如下:

RANK() OVER (
  PARTITION BY 列名1, 列名2, ... -- 可选,用于指定分组列
  ORDER BY 列名3 [ASC|DESC], 列名4 [ASC|DESC], ... -- 用于指定排序列及排序方式
) AS rank_column
其中,PARTITION BY 子句可选,用于指定分组列,将结果集按照指定列进行分组;
ORDER BY 子句用于指定排序列及排序方式,决定了计算 Rank 时的排序规则。
AS rank_column 用于指定生成的 Rank 排名列的别名。

示例

select id,name,age,score,class_id,     rank() over (partition by class_id  order by score desc) as ranking  from student

29.查询进阶 -开窗函数 - row_number

Row_Number 开窗函数是 SQL 中的一种用于为查询结果集中的每一行 分配唯一连续排名 的开窗函数。

它与之前讲到的 Rank 函数,Row_Number 函数为每一行都分配一个唯一的整数值,不管是否存在并列(相同排序值)的情况。每一行都有一个唯一的行号,从 1 开始连续递增。

Row_Number 开窗函数的语法如下(几乎和 Rank 函数一模一样):

ROW_NUMBER() OVER (
  PARTITION BY column1, column2, ... -- 可选,用于指定分组列
  ORDER BY column3 [ASC|DESC], column4 [ASC|DESC], ... -- 用于指定排序列及排序方式
) AS row_number_column
其中,PARTITION BY 子句可选,用于指定分组列,将结果集按照指定列进行分组;
ORDER BY 子句用于指定排序列及排序方式,决定了计算 Rank 时的排序规则。
AS rank_column 用于指定生成的 Rank 排名列的别名。

示例

select id,name,age,score,class_id,     row_number() over (partition by class_id  order by score desc) as row_number  from student

30.查询进阶 -开窗函数 - lag / lead

开窗函数 Lag 和 Lead 的作用是获取在当前行之前或之后的行的值,这两个函数通常在需要比较相邻行数据或进行时间序列分析时非常有用

1)Lag 函数

Lag 函数用于获取 当前行之前 的某一列的值。它可以帮助我们查看上一行的数据。

Lag 函数的语法如下:

LAG(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)

参数解释:

  • column_name:要获取值的列名。
  • offset:表示要向上偏移的行数。例如,offset为1表示获取上一行的值,offset为2表示获取上两行的值,以此类推。
  • default_value:可选参数,用于指定当没有前一行时的默认值。
  • PARTITION BYORDER BY子句可选,用于分组和排序数据。

2)Lead 函数

Lead 函数用于获取 当前行之后 的某一列的值。它可以帮助我们查看下一行的数据。

Lead 函数的语法如下:

LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)

示例

select id,name,age, score,class_id,    lag(name,1,null) over (partition by class_id order by score desc) as prev_name,    lead(name,1,null) over (partition by class_id order by score desc) as next_name  from student

 参考鱼皮大佬的SQL之母

学习链接:http://sqlmother.yupi.icu/#/learn 

标签:name,知识,id,语法,score,student,SQL,查询,class
From: https://www.cnblogs.com/xq0422/p/17651714.html

相关文章

  • Postgresql-数据库无法停止,报错:pg_ctl server does not shut down
    根据您的查询,pg_ctlserverdoesnotshutdown(pg_ctl服务无法关闭)的原因可能有很多。以下是一些可能的解决方案和代码示例:(1)杀死所有与PostgreSQL相关的进程:使用以下命令尝试停止所有与PostgreSQL相关的进程:pg_ctl-D/path/to/postgresql/data_directorystop-mimmediate这......
  • Windows部署SQLmap
    SQLMap是一款用于自动化SQL注入攻击的工具,它主要用于测试和评估Web应用程序的安全性。在Windows系统上安装和部署SQLMap可以按照以下步骤进行:下载Python:首先,你需要安装Python解释器,SQLMap是使用Python编写的。你可以从Python官方网站(https://www.python.org/downloads/windows/......
  • ASN.1抽象语法标记1
    ASN.1编码berASN.1(抽象语法表示法一)ASN.1(抽象语法表示法一)是一种正式但灵活的表示法,允许您指定高级电信协议中使用的抽象对象。您可以使用整数和位字符串等简单类型以及集合和序列等结构化类型来构建复杂类型的定义。基本编码规则 (BER)BER 描述了如何将每种 ASN.1 类型的......
  • 《MySQL命令行客户端》的使用方法
    MySQL客户端连接工具有多种,但最常用的是MySQL命令行客户端。下面是MySQL命令行客户端的语法:mysql-hhostname-uusername-ppassword-Ddatabase_name其中:-h 参数指定要连接的MySQL服务器的主机名或IP地址。-u 参数指定要连接的MySQL服务器的用户名。-p 参数提示输......
  • sqlserver 从数据源左侧截取到遇到特殊字符的最短的子字符串
    selectdbo.sjGetPreStr('1234^5*6/-33_','[]-_=+*&^')    ===>1234Createfunction[dbo].[sjGetPreStr](@strvarchar(1000),@pointArrvarchar(100))returnsvarchar(1000)asbegindeclare@resvarchar(1000)=''......
  • MySqlBulkCopy 批量新增数据
    MySqlConnector有个MySqlBulkCopy批量新增数据方法,不过只能用DataTable,需要把list转成DataTable代码如下:MySqlBulkCopymySqlBulkCopy=newMySqlBulkCopy(conn){DestinationTableName="userinfo"};mySqlBulkCopy.ColumnMappings.AddRange(table.Columns.Cast<DataC......
  • 王道408---CO---计算机系统概述易混淆易遗忘知识点
    易混淆性能指标机器字⻓计算机进⾏⼀次整数运算所能处理的⼆进制的位数,⼀般与字⻓⻓度有关注意不是浮点数运算数据通路带宽外部数据总线⼀次能并⾏传送信息的位数,⾮CPU内部数据总线宽度MIPSMIPS:每秒执⾏多少百万条指令MFLOPS:每秒执⾏多少百万次浮点运算GFLOPS:每秒执⾏多......
  • TDSQL-PG 数据重分布
    记录一次数据重分布造成的数据库抖动。何为数据重分布: select*fromt1,t2wheret1.id1=t2.id2;若id1,id2都为分片键,在做算子下推到dn时,由于分片键是hash算法,所以id1,id2相同的值都在同一个dn上。每个dn可以独立完成数据过滤。dn计算的数据在CN聚合后,返回客户端。若id1......
  • 无法对表进行任何操作了,mysql
    现象:无法对表进行任何操作,比如truncatetable,比如select,一直处于等待状态。看起来像是表被锁了。 解决过程:1.查询占用中的查询:showOPENTABLESwhereIn_use>0;结果是0行数据,表明没有任何查询在占用。2.查询当前的所有事务select*frominformation_schema.in......
  • activiti 删除某个流程的sql
    DELETEFROMACT_HI_ATTACHMENTWHEREPROC_INST_ID_='152512';DELETEFROMACT_HI_COMMENTWHEREPROC_INST_ID_='152512';DELETEFROMACT_HI_ACTINSTWHEREPROC_INST_ID_='152512';DELETEFROMACT_HI_DETAILWHEREPROC_INST_ID_=......