重温了SQL基础知识点,并作出部分总结。
SQL的分类
DCL
data control language数据库控制语言,主要用于控制数据库访问权限
grant 授权
deny 收回授权
revoke取消grant或deny操作
……
DDL
Data Definition Language数据定义语言,主要对表进行操作
CREATE建表
ALTER改表
DROP删表
……
DML
Data Manipulation Language数据操纵语言,主要对数据进行操作
SELECT查询
UPDATE更新
INSERT插入
DELETE删除
……
eg:
SELECT
col1,
col2+col3 as col_plus,
concat(col4,col5)
FROM table_name
ORDER BY col7
LIMIT 10
(
-1.检索&排序
用,连接要查询的列
列可以是表达式或函数
用as为列取别名
用*表示查询全体列
用limit限制前x行
order by 子句
用,连接要排序的列
不必是select中的列
WHERE限制行
(
-2.过滤
单值:=,!=
范围:<,<=,>,>=,between … and … , in
空值:is null ,is not null
通配符: like ‘%x%’,like ‘_x’ # %:任意内容 # _:一个任意不为空的值
逻辑连接符:and 且,or 或
否定符:not
-3.分组&去重
SELECT列只可是GROUP BY指定的分组列或聚合函数
可以用HAVING子句筛选聚合计算结果
count(1)指只计算不为空的数据
使用DISTINCT去重
分组本身也有去重的效果
-4.合并
JOIN横向合并
通过外键获取更多的列数据
JOIN… on …(on指定双方的匹配列
LEFT,RIGHT,FULL JOIN
eg:
SELECT t1.col1, t2.col2
FROM t1
JOIN t2 ON t1.bid = t2.id
UNION纵向合并
合并多个查询结果
需保证两个SELECT语句查询结果的字段数量,类型一致
不加ALL,会多一步去重,降低查询速度
eg:
SELECT col1, col2
FROM t1
UNION [ALL]
SELECT col1, col2
FROM t2
eg:
SELECT player, teamid, stadium, mdate
FROM game
JOIN goal ON (game.id=goal.matchid)
JOIN eteam ON (goal.teamid=eteam.id)
WHERE teamname = ‘Germany’
-5.子查询
在任何需要表的地方都可以用SELECT语句代替
FROM:代替表
JOIN:代替表
WHERE IN:代替in中的集合
-6.窗口函数
在一个范围内进行计算,不改变数据粒度
排名(DESC:由大到小)
环比/同比(LAG function is used to show the preceding row or the table(
eg: LAG(前一列的列名,1)
)
)
累计数量
eg:
SELECT
rank() over(partition by col1 order by col2) as posc
FROM table
)
)
推荐书籍:《SQL必知必会》