2023年6月21日发(作者:)

数据库知识及SQL培训

关系型数据库:当前主流的关系型数据库有Oracle、DB2、SQL Server、MySQL等

1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

2. 事务支持使得对于安全性能很高的数据访问要求得以实现。

非关系型数据库(NOSQL):MongoDB等

1. 性能NOSQL是基于键值的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

一、 SQL介绍

SQL语言:结构化的查询语言。(Structured Query Language),SQL SERVER是关系数据库管理系统的标准语言。

数据库基础知识

1、库、表、字段(重点介绍一下建临时表、字段的数据类型)

2、主键、索引

3、视图

4、触发器、函数、存储过程

5、作业

二、 SQL基础查询语句演示

6 【select】a,b,c,d,e,f,g,*

1 【from】 table1 t1

2 【XXX join】 table2 t2 【on】 = and ...... (跟逻辑与关系运算符)

3 【where】 = XXX and = xxx or =xxx(跟逻辑与关系运算符)

4 【group by】 t1.a,t1.b,t1.c

5 【order by】 t1.a,t2.b,t1.c

上述每行的数字代表整段查询语句在内部执行时大致的执行顺序。

1. 基本关键字

1.【select】其含义为‘检索’、‘查询’的意思,指查询、检索什么内容,也具有‘定义’的含义。

2.【from】指从哪里检索、从哪张表、视图等对象进行查询。 3.【where】指筛选条件,即添加特定阀值,来过滤出具体满足条件的数据记录。可以跟逻辑运算与关系运算。

4.【xxx join】关联匹配表与表之间按照特定字段进行匹配

5.【group by】分组聚合按照特定字段进行分组

6.【order by】排序按照特定字段进行排序

常用的运算符

有关系运算符:>,<,>=,<=, =,<>,!=

有逻辑运算符:!(not),&&(and), ||(or)

1) 案例1

查询并返回个股代码表中A股相关信息。

select symbol as '个股代码'

,sname as '个股名称'

,CompanyCode as '公司代码'

from Gg_securitycode

where stype = 'EQA'

如图所示:从个股代码表中查询、检索满足条件是A股市场的股票,并返回三个字段的结果集。(select 后面跟【*】指返回所有字段)

2) 案列2

查询并返回个股代码表中A股相关信息并按照公司代码正序排序。

select symbolas'个股代码'

,snameas'个股名称'

,CompanyCodeas'公司代码'

from Gg_securitycode

where stype='EQA'

orderby CompanyCode asc

如图,我们可以看到前一次没排序时输出的结果【白云机场】在排序后已经不在结果集前列。

2. 统计类函数应用(聚合函数)

SQL内置了不少常用的统计类函数,用于数学统计计算。

如常用的求和,计数等。

1) 案列1:

计算A股市场某年某月某日的总市值。

select sum(tcap) as '市场总市值'

from P_GG_KEYDATA

where TDATE = '20160729' 如图所示:这里使用了一个条件,即交易日为20160729,然后用SUM() 函数求 TCAP总市值字段的和。

2) 案列2

计算A股市场某年某月某日以来,A股每个交易日的总市值。

select tdate as '交易日'

,sum (tcap) as '市场总市值'

from P_GG_KEYDATA

where TDATE >= '20160720' and ISEDATE = 1

group by TDATE

如图所示:这里使用到了一个新的关键字【group by】,这个关键字意为分组聚合。

上图即为:按照每个交易日做分组聚合,对每个交易日的TCAP字段做求和运算。

通常应用中【group by】与各类聚合函数一起出现。

注意:在select 后所显示的字段中如果没有被聚合函数调用,则必须在group by 中出现

其他常用聚合函数列举:

avg()平均值,max()最大值,min()最小值,count() 数量,sqrt()平方根,square()平方 3) 案列3

求某日A股中股价最高的个股,股价最低的个股,股价的平均值。

select tdate as '交易日'

,max(tclose) as '最贵的股票'

,min(tclose) as '最便宜的股票'

,avg(tclose) as '平均价格'

from P_GG_KEYDATA

where TDATE >= '20160720' and ISEDATE = 1

group by TDATE

3. 多表关联

有时候我们所需要的数据并不在一张表里,可能分散在好几张不同的数据表中,此时我们需要对数据表进行关联查询,关联后我们可以获取不同数据表中的字段返回到一个结果集中。

关联查询类型

inner join 内连接,取左右两边数据表能完全匹配的数据记录,即交集

left join 左连接,取以左侧数据表关键字为准的记录行数,右侧数据多剔少补空

