《SQL必知必会》知识点整理-1
由于缺乏对SQL的系统学习,总是感觉对SQL的用法和理解不够全面,再加之也是刚刚入门数据分析的行当,现在涉及到的许多工作内容都是数据提取,所以感觉很有必要系统的学习一下SQL。那么问题就来了,入门级SQL书籍哪家强? ----《SQL必知必会》还真是业界良心
(半夜赶工就为发布第一篇博客,虽然粗糙拙劣,但希望这仅仅只是一个开始,以后这里将记录我一步一步的进步和成长)O(∩_∩)O~~
SQL最主要的用法还在于数据的检索,这里主要总结一下与SELECT有关的几个子句的用法和一些该注意的知识点,供小白入门和战五专用。
首先将一些子句的顺序给出(自上而下即为先后顺序):
SELECT column_name A,column_name B
FROM table_name
WHERE ...
GROUP BY column_name A,column_name B
HAVING...
ORDER BY column_name A,column_name B
1、SELECT:
- 可用于一个或者多个列的检索
- ‘*’的使用会降低性能
2、ORDER BY子句:
- 子句位置必须最后
- 通过非选择字段也可以validate
- 按多字段排序
- 按列的位置排序(select a,b,c...order by 2,3 即为按第二和第三列排序)
- 排序方向,DESC(Z->A,降序),ASC(A->Z,增序),仅作用于前面的字段
3、WHERE子句(搜索条件/过滤条件):
- 位于FROM子句之后
- 操作符:=、<>、>、<、between...and...、is null、is not null
二、高级数据过滤
WHERE子句中多过滤条件组合查询的使用
1、操作符and 和or的使用,WHERE a OR b AND c =WHERE a OR (b AND c),and的优先级高于or
2、in
3、not: WHERE NOT
4、通配符:
LIKE, %(零个、一个或者多个), _(一个),[],(LIKE '[JM]%' 表示以J或者M开头的字符串;LIKE '[^JM]%' 不以J或者M开头的字符串)
5、
尽量少用通配符,尽量不用再搜索开头的地方
三、计算字段
1、拼接字段,+、||
SELECT column_name A +'('+column_name B+')'
SELECT column_name A ||'('||column_name B||')'
2、使用别名
SELECT column_name A +'('+column_name B+')' as title
3、算术计算
SELECT column_name A,column_name B,column_name A *column_name B as title
四、函数
1、文本处理函数,UPPER()转化大写
2、日期处理函数:
ORACLE,
SELECT order_num
FROM orders
WHERE to_number(to_char(order_date,'yy'))=2014 --判断年份为2014的条件
3、数值处理函数
五、汇总数据
1、聚集函数:
AVG():只用于单个列,列名为函数参数、
SUM()
COUNT():COUNT(*)与COUNT(column_name)的区别,前者包含NULL行,后者不包含
MAX()
MIN()
2、DISTINCT
3、组合使用聚集函数,如:
SELECT COUNT(order_id) as num_item,
AVG(price) as price_avg,
SUM(price) as price_sum,
MAX(price) as price_max,
MIN(price) as price_min
FROM order
WHERE order_id='apple'
六、分组数据
(GROUP BY 和HAVING子句)
1、针对多个供应商分组
GROUP BY:
a、GROUP BY子句中每个列都必须为检索列,即,在SELECT子句中给出
b、GROUP BY子句在WHERE子句之后,ORDER BY子句之前
2、过滤分组
如何检索出至少有两个订单的所有顾客?
WHERE与HAVING的区别:前者过滤行,后者过滤组,针对于WHERE的操作符均适用于HAVING
七、使用子查询
where/in/填充计算列
问题:列出订购物品RAGNO1的所有客户,如何检索?
SELECT cust_name
FROM Customers
WHERE cust_id=(SELECT cust_id
FROM Orders
WHERE order_num=(SELECT order_num
FROM OrderItems
WHERE order_item='RAGN01'
)
)
八、INSERT/UPDATE/DELETE子句的格式
- 插入数据,表中的列顺序必须与values内的赋值顺序一致
INSERT INTO TABLE_NAME(...)
VALUES(...)
- 选择插入
INSERT INTO TABLE_NAME(...)
SELECT ...
FROM...
WHERE...
- 表的复制
SELECT *
INTO TABLE_NAME
FROM...
- 更新
UPDATE TABLE_NAME
SET ...,...,...
WHERE
- 删除
DELETE FROM TABLE_NAME
WHERE...
总的来说,搬砖嘛,最重要的还是实践、多码代码。

浙公网安备 33010602011771号