sql语法学习

前言

SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。那么sql语句语法学习有哪些呢?

可以通过实战项目来加强练习SQL,把学过的SQL应用起来,比如我做的这个数据查询

Select distinct column1, column2
from table1 
	JOIN table2 
		on table1.key1 = table2.key2
where condition1 # group by前的条件筛选
group by column3
having group_condition1 # group by后的条件筛选
order by column4 asc或desc
limit m offset n

一、sql语句语法分析 

1.1、from 和 join

  • 说明查询数据来源,可以单表查询,也可以多表查询,多表之间需要有关联的主键和外键将表格相连。
  • from 或 join 会第一个执行,确定一个整体的数据范围,如果要join不同表,可能会生成一个临时table来用于下面的过程。总之第一步可以简单理解为确定一个数据源表(含临时表)。
#单表查询:
from table

# 合并在两个表中key1和key2都有的部分
from table1 inner join table2 on table1.key1 = table2.key2 

#right join 以右边table2为主,保留table2所有数据,key2有key1缺失的数据补为NULL
from table1 right join table2 on table1.key1 = table2.key2 

#left join 以左边table1为主,保留table1所有数据,key1有key2缺失的数据补为NULL
from table1 left join table2 on table1.key1 = table2.key2

1.2、where条件

  • where 说明查询条件,只能用于group by之前,多个条件用andor链接。
  • as 别名还不能在这个阶段使用,因为可能别名是一个还没执行的表达式。

column_number between 0 and 100 #两数之间
column_number between 0 and 100 #不在两数之间,在值域外

column_number in (1,3,5) #在数组内
column_number not in (1,3,5) #不在数组内
column_str = "abc"
column_str != "abc"
column_str like "abc"
column_str like "%abc%"# %是通配符,表示任意字符。"abc%"表示abc开头的任意字符,"%abc"表示abc结尾的任意字符, 长度无限制。
column_str like "abc_" # "_"表示一个任意字符。"abc_"会匹配到abcd,不会匹配到abc
column_str in  ("A", "B", "C")
column_str not in  ("A", "B", "C")

1.3、group by

  • group by 对之前的数据进行分组,统计等,并将结果集缩小为分组数。这意味着其他的数据在分组后会丢弃。
  • group by 可以同时按照多个变量分组。

按照1个变量分组

SELECT NAME,COUNT(*) AS COUNT FROM orders GROUP BY NAME;

按照2个变量分组

SELECT NAME,COUNT(*) AS COUNT,address FROM orders GROUP BY NAME,address;

1.4、having

  • 如果用了group by分组, having会在分组完成后对结果集再次筛选。
  • as别名也不能在这个阶段使用。

1.5、select

  • 确定结果之后,select用来对结果列column简单筛选或计算,决定输出什么数据。
  • 表示表格内所有列变量,也可以单独筛选某个变量。

1.6、distinct

  • 如果数据行有重复distinct将负责排重。

1.7、order by

  • 在结果集确定的情况下,order by对结果做排序,asc从小到大正序排序,desc从大到小降序排序。
  • 因为select中的表达式已经执行,此时可以用as别名。

1.8、limit/ offset

  • 最后 limit和 offset从排序的结果中截取部分数据。
  • 常和order by 语句一起使用,当对整个结果集排序之后,可以用 limit 指定只返回多少行结果 ,用 offset 指定从哪一行开始返回。
limit m,n

# 表示跳过 m 条数据开始读取 n 行数据

# m 可选 , n 必选表示取几行数据
limit m offset n
#  跳过 n 行数据  ,取 m 行数据

二、功能函数

‌SQL函数主要分为以下几类:聚合函数、转换函数、日期函数、数学函数、字符串函数。‌

2.1 聚合函数

聚合函数用于对一组值执行计算,并返回单个值。常见的聚合函数包括:

‌COUNT()‌:计算行数或特定列的非空值数量。例如,COUNT(column_name)计算特定列的非空值数量,而COUNT(*)计算所有行数‌。
‌SUM()‌:计算数值列中所有值的总和。
‌AVG()‌:计算数值列的平均值。
‌MIN()‌ 和 ‌MAX()‌:分别找出列中的最小值和最大值‌

2.2 转换函数

转换函数用于数据类型转换,常见的转换函数包括:

‌CAST()‌ 和 ‌CONVERT()‌:用于将一种数据类型转换为另一种数据类型。例如,CAST(expression AS data_type)和CONVERT(data_type[(length)], expression [, style])

2.3 日期函数

日期函数用于处理日期和时间值,常见的日期函数包括:

‌GETDATE()‌:返回当前的日期和时间。
‌DATEADD()‌:在日期上加上指定的时间间隔‌

YEAR(date) 返回指定日期的年份数值
MONTH(date)返回指定日期的月份数值
DAY(date)返回指定日期的天数值

# 时间减少1小时(前一小时)
select date_sub(now(), INTERVAL 1 hour);
# 日期增加1天
select date_add(now(), INTERVAL 1 day);

2.4 数学函数

数学函数用于执行数学运算,常见的数学函数包括:

‌MOD()‌:计算x除以y的余数。例如,MOD(x, y)计算x除以y的余数‌。
‌ABS()‌:返回数的绝对值‌

2.5 字符串函数

字符串函数用于对字符串进行操作,常见的字符串函数包括:

‌CONCAT()‌:连接两个或多个字符串。例如,CONCAT(str1, str2, ...)‌。
‌SUBSTRING()‌:提取字符串的一部分。例如,SUBSTRING(str, start, length)‌。
‌UPPER()‌ 和 ‌LOWER()‌:分别将字符串转换为大写和小写‌。
 

2.6 其他

CONCAT(char_expr1, char_expr2, char_exprn) 返回连接的字符串。

LEN(char_expr) 返回字符表达式的长度。

LTRIM(char_expr) 返回删除掉前面空格的字符表达式。

RTRIM(char_expr) 返回删除掉其后空格的字符表达式。

TRIM(char_expr ) 返回删除掉开头和结尾空格的字符表达式。

SPACE(int_expr) 返回包含指定空格数的字符串。

REPLICATE(input_string,count) 返回重复指定次数的字符表达式产生的字符串。

RIGHT(char_expr,int_expr) 返回从字符表达式最右端起根据指定的字符个数得到的字符。

STUFF(char_expr1,start,length,char_expr2) 使用字符表达式替换字符表达式的一部分字符,从指定的位置开始替换指定的长度。

SUBSTRING(char_expr,start,length) 返回从字符表达式的指定位置开始,截取指定长度得到的字符集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值