SQL学习笔记(二)

1、SQL 语句及其种类:

(1)DDL(Data Definition Language,数据定义语言)

用来创建或者删除存储数据用的数据库以及数据库中的表等对象

CREATE: 创建数据库和表等对象

DROP: 删除数据库和表等对象

ALTER: 修改数据库和表等对象的结构

(2)DML(Data Manipulation Language,数据操纵语言)

用来查询或者变更表中的记录。(实际使用的SQL 语句当中有90% 属于DML)

SELECT:查询表中的数据

INSERT:向表中插入新数据

UPDATE:更新表中的数据

DELETE:删除表中的数据

(3)DCL(Data Control Language,数据控制语言)

用来确认或者取消对数据库中的数据进行的变更。还可以对RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。

COMMIT: 确认对数据库中的数据进行的变更

ROLLBACK: 取消对数据库中的数据进行的变更

GRANT: 赋予用户操作权限

REVOKE: 取消用户的操作权限

2、运算符类型

(1)算术运算符:加减乘除 +、-、*、/ (注意:所有包含NULL 的计算,结果肯定是NULL)

(2)比较运算符:=、<>、>、>=、<、<= (注意:字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆;不能对NULL使用比较运算符,可以在条件表达式中使用IS NULL、IS NOT NULL)。BETWEEN匹配的区间,包括开始值和结束值。

(3)逻辑运算符:NOT、AND、OR。(WHERE子句中可以包含很多个AND、OR连接的条件,但AND的执行顺序优先于OR,有时候为了防止歧义,需要用圆括号()括起来分组。因为圆括号比AND、OR有更高的优先级。)

3、聚合函数

COUNT、SUM、AVG、MAX、MIN

COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。

4、分组 GROUP BY

GROUP BY可以后接几个列名,在建立分组时,指定的所有列都一起计算。

GROUP BY中的每一列都必须是检索列或有效表达式(但不能是聚集函数)。如果在SELECT语句中使用了表达式,GROUP BY中需要使用相同的表达式,不能用别名

常见错误:在SELECT子句中书写了聚合键以外的列;在GROUP BY子句中写了列的别名;在WHERE子句中使用聚合函数(只有SELECT子句、HAVING子句、ORDER BY子句中能够使用聚合函数。)错误示例:

SELECT product_name, purchase_price, COUNT(*)  -- product name是多余的列,报错

FROM Product

GROUP BY purchase_price;

SELECT product_type, COUNT(*)

FROM Product

WHERE COUNT(*) = 2 --where 子句中不应该使用聚合函数,会报错

GROUP BY product_type;

5、过滤 HAVING

HAVING子句的构成要素:常数、聚合函数、GROUP BY子句中指定的列名(即聚合键)

错误示例:

SELECT product_type, COUNT(*)

FROM Product

GROUP BY product_type

HAVING product_name = '圆珠笔';  --product_name 列并不包含在GROUP BY 子句之中,因此不允许写在HAVING 子句里,报错

6、排序 ORDER BY

OERDER BY 默认是升序,如果想要降序,需要在列的名字后面加上 DESC。如果想要每个列都降序,每个列后面都要加上DESC。ORDER BY A, B 表示先按A列排序 再按B列排序。如果A列每行都是不同的,则不会按B列排序。举例: ORDER BY prod_price desc,prod_name 先按商品价格降序排列,再按商品名称升序排列。

ORDER BY必须是SELECT语句的最后一条。在ORDER BY子句中可以使用SELECT子句中定义的别名,可以使用SELECT子句中未使用的列和聚合函数。

7、视图 CREATE VIEW

创建视图(定义视图时不能使用ORDER BY子句,因为视图是无序的)

CREATE VIEW 视图名称(<视图列名1>, <视图列名2>, ……)

AS

<SELECT语句>

删除视图:DROP VIEW 视图名称

8、子查询

子查询作为内层查询会首先执行。

子查询可以多层嵌套,但是性能也会越来越差,因此尽量避免使用多层嵌套的子查询。

WHERE 子句中不能使用聚合函数,可以替换为返回单一值的子查询(标量子查询),例如:

在细分的组内进行比较时,需要使用关联子查询

常见错误:将关联条件写在子查询之外的外层查询之中。错误原因:关联名称存在一个有效范围的限制,具体来讲,子查询内部设定的关联名称,只能在该子查询内部使用,就是“内部可以看到外部,而外部看不到内部”。

9、函数

算术函数:加减乘除、ROUND、ABS、

字符串函数:LENGTH、LOWER、UPPER、REPLACE、SUBSTRING

日期函数:CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、EXTRACT

转换函数:CAST——类型转换、COALESCE——将NULL转换为其他值

SELECT CAST('2009-12-14' AS DATE) AS date_col --将字符串类型转换为日期类型

10、谓词

LIKE、BETWEEN、IS NULL、 IS NOT NULL、IN、EXIST

CASE WHEN <求值表达式> THEN <表达式>

WHEN <求值表达式> THEN <表达式>

ELSE <表达式>

END

11、集合运算

区别:UNION是以行(纵向)为单位进行操作,在固定的列下增加多行记录,而联结则是以列(横向)为单位进行的。

(1)表的加减法

UNION 等集合运算符通常都会除去重复的记录,想要包含重复项需要加上ALL。UNION联结(并集)的列数必须相同、列的类型必须相同。

选取表中公共部分——INTERSECT(交集)

记录的减法——EXCEPT(差集)

(2)表的联结

a.内联结——INNER JOIN,作用是查询出两表交叉的内容。进行内联结时必须使用ON子句,并且要书写在FROM和WHERE之间。

b.外联结——LEFT OUTER JOIN、RIGHT OUTER JOIN,作用是以一个表为主表,返回另一个表中对应匹配的内容。使用LEFT 时FROM 子句中写在左侧的表是主表,使用RIGHT时右侧的表是主表。

c.三表联结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值