不积小流无以成江海,不积跬步无以至千里。罗马不是一天建成的,但是也要每天一砖一瓦的往上盖。今天正式开启《SQL必知必会》系列,这本书之前粗略的看过一遍,但只是浮光掠影般的扫了一遍,看完后,以前知道的还是知道,以前不知道的还是不知道,收效甚微。
这次重读,希望可以做到:以前熟悉的看完后可以熟练使用,以前会的看完后可以更深的理解,以前不会的看完后可以有基本的认识。“我注六经”不如“六经注我”,通过输出来检验输入,一直是行之有效的学习方法。所以,准备好了吗?让我们一起进入SQL的奇妙世界。
这本书共分为22章,每个章节针对SQL的一个方面进行详解介绍,今天分享读完前五章的读书笔记。
第一章:了解SQL
在这一章,主要介绍了SQL的基本概念和它的基本组成元素。首先什么是SQL? 它是一种结构化查询语言(Structured Query Language),一种专门用来与数据库沟通的语言。设计SQL的目的是很好地完成一项任务————提供一种从数据库中读写数据的简单有效的方法。
既然SQL是和数据库沟通的语言,那就需要先了解数据库的基本概念。书中为数据库(database)提供了一个简洁有力的定义:保存有组织的数据的容器(通常是一个文件或一组文件)。而人们通常用数据库这个术语来代表他们使用的数据库软件,这其实是不正确的,确切的说,数据库软件应称为数据库管理系统(即DBMS)。数据库是通过DBMS创建和操纵的容器,而具体它究竟是什么,形式如何,各种数据库都不一样。
首先关于数据库中的基本概念:表,表名,列,列名,数据类型,以及行,主键。关于主键(primary key),它是一列,其值能够唯一标识表中每一行。如果没有主键,更新或者删除表中特定行就特别困难。主键的其它知识是:最好总是为每张表都定义一个主键,其实表中的任何列都可以作为主键,不一定非得是id,只要它满足以下条件:
任意两行都不具有相同的主键值
每一行都必须具有一个主键值(主键列不允许有null值)
主键列中的值不允许修改或者更新
主键值不能重用(如果某行从表中删除,它的主键不能附给以后的新行)
第二章:检索数据
这一章主要讲的就是SELECT语句,SELECT是一个关键字,可以用来检索单个列,多个列,所有列;检索不同的值,使用DISTINCT关键字,达到去重作用;另外还可以限制结果,不同数据库有不同的关键字,如果使用Oracle, 使用ROWNUM; 如果使用MySQL, MariaDB, PostgreSQL, 或SQLite,使用Limit,而且还可以指定从哪个位置开始检索,使用OFFSET关键字。
举例说明:
SELECT prod_name FROM Products;
SELECT prod_id,prod_name FROM Products;
SELECT * FROM Products;
SELECT DISTINCT vend_id FROM Products; //去重
SELECT prod_name FROM Products WHERE ROWNUM <=5; //取前5行结果
SELECT prod_name FROM Products LIMIT 5; //取前5行结果
SELECT prod_name FROM Products LIMIT 5 OFFSET 5; //取从第5行的地方开始的前5行结果
第三章:排序检索数据
这一章主要讲解 ORDER BY关键字,对搜索结果进行排序。需要注意的是,这个关键字要保证放在SELECT语句中的最后一条子句,否则会出错;另外,还可以按照多个列排序,直接在列名中间加逗号分隔;还可以指定排序方向,使用关键字 ASC升序, DESC降序。
上代码:
SELECT prod_name FROM Products ORDER BY prod_name;
SELECT prod_id,prod_name FROM Products ORDER BY prod_name,prod_id;
SELECT prod_price FROM Products ORDER BY prod_price DESC;
第四章:过滤数据
这一章的关键字是WHERE, 通过where子句,就可以通过过滤条件检索出想要的数据。需要注意的一点是:同时使用ORDER BY 和 WHERE时,前者要放到where 后面。最关键和常用的就是WHERE 子句的操作符:
= 等于
<> 不等于
!= 不等于
< 小于
大于
= 大于等于
!> 不大于
BETWEEN 在两个值之间
IS NULL 为null值
上代码:
SELECT prod_price,prod_name FROM Products where prod_price = 3.49;
SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id=‘DLL01’ AND prod_price <=4;
第五章: 高级数据过滤
这章讲的是,在WHERE子句中,还有AND和OR操作符,两者表示含义正好相反,AND表示并且,两者都要满足,OR是只要满足任意一个条件就行。但是如果两个关键字同时出现,那么AND 的优先级更高,所以如果想让OR先执行,那就对其条件加上();还有一个操作符是IN( ),括号内可添加想要查询的范围值,用逗号隔开。NOT操作符,表示否定跟在其后面的条件。
上代码:
SELECT prod_price,prod_name FROM Products where prod_price in(‘2.36’,‘3.22’);
SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id<>‘DLL01’ ;
以上。
获取更多干货请关注公众号: