导图社区 SQL思维导图
SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。下图讲述了SQL的基础知识,收藏下图学习吧!
编辑于2021-09-07 17:18:06SQL
基本语言
数据操作语言 (DML)
(结构化查询语言)是用于执行查询
SELECT - 从数据库表中获取数据
用于更新、插入和删除记录
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
数据定义语言 (DDL)
创建或删除表
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
定义索引(键)
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
查看表结构
DESC table
数据查询语言DQL
SELECT-查询
WHERE-条件
GROUP BY-分组
ORDER BY -排序
HAVING-过滤
事务处理语言TPL
BEHIN
TRANSACTION
COMMIT
ROLLBACK-回滚
表操作
操作表结构
改变表
增加一列
ALTER TABLE 表名 ADD COLUMNS (字段名 字段类型 DEFAULT NULL COMMENT '字段中文名');
删除一列
ALTER TABLE 表名 drop COLUMNS 列名
修改列类型
ALTER TABLE 表名 modify COLUMNS 列名 字段类型
修改列名
ALTER TABLE 表名 change COLUMNS 列名 字段类型
修改表名
ALTER TABLE 表名 rename to 表名
展示表
desc +表名
desc plsql function extended+存储名
删除表
drop 表名
操作表中数据
删
delete from 表名 where xxx
不加where 时表中数据全部删掉
truncate 表名
删除所有行
注意区分drop,delete,truncate
改
update 表名 set 字段名=新值,字段名=新值 where
增
insert into 表名 values ;;,;;,;;
查询数据
语法
SELECT 字段--字段间逗号相隔FROM 表名WHERE 条件GROUP BY 字段 --对结果分组,有聚合函数时使用ORDER BY 字段 --按字段排序HAVING 条件 --聚合函数使用时卡条件LIMIT NUM --限制函数
并非每个语句都需要,但select*from 必须有
SELECT
查询全部*
select*from
字段别名AS
去重复记录 DISTINCT
select distinct a,b,c from table
有聚合函数时不可使用
FROM
表之间的连接
LEFT JOIN
在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录
以左表为主,展示左表所有的数加相关的右表相关字段
条数=左表条数
RIGHT JOIN
在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录
INNER JOIN
在两张表进行连接查询时,只保留两张表中完全匹配的结果集
取两表关联字段的交集
FULL JOIN
在两张表进行连接查询时,返回左表和右表中所有的匹配的、未匹配的行
并集
语法
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN Orders -- left join -- right join -- full join ON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
WHERE
运算符
between……and
in(‘’,‘’,‘’)
同一个条件筛选时避免多次=‘’ and =‘’
或者in里可以嵌套查询
is/is not null
and /or
like
GROUP BY
用于使用聚合函数时,对结果中字段分组
HAVING
对分组后数据进行筛选
eg:having count(1)>1
ORDER BY
对指定的列进行排序
子查询
SELECT * FROM 表名WHERE 条件1 AND ba.customerid IN (SELECT customerid FROM rdm.r_customerid )
组合查询
合并两个或多个select的结果
UNION
UNION 操作符选取不同的值
使用规则
用于合并两个或多个 SELECT 语句的结果集
每个列需有相同的列(数量),且顺序保持一致
数据类型可不完全相同,但需是数据库可以隐含转换的列
使用场景
对一个表查询多次但筛选条件不同
对多个表查询字段相同
UNION ALL
允许重复的值
常用函数
字符串函数
replace
替代
replace('123456abcde','234','777')='177756abcde '
length
返回字符串长度
截取字符串
substr/substring(string,num1,num2)
从num1位截取string共截取num2位
right(string,num)
从右截图字符串string,截取num位
left(string,num)
从左截图字符串string,截取num位
substring_index(str,delim,count)
按关键字delim从出现的第count次截取字符串
拼接函数
concat/||
concat(str1, str2,...)
将多个字符串连接成一个字符串
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null
concat_ws
concat_ws(separator, str1, str2, ...)
将多个字符串连接成一个字符串,但是可以一次性指定分隔符
第一个参数指定分隔符
分隔符不能为null,如果为null,则返回结果为null。
group_concat
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
将group by产生的同一个分组中的值连接起来,返回一个字符串结果
数字取整
ceiling()
向上取整
Floor()
下取整
日期函数
日期格式问题
to_char(v_today,'yyyymmdd')
yyyy-mm-dd 转化为yyyymmd
date(日期)
yyyymmdd转化为yyyy-mm-dd
DATE_FORMAT() 函数
用于以不同的格式显示日期/时间数据
日期加减
DATE_ADD()
该函数还可用于月份相加减
DATE_SUB()
DATE_SUB(OrderDate,INTERVAL 2 DAY)
减两天
返回当前时间
now()
具体到时分秒
curdate()
以YYYY-MM-DD的形式返回当前日期
curtime()
返回当前时间 hh:mm:tt
获取日期
last_day()
返回月末日期
last_day('2020-04-24') 2020-04-30
trunc(v_today,'MM')
本月初 '2019-09-01'
concat(substr(v_today,1,8),'01')
获取这个月的第一天
trunc(sysdate,'yy')
返回当年第一天
trunc(sysdate,'dd')
返回当前年月日
trunc(sysdate,'yyyy')
返回当年第一天
trunc(sysdate,'d')
返回当前星期的第一天
trunc(sysdate, 'hh')
当前时间
日期相差
DATEDIFF()
日期格式要求yyyy-mm-dd
返回两个日期之间的天数
MONTHS_BETWEEN()
返回两个日期之间的月份数
分析函数
rank() over
rank() over(partition by order by)
partition by用于给结果集分组
rank在每个分组内进行排名
,rank() over(partition by sex order by age )
在对性别分组后,对年龄排序
相同名次排序一样,但是下一位直接跳过,比如:1、2、2、4
row_number() over()
相同名次排序不出现相同值,比如:1、2、3、4
dense_rank() over()
相同名次排序一样,下一位延续排序,比如:1、2、2、3
与聚合函数一起使用
sum()over(order by )
对每一行和前面所有行进行求和运算
min()over(order by )
max()over(order by )
avg()over(order by )
sum()over(order by rows 2 preceding)
一行与前两行或者后两行进行运算
sum()over(order by rows between 2 preceding and 2 following)
以这一行为中心的5行,也就是之前2行,之后2行进行求和运算
注意的是following不能单独使用。
sum()over(order by rows between current and 2 following)
当前行和后两行就行求和运算
lag()和lead()
lag(string,offset,defval) over(partion by ..order by …)
Offset是偏移量,即是上1个或上N个的值
Defval默认值,当两个函数取上N/下N个值,当在表中从当前行位置向前数N行已经超出了表的范围时,lag()函数将defval这个参数值作为函数的返回值,若没有指定默认值,则返回NULL
lead(string,offset,defval) over(partion by ..order by …)
下1个或下N个
操作
execute immediate 立即执行