关系型数据库


简介

顾名思义,数据库就是“数据的仓库”。在互联网行业中,海量数据智能存储在数据库database当中。有人会问,为什么不存在Excel当中?因为Excel能存储的数据太少了。03Excel大概能存储60万行数据,10Excel则能存储100万行;然而对于互联网大数据来说,这样的存储能力还是不够。因此,商业公司只能用数据库来存储数据。

我们暂且可以把数据库,看做老中医的药房,数据就像是一个个小格子里面的药,你想取出当归、黄连的时候,打开格子拿药就可以了;也可以将数据库看做图书馆,用户可以根据图书的编号,找书、借书,而这个过程也需要经过图书馆管理系统的认知。


主流数据库

数据库市面上有上百种,不可能全部都掌握,会用常见的下面几种即可。

  • 关系型数据库RDBMS:常见的有MySQL、SQL Sever、Oracle、SQLite3;
  • 非关系型数据库No SQL:常见的有Redis、MongoDB;
  • 配套软件:Navicat Premium 12可视化工具;

学习资料


相关软件

  • 数据库可视化工具:Navicat
  • SQLServer官方工具:Microsoft SQL Server Management Studio
  • 数据库设计软件:PowerDesigner/PDMReader

SqlServer

-- 常用语句模板
-- 存储过程模板
-- ***************************************************************
-- Author:        YangSong
-- CreateDate:    
-- Description:   
-- Table:         
-- ****************************************************************
create procedure [dbo].[sp_proc_name] (  -- alter
	@v_date DATE
)
AS


---------------------------------------------------------------------------------
-- 建表语句模板
-- ***************************************************************
-- Author:        YangSong
-- CreateDate:    
-- Description:   
-- ****************************************************************
create table dbo.table_name (  -- alter
    col_name col_type  -- comments
    -- ...
)


---------------------------------------------------------------------------------
-- 视图语句模板
-- ***************************************************************
-- Author:        YangSong
-- CreateDate:    
-- Description:               
-- ****************************************************************
create view dbo.view_name as  -- alter
select ...


--------------------------------------------------------------------------------
-- 新建函数语句模板
-- ***************************************************************
-- Author:        YangSong
-- CreateDate:    
-- Description:   
-- ****************************************************************
create function dbo.[function_name] (  -- alter
    @parameter_1  [data_type]  -- 参数一
    , @parameter_2  [data_type]  -- 参数二
    -- ...
)
returns [data_type]  -- 函数返回值类型
as

begin
declare @result [data_type]
select
	@result = [...]

return @result
end


---------------------------------------------------------------------------------
-- 循环执行存储过程的脚本
declare @v_date date
set @v_date = '2018-01-01'
while @v_date < '2019-01-01'

begin
	exec sp_name @settle_date = @v_date
	set @v_date = dateadd(day, 1, @v_date)
end
-- SqlServer常用函数
dateadd(month, datediff(month, 0, getdate()), 0)  -- 获取本月月初日期
convert(varchar(7), getdate(), 23) + '-01'  -- 获取本月月初日期
select * into p_copy from t_origin  -- 复制原表的表结构及数据到新表(新表原来不存在)
select * into p_copy from t_origin where 1 = 0  -- 仅复制原表的表结构到新表(新表原来不存在)
insert into p_copy select * from t_origin  -- 仅复制原表的数据到新表(新表原来已存在)

-- 生成日期序列
select
    -- convert(varchar(100), dateadd(d, number, getdate() - 108), 23) as every_time  -- 日期序列开始时间
    cast((dateadd(d, number, getdate() - datediff(day, '2018-12-28', getdate()))) as date) every_time
into #t_date
from master..spt_values
where type = 'p'
    and number <= datediff(day, '2018-12-28', getdate())  -- 日期序列的总天数
order by 1 desc;

-- 开窗函数
-- cume_dist(): partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行加上colume_c所占该分区的比例
cume_dist() over([partition by colume_a, colume_b] order by colume_c desc)

-- percent_rank(): partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行加上colume_c的相对位置
percent_rank() over([partition by colume_a, colume_b] order by colume_c desc)

-- dense_rank(): partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行加上colume_c的排名(可并列,没有间隙)
dense_rank() over([partition by colume_a, colume_b] order by colume_c desc)

-- rank(): partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行加上colume_c的排名(可并列,有间隙)
rank() over([partition by colume_a, colume_b] order by colume_c desc)

-- first_value: partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行返回scalar_expression表达式的第一个计算值
first_value(scalar_expression) over([partition by colume_a, colume_b] order by colume_c desc [rows_range_clause])

-- last_value: partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行返回scalar_expression表达式的最后一个计算值
last_value(scalar_expression) over([partition by colume_a, colume_b] order by colume_c desc [rows_range_clause])

-- lag(): partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行加上向前偏移offset行的return_value字段值
lag(return_value, offset, [, default]) over([partition by colume_a, colume_b] order by colume_c desc)

-- lead(): partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,在给每一行加上向后偏移offset行的return_value字段值
lead(return_value, offset, [, default]) over([partition by colume_a, colume_b] order by colume_c desc)

-- 将有序分区的行分配到指定数量的大致相等的组或桶中
ntile(buckets) over([partition by partition_expression, ...] order by sort_expression desc, ...)

-- row_number(): partition by将数据集分为很多分区,在每个分区之内,按column_c倒排序,再给每一行加上从1开始的序号
row_number() over([partition by colume_a, colume_b] order by colume_c desc)

MySQL


数据库设计

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值