自学SQL
Posted 喵喵喵爱吃鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自学SQL相关的知识,希望对你有一定的参考价值。
SQL简介
Hi,我们今天要讲的这套SQL课程更适合初学者自学,内容由浅入深。如果你恰好是程序小白、运营、产品,在工作中需要用到SQL,这套课程简直是为你量身定做。
前期你将学会如何通过SQL命令查询所需的数据,并应用到工作中。 之后将会深入学习所有有关 SQL 的知识 ,每个小节最后都会有练习题。边学边练,可以帮你及时巩固学习到的知识。
如果您已经对SQL有所了解,也可以使用本课程巩固知识点和查阅SQL语法。从现在开始,我将带领你学习 SQL,带你进入数据库的世界!
本教程中的练习题,请移步 1024乐学编程-SQL基础课程 进行练习。
您也可以在该网站免费学习到更多课程。
SQL 是什么?
SQL 全称为Structured Query Language(结构化查询语言)。
要讲SQL就绕不开database(数据库), 平时所说的数据库,一般就是指的 Relational database(关系型数据库)。大家知道数据库是用来存储大量数据的一种软件,SQL是用来操作数据里的数据,具体来说SQL可以做数据查询,数据更新,写入数据等等。
其实大到银行账户的管理,小到手机的电话簿,可以说社会的所有系统中都有数据库的身影。
SQL和数据库是天生的一对,目前世界上大部分网站和APP背后的数据都是建立在SQL数据库基础之上。
数据库种类
SQLite,mysql, Postgres, Oracle 和 Microsoft SQL Server,这几个数据库(可以理解为软件)是目前比较流行的一些数据库。所有这些数据库都支持标准的 SQL,换句话说,你学会了SQL就可以对这些数据库做数据操作了! 当然上面的每一种数据库都有自己的特性和适用范围。比如手机上一般使用轻量级的数据库,而银行会使用数据安全有保障,性能更强大的数据库。
关系型数据库
在学习SQL语法之前有必要解释一下什么是关系型数据库(Relational databases)。数据库由若干张表(Table)组成,Table是由行(rows)和列(columns) 组成。一个Table存储一个类别的数据,每一行是一条数据,每一列是这种数据的一个属性。
上面是一张商品表,表的列(垂直方向)也称为字段,它代表了保存在表中的数据项目。在商品表中,从商品编号到登记日期一共有 6 列。
与之相对,表的行(水平方向)称为记录,它相当于一条数据。商品表中总共有 8 行数据。 关系数据库必须以行为单位进行数据读写 ,请牢记。
列的查询
下面我们学习如何从数据库表中获取数据。
从表中选取数据时需要使用 SELECT 语句。通过 SELECT 语句查询并选取出必要数据的过程称为匹配查询或查询(query)。
SELECT 语句是 SQL 语句中使用最多的最基本的 SQL 语句。掌握了SELECT 语句,距离掌握 SQL 语句就不远了。
SELECT 语句的基本语法如下所示:
SELECT <列名> FROM <表名> ;
该 SELECT 语句包含了 SELECT 和 FROM 两个子句(clause) 。子句是 SQL 语句的组成要素,是以 SELECT 或者 FROM 等作为起始的短语。
SELECT 子句中列举了希望从表中查询出的列的名称,而 FROM 子句则指定了选取出数据的表的名称。
查询出 Product 表中的列
接下来,我们尝试从Product (商品)表中,查询所示的 product_id (商品编号)列、 product_name (商品名称)列和 purchase_price (进货单价)列。
从 Product 表中输出3列的SQL语句如下:
SELECT product_id, product_name, purchase_price FROM Product;
执行结果:
product_id | product_name | purchase_price |
---|---|---|
001 | T恤衫 | 500 |
002 | 打孔器 | 320 |
003 | 运动T恤 | 2800 |
004 | 菜刀 | 2800 |
005 | 高压锅 | 5000 |
006 | 叉子 | |
007 | 擦菜板 | 790 |
008 | 圆珠笔 |
SELECT 语句第一行的 SELECT product _ id, product _ name,purchase _ price 就是 SELECT 子句。查询出的列的顺序可以任意指定。查询多列时,需要使用逗号进行分隔。 查询结果中列的顺序和SELECT 子句中的顺序相同
Select 查询所有列
如果我们想取出所有列的数据, 当然可以把所有列名写上,不过更简单的方式用星号 (*) 来代表所有列。
SELECT * FROM table_name;
输出 Product 表中全部的列:
SELECT * FROM Product;
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
SELECT * FROM table. 这条语句经常用来在不清楚table(表)中有什么数据时,能取出所有的数看一眼。
好,接下来我们做一道练习题,请移步到该网站的 《SELECT 查询》课程,习题在最后面 。
http://www.eluzhu.com:1818/my/course/64
SQL SELECT DISTINCT
还记得上次我们用的表中,有一些重复的值么。有时候我们希望仅仅列出不同的值。那需要怎么做呢?
这时候就会用到关键词 DISTINCT ,用于返回唯一不同的值。
语法:
SELECT DISTINCT 列名称 FROM 表名称;
从结果中删除重复行
如果我们想获取 Product 表中保存的商品种类的同时,删除重复的数据。就可以用通过在 SELECT 子句中使用 DISTINCT 来实现
使用 DISTINCT 删除 product_type 列中重复的数据
SELECT DISTINCT product_type FROM Product;
执行结果:
product_type |
---|
厨房用具 |
衣服 |
办公用品 |
另外在使用 DISTINCT 时, NULL 也被视为一类数据。 NULL 存在于多行中时 , 也会被合并为一条 NULL 数据。对含有 NULL 数据的 purchase _price (进货单价)列使用 DISTINCT 的 SELECT 语句,除了两条 2800 的数据外,两条 NULL 的数据也被合并为一条。
SQL WHERE 子句
我们已经学会了从数据表里取出某几个列的SQL语句,思考一下:如果数据表里有100万行数据。如果数据量这么大,之前的SQL语句很可能运行时会崩溃。
真实情况下,我们很少直接查出所有数据,即使查询出来也看不完。为了更精确的查询出特定数据,我们需要学习一个新的SQL语法,SELECT 语句通过 WHERE 子句来指定查询数据的条件。具体就是通过限定条件,查看行的数据是否满足。比如:获取时长大于2小时的电影。
你可以把 WHERE想象成一个筛子,每一个特定的筛子都可以筛下某些豆子。
在 SELECT 语句中使用 WHERE 子句的语法如下所示:
SELECT < 列名 >, ……
FROM < 表名 >
WHERE < 条件表达式 >;
运算符
下面的运算符可在 WHERE 子句中使用,下面我会选择几个举例给你演示一下,其中在某些版本的 SQL 中,操作符 <> 可以写为 !=。
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
选取商品种类为衣服的记录
从被选取的记录中还可以查询出想要的列。为了更加容易理解,我们在查询 product _ type 列的同时,把 product _ name 列也读取出来。
用来选取 product_type 列为 ' 衣服 ' 的记录的 SELECT 语句:
SELECT product_name, product_type
FROM Product
WHERE product_type = ' 衣服 ';
执行结果:
product_name | product_type |
---|---|
T恤衫 | 衣服 |
运动T恤 | 衣服 |
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SQL BETWEEN 语法:
SELECT column_name
FROM table_name
WHERE column_name
BETWEEN value1 AND value2;
用来选取销售单价介于 2000 到 5000 之间的商品名称:
SELECT product_name, sale_price
FROM Product
WHERE sale_price BETWEEN 2000 AND 5000;
执行结果:
product_name | sale_price |
---|---|
运动T恤 | 3000 |
菜刀 | 4000 |
LIKE 操作符
然后再说说LIKE,截至目前,我们使用字符串作为查询条件的例子中使用的都是 =。这里的 = 只有在字符串完全一致时才为真。与之相反,LIKE 谓词更加模糊一些,当需要进行字符串的部分一致查询时需要使用该谓词。
语法:
SELECT column_name
FROM table_name
WHERE column_name LIKE pattern;
例如我们要选取商品名称中包含 ‘T恤’ 的所有商品的名称
SELECT product_name FROM Product
WHERE product_name LIKE '%T恤%';
执行结果:
product_name |
---|
T恤衫 |
运动T恤 |
引号的使用
请注意,我们在例子中的条件值周围使用的是单引号。SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
文本值:
这是正确的:
SELECT * FROM movies WHERE title = '双子杀手'
这是错误的:
SELECT * FROM movies WHERE title = 双子杀手
数值:
这是正确的:
SELECT * FROM movies WHERE year > 2000
这是错误的:
SELECT * FROM movies WHERE year > '2000';
好,接下来我们做一道练习题,请移步到该网站的 《WHERE 条件查询》课程中,习题在内容最后。
好,我们这次先讲到这里,请进入作者主页继续学习后续的SQL课程。或进入上面的地址免费学习完整的SQL课程。
以上是关于自学SQL的主要内容,如果未能解决你的问题,请参考以下文章