《SQL必知必会》读书笔记1

SQL必知必会

第四版 Ben Forta

2.3 检索多个列

SELECT column1, column2, column3... FROM table1;
-- 注意多个列之间以逗号分隔

2.4 检索所有列

SELECT * FROM table;

2.5 检索不同的值

使用DISTINCT关键词

SELECT DISTINCT column1 FROM table1;

2.6 限制结果

  • 返回不超过n行数据
SELECT column1 FROM table1 LIMIT number;
  • 返回从第n1行起的n2行数据
SELECT column1 FROM table1 LIMIT number1 OFFSET number2;
-- 第一个数字是检索的行数,第二个数字是开始的位置

2.7 使用注释

注释可以用“–”(行内)、“#”(单行)、“/**/”(多行)

第3课 排序检索数据

3.1 排序数据

  • 子句(clause):SQL语句由子句构成,有些子句是必需的,有些则是可选的,一个子句通常由一个关键字加上所提供的数据组成。例如SELECT语句的FROM子句
  • 排序数据可以使用ORDER BY子句
SELECT column1 FROM table1 ORDER BY column1;
-- 注意:应该保证 ORDER BY 子句是最后一条子句,否则会报错
-- ORDER BY 子句使用的列是作为显示而选择的列,可以使用非检索列

3.2 按多个列排序

SELECT column1, column2, column3... FROM table1
ORDER BY column4, column5...;
-- 只有当column4的值相同时,才会按照column5排序
SELECT column1, column2, column3... FROM table1
ORDER BY 2, 3...;
-- 也可以按照列的相对位置进行排序,其中2代表column2,3代表column3,也可以名称和位置混用

3.4 指定排序方向

使用**DESC(DESCENDING)**关键字

SELECT column1, column2, column3... FROM table1ORDER BY column4 DESC, column5...;-- DESC只应用到位于其前面的列名,如果相对多个列进行降序排列,必须对每一列指定DESC关键字

第4课 过滤数据

4.1 使用WHERE子句

只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)

SELECT column1, column2, column3... FROM table1 WHERE column1 = x;

4.2 WHERE 子句操作符

-- <> / != 不等于-- BETWEEN 在指定的两个值之间-- IS NULL 为NULL值
4.2.2 不匹配检查
SELECT column1, column2, column3... FROM table1 WHERE column1 != 'string1';-- 如果比较的值为字符串类型,需要加''
4.2.3 范围值检查
SELECT column1, column2, column3... FROM table1 WHERE column1 BETWEEN number1 AND number2;-- BETWEEN匹配范围中所有的值,包括开始值和结束值
4.2.4 空值检查

NULL:无值(no value),它与字段包含0、空字符串或仅仅包含空格不同

SELECT column1 FROM table1 WHERE column1 IS NULL;

第5课 高级数据过滤

5.1 组合WHERE子句

操作符(operator):用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator)

5.1.1 AND 操作符
  • AND:用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行
SELECT column1, column2, column3... FROM table1 WHERE column1 = 'string1' AND column2 <= x;
5.1.2 OR 操作符
  • OR:用在WHERE子句中的关键字,用来指示检索匹配任一给定条件的行
SELECT column1, column2, column3... FROM table1 WHERE column1 = 'string1' OR column2 <= x;
5.1.3 求值顺序
SELECT column1, column2, column3... FROM table1 WHERE column1 = 'string1' OR column2 = x AND column3 <= y;-- 在上述语句中,SQL会优先执行‘column2=x AND column<=y’这个子句,因为SQL中,AND的优先级高于OR,如果想要优先过滤OR,可以使用圆括号,圆括号具有比AND和OR更高的求值顺序,如下:SELECT column1, column2, column3... FROM table1 WHERE (column1 = 'string1' OR column2 = x) AND column3 <= y;

5.2 IN 操作符

IN:用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值,与OR作用相当。推荐使用IN(更直观、更清楚;求值顺序容易管理;执行更快;能够更动态建立)

SELECT column1, column2, column3... FROM table1 WHERE column1 IN ('string1', 'string2');

5.3 NOT 操作符

NOT:WHERE子句中用来否定其后条件的关键字

SELECT column1 FROM table1 WHERE NOT column1 = 'string1';

第6课 用通配符进行过滤

6.1 LIKE 操作符

通配符(wildcard):用来匹配值的一部分的特殊字符

搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件

6.1.1 百分号(%)通配符

最常使用的通配符是百分号(%),%表示任何字符出现任意次数

SELECT column1, column2 FROM table1 WHERE column1 LIKE 'string%'
6.1.2 下划线(_)通配符

下划线(_)代表单个字符

SELECT column1, column2 FROM table1 WHERE column1 LIKE '_string'

第7课 创建计算字段

7.1 计算字段

字段(field):基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常与计算字段一起使用

7.2 拼接字段

拼接(concatenate):将值联结到一起(将一个值附加到另一个值)构成单个值

Access和SQL Server 使用**+号;DB2、Oracle、PostgreSQL、SQLite和Open Office Base使用||**,MySQL和MariaDB需要使用语句

SELECT Concat(vend_name, '(', vend_country, ')') FROM Vendors ORDER BY vend_name;-- 有的数据库可能会再两列中自动填充空格,这时可以用 RTRIM() 去掉右空格,LTRIM() 去掉左空格,TRIM() 去掉两侧空格
  • 使用别名:别名(alias)也称为导出列(derived column),是一个字段或值的替换名,使用AS关键字。如果别名需要使用字符串,则需要使用单引号括起来(一般不推荐使用字符串)
SELECT Concat(vend_name, '(', vend_country, ')') AS vend_title FROM vendors ORDER BY vend_name;

7.3 执行算数计算

可以使用 + - * / 进行算数计算

SELECT prod_id, quantity, item_price, quantity*item_price FROM orderitems WHERE order_num = 20008;

第8课 使用函数处理数据

8.1 函数

可移植(portable):所编写的代码可以再多个系统上运行

不同DBMS的函数用法很不一样,在使用时需要查阅文档

8.2 使用函数

8.2.1 文本处理函数
  • 常用文本处理函数
函数					说明-------------------------------------------LEFT()			返回字符串左边的字符LENGTH()		返回字符串的长度LOWER()			将字符串转换为小写LTRIM()			去掉字符串左边的空格RIGHT()			去掉字符串右边的字符RTRIM()			去掉字符串右边的空格SOUNDEX()		转换为字母的语言UPPER()			将字符串转换为大写
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
8.2.2 日期和时间处理函数
  • 举例:检索2012年的所有订单
-- MySQLSELECT order_num FROM orders WHERE YEAR(order_date) = 2012;-- PostgreSQLSELECT order_num FROM orders WHERE DATE_PART('year', order_date) = 2012;
8.2.3 数值处理函数
  • 常用数值处理函数
函数					说明
ABS()			返回一个数的绝对值COS()			返回一个弧度的余弦EXP()			返回一个数的指数值PI()			返回圆周率SIN()			返回一个弧度的正弦SQRT()			返回一个数的平方根TAN()			返回一个弧度的正切
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值