自学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_idproduct_namepurchase_price
001T恤衫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_nameproduct_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_namesale_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 条件查询》课程中,习题在内容最后。

1024乐学编程-SQL基础课程

 

好,我们这次先讲到这里,请进入作者主页继续学习后续的SQL课程。或进入上面的地址免费学习完整的SQL课程。

以上是关于自学SQL的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server 代码片段收集

缺少 SQL SERVER 2014 代码片段

sql Oracle代码片段

sql 日期转换代码片段 - Dato,120,konvertere

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

Discuz代码片段