SQL(一)基本语法

文章目录

  • [一、Sql 语言基本特点](#一、Sql 语言基本特点)
  • 二、数据查询(按执行顺序排列)
    • [1. From & Join](#1. From & Join)
    • [2. Where](#2. Where)
    • [3. Group by](#3. Group by)
    • [4. Having](#4. Having)
    • [5. Select](#5. Select)
    • [6. Distinct](#6. Distinct)
    • [7. Order by](#7. Order by)
    • [8. Limit/ Offset](#8. Limit/ Offset)
  • 三、功能公式
    • [1. 字符处理](#1. 字符处理)
    • [2. 时间处理](#2. 时间处理)
    • [3. 统计计算](#3. 统计计算)

一、Sql 语言基本特点

  1. 不区分大小写
  2. 分号";"表断句,换行符不断句

二、数据查询(按执行顺序排列)

  • 基本格式
sql 复制代码
Select distinct column_1, Function(column_or_expression), column2 as c2
From my_table 
	JOIN another_table 
		on my_table.key1 = another_table.key2
where conditon1 # group by 前的条件筛选
group by column_3
having group_conditon1 # group by 后的条件筛选
order by column_4 asc/desc
limit m offset n

1. From & Join

  • 说明查询数据来源:可以单表查询,也可以多表查询,多表之间需要有main_key将表格相连。
  • From 或 Join 会第一个执行,确定一个整体的数据范围. 如果要join不同表,可能会生成一个临时Table来用于下面的过程。总之第一步可以简单理解为确定一个数据源表(含临时表)。
sql 复制代码
#单表查询:
From single_table
# 多表查询:
# 合并在两个表中key1和key2都有的部分
From table1 inner join table2 on table1.key1 = table2.key2 

#right join 以右边table2为主,保留table2所有数据,key1超出key2范围的丢掉不要,key2有key1缺失的补为NULL
From table1 right join table2 on table1.key1 = table2.key2 

#left join 以左边table1为主,保留table1所有数据,key2超出key1范围的丢掉不要,key1有key2缺失的补为NULL
From table1 left join table2 on table1.key1 = table2.key2

#Full join 全链接,仅Key1有的则Key2为Full,仅Key2有的则Key1为Full,保留所有数据
From table1 Full join table2 on table1.key1 = table2.key2

2. Where

  • Where 说明查询条件(只能用于group by之前),多个条件用andor链接。
  • 确定了数据来源 Where 语句就将在这个数据源中按要求进行数据筛选,并丢弃不符合要求的数据行,所有的筛选Column属性只能来自From圈定的表。
  • As别名还不能在这个阶段使用,因为可能别名是一个还没执行的表达式。
  • 常用数值条件语法:
sql 复制代码
col_num != 4 #基础比较 =, !=;   <, <=;   >, >=;

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

col_num in (2,4,6) # 在数组内
col_num not in (2,4,6) # 不在数组内

col_num % 2 = 0 # 偶数
col_num %2 # 奇数
col_num %2 =1 # 奇数
  • 常用字符串比较语法
sql 复制代码
col_str = "abc"
col_str != "abc"
col_str like "abc" #没有通配符时,"like" 和 "=" 作用相同
col_str like "%abc%"# %是通配符,表示任意字符。"abc%"表示abc开头的任意字符,"%abc"表示abc结尾的任意字符, 长度无限制。
col_str like "abc_" # "_"表示一个任意字符。"abc_"会匹配到abcd,不会匹配到abc
col_str in  ("A", "B", "C")
col_str not in  ("A", "B", "C")

3. Group by

  • Group by 对之前的数据进行分组,统计等,并将结果集缩小为分组数。这意味着其他的数据在分组后会丢弃。
  • Group by 可以同时按照多个变量分组
  • 例:原数据表
  • 按1个变量分组
sql 复制代码
SELECT role,count(*)as count,building is not Null as bn FROM employees
group by role
  • 按2个变量分组
sql 复制代码
SELECT role,count(*)as count,building is not Null as bn FROM employees
group by role,bn

4. Having

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

5. Select

  • 确定结果之后,Select用来对结果Column简单筛选或计算,决定输出什么数据.
  • 表示表格内所有列变量,也可以单独筛选某个变量
sql 复制代码
Select * #查询所有列
Select column_1, column_2, column_3 #选择指定列变量	

#Function: 注意不同sql平台的function有所差异
Count(*) #样本总量计数	

6. Distinct

  • 如果数据行有重复Distinct将负责排重.

7. Order by

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

8. Limit/ Offset

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

三、功能公式

1. 字符处理

sql 复制代码
Length(str)#返回字符串str长度
Locate(substr,str)#返回子串substr在字符串str第一次出现的位置
LTrim(str)#移除字符串str左边的空格
RTrim(str)#移除字符串str右边的空格
Trim(str)#移除字符串str左右两边的空格
Left(str,n)#返回字符串str最左边的n个字符
Right(str,n)#返回字符串str最右边的n个字符
Upper(str)#小写转化为大写

2. 时间处理

sql 复制代码
AddDate() #增加一个日期,天、周等
AddTime() #增加一个时间,天、周等
CurDate() #返回当前日期
CurTime() #返回当前时间
Date() #返回日期时间的日期部分
DateDiff() #计算两个日期之差
Date_Add() #高度灵活的日期运算函数
Date_Format() #返回一个格式化的日期或时间串
Day() #返回一个日期的天数部分
DayOfWeek() #返回一个日期对应的星期几
Hour() #返回一个时间的小时部分
Minute() #返回一个时间的分钟部分
Month() #返回一个日期的月份部分
Now() #返回当前日期和时间
Second() #返回一个时间的秒部分
Time() #返回一个日期时间的时间部分
Year() #返回一个日期的年份部分

3. 统计计算

sql 复制代码
Avg() #求均值
Max() #求最大值
Min() #求最小值
Sum() #求和
Count() #统计个数
Abs() #求绝对值
相关推荐
做梦敲代码2 分钟前
达梦数据库-读写分离集群部署
数据库·达梦数据库
小蜗牛慢慢爬行42 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger1 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud1 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷1 小时前
Redis
数据库·redis·缓存
仰望大佬0072 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名2 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库
一只路过的猫咪2 小时前
thinkphp6使用MongoDB多个数据,聚合查询的坑
数据库·mongodb