文章目录
- 简介
- 主流数据库
- 学习资料
- 相关软件
- SqlServer
- MySQL
- 数据库设计
简介
顾名思义,数据库就是“数据的仓库”。在互联网行业中,海量数据智能存储在数据库database当中。有人会问,为什么不存在Excel当中?因为Excel能存储的数据太少了。03Excel大概能存储60万行数据,10Excel则能存储100万行;然而对于互联网大数据来说,这样的存储能力还是不够。因此,商业公司只能用数据库来存储数据。
我们暂且可以把数据库,看做老中医的药房,数据就像是一个个小格子里面的药,你想取出当归、黄连的时候,打开格子拿药就可以了;也可以将数据库看做图书馆,用户可以根据图书的编号,找书、借书,而这个过程也需要经过图书馆管理系统的认知。
主流数据库
数据库市面上有上百种,不可能全部都掌握,会用常见的下面几种即可。
- 关系型数据库RDBMS:常见的有MySQL、SQL Sever、Oracle、SQLite3;
- 非关系型数据库No SQL:常见的有Redis、MongoDB;
- 配套软件:Navicat Premium 12可视化工具;
学习资料
- w3school的sql教程
- MySQL菜鸟教程
- 《MySQL数据库应用从入门到精通》
- SQL在线测试网站
相关软件
- 数据库可视化工具: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
数据库设计
- 数据库表字段命名规范
更多推荐
关系型数据库
发布评论