《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...
 
 

 总的来说,搬砖嘛,最重要的还是实践、多码代码。

posted @ 2014-12-29 00:48  战五  阅读(1335)  评论(0)    收藏  举报