right join 右连接,取以右侧数据表关键字为准的记录行数,左侧数据多剔少不空

full join 全连接,取左右两侧数据表所有记录,即并集

语法: from [table_a] XXXX join [table_b] on table__a=table__a 1) 案例1

取个股代码表中公司代码为10000591的个股某天的某某年度的一致预期EPS

select ,yCode,,_date,_date,_name,cf.c1

from Gg_securitycode gs

inner join con_forecast_stk cf

on =_code and _type=1 and _date ='2016-7-29' and

_date='2016'

where CompanyCode = '10000591'

a) inner join

b) left join

c) right join

d) full join

这里我们可以看到,几种不同的JOIN 出来的数据有些是不一样的。选用不同的JOIN类型是需要考虑不同的应用场景。

4、CASE …….WHEN…..... 的使用

判断 case when 当满足条件 then ...... 可以写很多种情况,直到END结束

1):例1

select symbol,sname,

case stype when 'EQA' THEN 'A股' WHEN 'EQB' THEN 'B股' WHEN 'HKE' THEN '港股' ELSE '其他' END AS STYPE,

CASE EXCHANGE WHEN 'CNSESH' THEN '上海交易所' WHEN 'CNSESZ' THEN '深圳交易所' end as

EXCHANGE

from gg_securitycode

2):例2

create table #tb(姓名 varchar(10),课程 varchar(10),分数 int)

insert into #tb values('张三','语文',74)

insert into #tb values('张三','数学',52)

insert into #tb values('张三','物理',93)

insert into #tb values('李四','语文',74)

insert into #tb values('李四','数学',84)

insert into #tb values('李四','物理',60)

select *,case when 分数>=90 then '优秀' when 分数>=80 then '良好' when 分数>=60 then '及格' ELSE '不合格' END AS '点评'

from #tb

5、转换函数:CAST、CONVERT

1、CAST的使用

CAST ( expression AS data_type [ ( length ) ] )

select CAST( getdate() AS varchar(10))

2、CONVERT的使用

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

select CONVERT(varchar(10),getdate(),112)

select CONVERT(varchar(10),getdate(),121)

select CONVERT(varchar(7),getdate(),121)

3、数据类型的转换规则

select cast(cast(20170223 as varchar(10)) as datetime)

2023年6月21日发(作者:)

数据库知识及SQL培训

关系型数据库:当前主流的关系型数据库有Oracle、DB2、SQL Server、MySQL等

1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

2. 事务支持使得对于安全性能很高的数据访问要求得以实现。

非关系型数据库(NOSQL):MongoDB等

1. 性能NOSQL是基于键值的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

一、 SQL介绍

SQL语言:结构化的查询语言。(Structured Query Language),SQL SERVER是关系数据库管理系统的标准语言。

数据库基础知识

1、库、表、字段(重点介绍一下建临时表、字段的数据类型)

2、主键、索引

3、视图

4、触发器、函数、存储过程

5、作业

二、 SQL基础查询语句演示

6 【select】a,b,c,d,e,f,g,*

1 【from】 table1 t1

2 【XXX join】 table2 t2 【on】 = and ...... (跟逻辑与关系运算符)

3 【where】 = XXX and = xxx or =xxx(跟逻辑与关系运算符)

4 【group by】 t1.a,t1.b,t1.c

5 【order by】 t1.a,t2.b,t1.c

上述每行的数字代表整段查询语句在内部执行时大致的执行顺序。

1. 基本关键字

1.【select】其含义为‘检索’、‘查询’的意思,指查询、检索什么内容,也具有‘定义’的含义。

2.【from】指从哪里检索、从哪张表、视图等对象进行查询。 3.【where】指筛选条件,即添加特定阀值,来过滤出具体满足条件的数据记录。可以跟逻辑运算与关系运算。

4.【xxx join】关联匹配表与表之间按照特定字段进行匹配

5.【group by】分组聚合按照特定字段进行分组

6.【order by】排序按照特定字段进行排序

常用的运算符

有关系运算符:>,<,>=,<=, =,<>,!=

有逻辑运算符:!(not),&&(and), ||(or)

1) 案例1

查询并返回个股代码表中A股相关信息。

select symbol as '个股代码'

,sname as '个股名称'

,CompanyCode as '公司代码'

from Gg_securitycode

where stype = 'EQA'

如图所示:从个股代码表中查询、检索满足条件是A股市场的股票,并返回三个字段的结果集。(select 后面跟【*】指返回所有字段)

2) 案列2

查询并返回个股代码表中A股相关信息并按照公司代码正序排序。

select symbolas'个股代码'

,snameas'个股名称'

,CompanyCodeas'公司代码'

from Gg_securitycode

where stype='EQA'

orderby CompanyCode asc

如图,我们可以看到前一次没排序时输出的结果【白云机场】在排序后已经不在结果集前列。

2. 统计类函数应用(聚合函数)

SQL内置了不少常用的统计类函数,用于数学统计计算。

如常用的求和,计数等。

1) 案列1:

计算A股市场某年某月某日的总市值。

select sum(tcap) as '市场总市值'

from P_GG_KEYDATA

where TDATE = '20160729' 如图所示:这里使用了一个条件,即交易日为20160729,然后用SUM() 函数求 TCAP总市值字段的和。

2) 案列2

计算A股市场某年某月某日以来,A股每个交易日的总市值。

select tdate as '交易日'

,sum (tcap) as '市场总市值'

from P_GG_KEYDATA

where TDATE >= '20160720' and ISEDATE = 1

group by TDATE

如图所示:这里使用到了一个新的关键字【group by】,这个关键字意为分组聚合。

上图即为:按照每个交易日做分组聚合,对每个交易日的TCAP字段做求和运算。

通常应用中【group by】与各类聚合函数一起出现。

注意:在select 后所显示的字段中如果没有被聚合函数调用,则必须在group by 中出现

其他常用聚合函数列举:

avg()平均值,max()最大值,min()最小值,count() 数量,sqrt()平方根,square()平方 3) 案列3

求某日A股中股价最高的个股,股价最低的个股,股价的平均值。

select tdate as '交易日'

,max(tclose) as '最贵的股票'

,min(tclose) as '最便宜的股票'

,avg(tclose) as '平均价格'

from P_GG_KEYDATA

where TDATE >= '20160720' and ISEDATE = 1

group by TDATE

3. 多表关联

有时候我们所需要的数据并不在一张表里,可能分散在好几张不同的数据表中,此时我们需要对数据表进行关联查询,关联后我们可以获取不同数据表中的字段返回到一个结果集中。

关联查询类型

inner join 内连接,取左右两边数据表能完全匹配的数据记录,即交集

left join 左连接,取以左侧数据表关键字为准的记录行数,右侧数据多剔少补空

right join 右连接,取以右侧数据表关键字为准的记录行数,左侧数据多剔少不空

full join 全连接,取左右两侧数据表所有记录,即并集

语法: from [table_a] XXXX join [table_b] on table__a=table__a 1) 案例1

取个股代码表中公司代码为10000591的个股某天的某某年度的一致预期EPS

select ,yCode,,_date,_date,_name,cf.c1

from Gg_securitycode gs

inner join con_forecast_stk cf

on =_code and _type=1 and _date ='2016-7-29' and

_date='2016'

where CompanyCode = '10000591'

a) inner join

b) left join

c) right join

d) full join

这里我们可以看到,几种不同的JOIN 出来的数据有些是不一样的。选用不同的JOIN类型是需要考虑不同的应用场景。

4、CASE …….WHEN…..... 的使用

判断 case when 当满足条件 then ...... 可以写很多种情况,直到END结束

1):例1

select symbol,sname,

case stype when 'EQA' THEN 'A股' WHEN 'EQB' THEN 'B股' WHEN 'HKE' THEN '港股' ELSE '其他' END AS STYPE,

CASE EXCHANGE WHEN 'CNSESH' THEN '上海交易所' WHEN 'CNSESZ' THEN '深圳交易所' end as

EXCHANGE

from gg_securitycode

2):例2

create table #tb(姓名 varchar(10),课程 varchar(10),分数 int)

insert into #tb values('张三','语文',74)

insert into #tb values('张三','数学',52)

insert into #tb values('张三','物理',93)

insert into #tb values('李四','语文',74)

insert into #tb values('李四','数学',84)

insert into #tb values('李四','物理',60)

select *,case when 分数>=90 then '优秀' when 分数>=80 then '良好' when 分数>=60 then '及格' ELSE '不合格' END AS '点评'

from #tb

5、转换函数:CAST、CONVERT

1、CAST的使用

CAST ( expression AS data_type [ ( length ) ] )

select CAST( getdate() AS varchar(10))

2、CONVERT的使用

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

select CONVERT(varchar(10),getdate(),112)

select CONVERT(varchar(10),getdate(),121)

select CONVERT(varchar(7),getdate(),121)

3、数据类型的转换规则

select cast(cast(20170223 as varchar(10)) as datetime)