SQL必知必会(上)

*以下内容来自本人对于《SQL必知必会(第四版)》的笔记与总结*

第一课 了解SQL

数据库是一个以某种有组织的的文件存储的数据集合。

数据库软件应称为数据库管理系统(DBMS)。数据库是通过DBMS创建和操纵的容器。

表是某种特定类型数据的结构化清单,使表名成为唯一的,实际上是数据库名和表名等的组合。

描述表的特性的信息就是所谓的模式(Schema)。

表中的列储存着某种特定的信息,行是表中的一个记录。

主键(primary key)是一列,其值能唯一标识表中每一行。

SQL是一种专门用来与数据库沟通的语言。

 

第二课 检索数据

关键字,为保留字,例如SELECT,不能作为表或列的名字。

检索单个列:

SELECT prod_name

FROM Products;

如果没有明确排序查询结果,则返回的数据没有特定的顺序;只要返回相同数目的行,就是正常的。

多条SQL语句必须用分号(;)分隔

SQL不区分大小写。

检索多个列:

SELECT prod_id, prod_name, prod_price

FROM Products;

用逗号分隔。

检索所有列:

SELECT *

FROM Products

检索不同值:

SELECT DISTINCT vend_id

FROM Products;

检索前几行:

SELECT TOP 5 prod_name 

FROM Products;

或者

SELECT prod_name 

FROM Products

WHERE ROWNUM <= 5;(LIMIT 5;)

也可以规定起始位置: LIMIT 5 OFFSET 5 意思是从第六行开始。

注释:--,或者#是单行注释;

/* */可以用来写多行注释

 

第三课 检索排序数据

子句(clause):SELECT语句后的FROM也是子句,有些子句不是必须的。

加上ORDER BY子句,可以对数据排序。ORDER BY子句应为最后的子句。

如果按照多个列排序,仅在第一个排序值有相同值时,才在相同值按照第二个排序值排序,否则,仅仅用第一个值排序。

默认是升序,降序需要加DESC。

 

第四课 过滤数据

使用WHERE子句。

不等于可以是<>,也可以是!=;

过滤字符串时要加引号‘’;

范围过滤用BETWEEN 5 AND 10;

空值过滤用IS NULL。

 

第五课 高级数据过滤

可在WHERE后加上AND ,OR进行多个条件的组合过滤;

SQL在同时出现OR和AND时,优先处理AND;

可以使用圆括号人为定义运算的优先级顺序。

IN过滤符举例:WHERE vend_id IN (“DLL01”,“BRS01”)

NOT过滤符举例:WHERE NOT vend_id = "DLL01"

 

第六课 用通配符进行过滤

LIKE通配符:WHERE prod_name LIKE "Fish%";

通配符可以用%,表示0个,1个或多个任意字符;也可以用_,表示一个任意字符。

使用通配符过滤时,区分大小写

[]可以匹配字符集;

例如WHERE cust_name LIKE "[JM]%",意思是,以J和M开头的都可以;

^(脱字号)表示反向;[^JM]%表示的是除了J和M开头的;

 

第七课 创建计算字段

字段(field)的意思与列相同。

计算字段意思是直接从数据库中检索出转换、计算或格式化过的数据,而不是先检索出数据再在客户端进行计算。

拼接字段:

SELECT vend_name + "(" + ven_country + ")"

或者SELECT Concat(vend_name,"(",vend_country,")") 

FROM Vendors

ORDER BY Vend_name;

用SELECT RTRIM(vend_name) + "(" + RTRIM(ven_country) + ")"可以去掉字符串右侧的空格;

同样的,LTRIM可以去掉左侧的空格

用AS关键词可以赋予列别名(alias)

别名前可以直接用运算符执行算术计算。

 

第八课 使用函数处理数据

UPPER 将文本转化成大写

LOWER 将文本转化成小写

LENGTH 返回长度

DATEPART(yy,order_date):日期处理函数在各个DBMS很不一样

 

第九课 汇总数据

AVG()平均值

COUNT()行数

MAX()最大值

MIN()最小值

SUM()某列求和

可以用DISTINCT参数,例如AVG(DISTINCT prod_price)实现特殊聚集

 

第十课 分组数据

GROUP BY可以将数据分为多个逻辑组,并对每个组进行聚集计算

举例:

SELECT vend_id, COUNT(*) AS num_prods

FROM Products

GROUP BY vend_id

分组中过滤数据用HAVING;

HAVING 过滤的是分组,而WHERE 过滤的是行

 

第十一课 使用子查询

在WHERE条件中写新的SELECT即为子查询。子查询要用小括号整个括起来。

对于子查询的个数没有限制,不过实际中为了使用方便一般都不能嵌套太多的子查询。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值