SQL基本语法

一、数据类型

1、int            整数

     float         小数,浮点数

     varchar    文本

     date        日期

2、数值型

int(size)              在括号中规定最大位数

float(size,d)        单精度浮点型  size表示最大位数,d表示小数点

double(size,d)    双精度浮点型  size表示最大位数,d表示小数点

3、日期型

Year()                     2位或4位格式的年

Date()                    日期格式

Time()                   时间格式

DateTime()           日期时间组合

TimeSTamp()        时间戳 

4、文本型

char()             保存固定长度的字符串

varchar()        保存可变长度的字符串


二、SQL基础查询语言 

1、常用命令以及书写顺序

select *()

from 表 

where 条件

group by 条件

having 条件

order by 条件

limit  限制数据条数

2、检索数据 select

语法:

select 字段名

from 表名

  1. 检索单列:select 列名        from 表名
  2. 检索多列:用“,”隔开
  3. 检索所有列:select *
  4. 限制检索结果:limit(limit x,n 意味着从第x+1行返回n行)
  5. 去重检索:distinct

3、限定条件 where

 语法:

select *()

from 表 

where 条件

  1.  常用于判断命令

        数值判断:>         <        =        !=        <=        >=        between and

        逻辑判断:AND        OR        NOT        IN()

        模糊判断: LIKE % _        例:like"%财%"

4、计算字段

语法:

select

             字段1 + 字段2       as '合计'

             字段1 - 字段2       as '相差'

             字段1 * 字段2       as '乘积'

             字段1 / 字段2       as '除以'

from 表名

where 条件(非必须)

 5、拼接字段

select  concat(字段1,字段2) as '新名称'

from  表名

6、数据分组

语法:

select *()

from 表 

where 条件

group by 条件

7、数据过滤

语法:

select *()

from 表 

where 条件

group by 条件

having 条件

8、结果排序

语法:

select *()

from 表 

where 条件

group by 条件

having 条件

order by 条件

排序 :升序 asc (默认)

            降序 desc


三、SQL函数

1、数值型

SUM(列名)        返回某列的总和

AVG(列名)         返回某列的平均值

MAX(列名)        返回某列的最大值

MIN(列名)         返回某列的最小值

COUNT(列名)     返回某列行数(不包括null值)

2、日期型函数

NOW()                返回当前日期和时间

CURDATE()        返回当前日期

CURTIME()        返回当前时间

DATE()                提取日期或日期/时间表达式的日期部分

3、文本型函数

LEFT()                返回左边的字符

RIGHT()                返回右边的字符

LENGTH()                返回某字段的长度

SUBSTRING(s,n,len)        返回字符串s从第n个字符开始取长度为len的字符串

4、控制语句 

  1. IF 函数

语法:IF(condition,true,false)

  1. 条件函数

       语法:

case

        when  条件1  then  '结果1'

        when  条件2  then  '结果2'

        ......

        Else  '默认值'

END   as '新字段名'


四、 SQL进阶

1、sql语句执行顺序

from  ;  join   ;  on   ;  where  ;   group by  ;   having    ;  select   ;  order by  ;   limit

2、多表连接查询

1>横向连接

  1. 内连接 inner join

select *

from 表1 as a

inner join 表2 as b

on  a.列名 = b.列名

     2.左连接 left join

select *

from 表1 as a

left join 表2 as b

on a.列名 = b.列名

     3.右连接 right join

select *

from 表1 as a

right join 表2 as b

on a.列名 = b.列名

2> 纵向连接 UNION

3> 子查询

  1. 定义:当一个查询是另一个查询的一部分时,我们把内层的查询称为子查询,外层查询称为父查询;通过子查询可以实现多表查询,该查询可能包括in,any,all和exists等关键字,除此以外可能还包含比较运算符
  2. 子查询分类

        1> where 子查询

       语法:

                select *

                from 表         

                where c01<(select xxx    from 表t)

注:where后面的字段名一定要和子查询中的字段名顺序一致 ;where后面的字段数目要和子查询中的字段数目一致 

        2> from 子查询

        语法:

                select *

                from  (select xxx    from 表)as t1

                where 条件

 子查询本身是一个完整的查询,需要赋予别名

3、窗口函数

定义:用于计算基于组(group by)的某种聚合值,它与聚合函数不同点在于:窗口函数可以在分组后返回多行结果,而聚合函数对于每组只能返回一行

窗口函数可用于解决这几类经典问题:排名问题、Top N问题、前百分之N问题、累计问题、每组比较问题、连续问题

排名函数 

 select  *   row_number()   over(partition by <要分组的列名>  order by<要排序的列名>)as 排名

from  表名

注:如果不分组只对某列表排序,partition by 可省略

        row_number() 可替换其他排名函数

 Top N问题

select  *   

from(select  * row_number()   over(partition by <要分组的列名>  order by<要排序的列名>)as 排名

from  表名

)as a

where 排名 <= <N>

百分之N问题

使用窗口函数percent_rank()

累计问题

 select  *   聚合函数   over(partition by <要分组的列名> 

                                           order by<要排序的列名>

                                           rows between 范围起始行 and 范围终结行)

from  表名

每组内比较问题

select  *   

from(select  * avg(<列名>)   over(partition by <要分组的列名>  )as 新名

from  表名

)as a

where <列名>  > 组内比较值

连续出现N次问题

 select  distinct 列  

from(select  列  函数   over(partition by <要分组的列名>  order by<要排序的列名>)as 列1

from  表名

)as a

where (列 = 列1 ...)

结语 :本篇是SQL的基础知识浓缩总结,所看书籍 《SQL面试宝典》。知识只是辅助,还需大量实战多刷题

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值