推广 热搜: 公司  快速  中国  上海  未来    企业  政策  教师  系统 

SQL入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

   日期:2024-11-04     作者:caijiyuan    caijiyuan   评论:0    移动:http://kaire.xrbh.cn/news/10010.html
核心提示:导读: SQL语言有40多年的历史,从它被应用至今几乎无处不在。我们消费的每一笔支付记录,收集的每一条用户信

导读 SQL语言有40多年的历史,从它被应用至今几乎无处不在。我们消费的每一笔支付记录,收集的每一条用户信息,发出去的每一条消息,都会使用数据库或与其相关的产品来存储,而操纵数据库的语言正是 SQL

SQL入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

SQL 对于现在的互联网公司生产研发等岗位几乎是一个必备技能,如果不会 SQL 的话,可能什么都做不了。你可以把 SQL 当做是一种工具,利用它可以帮助你完成你的工作,创造价值。

01 SQL 介绍

1. 什么是 SQL

SQL 是用于访问和处理数据库的标准的计算机语言。

  • SQL 指结构化查询语言

  • SQL 使我们有能力访问数据库

  • SQL 是一种 ANSI 的标准计算机语言

SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。

但是由于各种各样的数据库出现,导致很多不同版本的 SQL 语言。

为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERe 等等,这些就是我们要学习的SQL基础。

2. SQL 的类型

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

  • 数据查询语言(DQL: Data Query Language

  • 数据操纵语言(DML:Data Manipulation Language

3. 学习 SQL 的作用

SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。

  • SQL 面向数据库执行查询

  • SQL 可从数据库取回数据

  • SQL 可在数据库中插入新的记录

  • SQL 可更新数据库中的数据

  • SQL 可从数据库删除记录

  • SQL 可创建新数据库

  • SQL 可在数据库中创建新表

  • SQL 可在数据库中创建存储过程

  • SQL 可在数据库中创建视图

  • SQL 可以设置表、存储过程和视图的权限

4. 数据库是什么

顾名思义,你可以理解为数据库是用来存放数据的一个容器。

打个比方,每个人家里都会有冰箱,冰箱是用来干什么的?冰箱是用来存放食物的地方。

同样的,数据库是存放数据的地方。正是因为有了数据库后,我们可以直接查找数据。

例如你每天使用余额宝查看自己的账户收益,就是从数据库读取数据后给你的。

最常见的数据库类型是关系型数据库管理系统(RDBMS

RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如

  • MS SQL Server

  • IBM DB2

  • Oracle

  • MySQL

  • Microsoft Access

RDBMS 中的数据存储在被称为表(tables)的数据库对象中。 是相关的数据项的集合,它由列和行组成。

由于本文主要讲解 SQL 基础,因此对数据库不做过多解释,只需要大概了解即可。

咱们直接开始学习SQL

02 SQL 基础语言学习

在了解 SQL 基础语句使用之前,我们先讲一下 是什么

一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。

下面的例子是一个名为 “Persons” 的表

IdLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijing

上面的表包含三条记录(每一条对应一个人)和五个列(Id、姓、名、地址和城市)。

有表才能查询,那么如何创建这样一个表

1. CREATE TABLE – 创建表

CREATE TABLE 语句用于创建数据库中的表。

数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型

数据类型描述integer(size),int(size),smallint(size),tinyint(size)仅容纳整数、在括号内规定数字的最大位数decimal(size,d),numeric(size,d)容纳带有小数的数字、“size” 规定数字的最大位数、“d” 规定小数点右侧的最大位数char(size)容纳固定长度的字符串(可容纳字母、数字以及特殊字符)、在括号中规定字符串的长度varchar(size)容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)、在括号中规定字符串的最大长度date(yyyymmdd)容纳日期

本例演示如何创建名为 “Persons” 的表。

该表包含 5 个列,列名分别是:“Id_P”、“LastName”、“FirstName”、“Address” 以及 “City”

Id_P 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符。

空的 “Persons” 表类似这样

可使用 INSERT INTO 语句向空表写入数据。

2. INSERT – 插入数据

INSERT INTO 语句用于向表格中插入新的行。

本例演示 “Persons” 表插入记录的两种方式

1)插入新的行

2)在指定的列中插入数据

插入成功后,数据如下

这个数据插入之后,是通过 SELECT 语句进行查询出来的,别急马上讲

SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。

我们也可以指定所要查询数据的列

SQL 语句对大小写不敏感,SELECT 等效于 select。

SQL SELECT * 实例

星号(*)是选取所有列的快捷方式。

如需获取名为 “LastName” 和 “FirstName” 的列的内容(从名为 “Persons” 的数据库表,请使用类似这样的 SELECT 语句

如果一张表中有多行重复数据,如何去重显示呢?可以了解下 DISTINCT

如果要从 “LASTNAME” 列中选取所有的值,我们需要使用 SELECT 语句

可以发现,在结果集中,Wilson 被列出了多次。

如需从 “LASTNAME” 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句

通过上述查询,结果集中只显示了一列 Wilson,显然已经去除了重复列。

如果需要从表中选取指定的数据,可将 WHERe 子句添加到 SELECT 语句。

下面的运算符可在 WHERe 子句中使用

操作符描述=等于<>不等于>大于<小于>=大于等于<=小于等于BETWEEN在某个范围内LIKE搜索某种模式

在某些版本的 SQL 中,操作符 <> 可以写为 !=。

如果只希望选取居住在城市 “Beijing” 中的人,我们需要向 SELECT 语句添加 WHERe 子句

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

AND 和 OR 可在 WHERe 子语句中把两个或多个条件结合起来。

  • 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

  • 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

由于 Persons 表数据太少,因此增加几条记录

使用 AND 来显示所有姓为 “Carter” 并且名为 “Thomas” 的人

使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人

结合 AND 和 OR 运算符

我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):

ORDER BY 语句用于根据指定的列对结果集进行排序,默认按照升序对记录进行排序,如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

默认排序为 ASC 升序,DESC 代表降序。

以字母顺序显示 LASTNAME 名称

空值(NULL)默认排序在有值行之后。

以数字顺序显示ID_P,并以字母顺序显示 LASTNAME 名称

以数字降序显示ID_P

在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 null 时,情况也是这样的。

Update 语句用于修改表中的数据。

更新某一行中的一个列

目前 Persons 表有很多字段为 null 的数据,可以通过 UPDATE 为 LASTNAME 是 “Wilson” 的人添加FIRSTNAME

更新某一行中的若干列

DELETE 语句用于删除表中的行。

删除某行

删除 Persons 表中 LastName 为 “Fred Wilson” 的行

删除所有行

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的

如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢

可以使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除)。

从上图可以看出,第一次执行删除时,成功删除了表 persons,第二次执行删除时,报错找不到表 persons,说明表已经被删除了。

LIKE 操作符用于在 WHERe 子句中搜索列中的指定模式。

Persons 表插入数据

1)现在,我们希望从上面的 “Persons” 表中选取居住在以 “N” 开头的城市里的人

2)接下来,我们希望从 “Persons” 表中选取居住在以 “g” 结尾的城市里的人

3)接下来,我们希望从 “Persons” 表中选取居住在包含 “lon” 的城市里的人

4)通过使用 NOT 关键字,我们可以从 “Persons” 表中选取居住在不包含 “lon” 的城市里的人

“%” 可用于定义通配符(模式中缺少的字母)。

IN 操作符允许我们在 WHERe 子句中规定多个值。

现在,我们希望从 Persons 表中选取姓氏为 Adams 和 Carter 的人

操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

1)查询以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人

2)查询上述结果相反的结果,可以使用 NOT

不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。

某些数据库会列出介于 “Adams” 和 “Carter” 之间的人,但不包括 “Adams” 和 “Carter” ;某些数据库会列出介于 “Adams” 和 “Carter” 之间并包括 “Adams” 和 “Carter” 的人;而另一些数据库会列出介于 “Adams” 和 “Carter” 之间的人,包括 “Adams” ,但不包括 “Carter” 。

所以,请检查你的数据库是如何处理 BETWEEN…AND 操作符的

通过使用 SQL,可以为列名称和表名称指定别名(Alias,别名使查询程序更易阅读和书写。

表别名

列别名

使用表名称别名

使用列名别名

实际应用时,这个 AS 可以省略,但是列别名需要加上 " "

JOIN 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join

数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

如图,“Id_P” 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。

为了下面实验的继续,我们需要再创建一个表:Orders。

如图,“Id_O” 列是 Orders 表中的的主键,同时,“Orders” 表中的 “Id_P” 列用于引用 “Persons” 表中的人,而无需使用他们的确切姓名。

可以看到,“Id_P” 列把上面的两个表联系了起来。

不同的 SQL JOIN

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行

  • INNER JOIN: 内部连接,返回两表中匹配的行

  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句

UNIOn 操作符用于合并两个或多个 SELECT 语句的结果集。

UNIOn 语法

UNIOn 操作符默认为选取不同的值。如果查询结果需要显示重复的值,请使用 UNIOn ALL。

UNIOn ALL 语法

另外,UNIOn 结果集中的列名总是等于 UNIOn 中第一个 SELECT 语句中的列名。

为了实验所需,创建 Person_b 表

使用 UNIOn 命令

列出 persons 和 persons_b 中不同的人

UNIOn 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

NOT NULL 约束强制列不接受 NULL 值。

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

如上,创建一个表,设置列值不能为空。

如果插入 NULL,则会报错 ORA-01400 提示无法插入

拓展小知识

NOT NULL 也可以用于查询条件

同理NULL 也可

感兴趣的朋友,可以自己尝试一下

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERe 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

语****法

视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。

下面,我们将 Persons 表中住在 Beijing 的人筛选出来创建视图

查询上面这个视图

如果需要更新视图中的列或者其他信息,无需删除,使用 CREATE OR REPLACE VIEW 选项

现在需要筛选出,LASTNAME 为 Gates 的记录

删除视图就比较简单,跟表差不多,使用 DROP 即可

本章要讲的高级语言就先到此为止,不宜一次性介绍太多~

SQL 拥有很多可用于计数和计算的内建函数。

函数的使用语法

下面就来看看有哪些常用的函数

AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

计算 “orderno” 字段的平均值。

当然,也可以用在查询条件中,例如查询低于平均值的记录

COUNT() 函数返回匹配指定条件的行数。

count() 中可以有不同的语法

  • COUNT(*) :返回表中的记录数。

  • COUNT(DISTINCT 列名) :返回指定列的不同值的数目。

  • COUNT(列名) :返回指定列的值的数目(NULL 不计入)。

COUNT(*)

COUNT(DISTINCT 列名)

COUNT(列名)

MAX 函数返回一列中的最大值。NULL 值不包括在计算中。

MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。

MIN 函数返回一列中的最小值。NULL 值不包括在计算中。

SUM 函数返回数值列的总数(总额)。

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

获取 Persons 表中住在北京的总人数,根据 LASTNAME 分组

如果不加 GROUP BY 则会报错

也就是常见的 ORA-00937 不是单组分组函数的错误。

在 SQL 中增加 HAVINg 子句原因是,WHERe 关键字无法与合计函数一起使用。

获取 Persons 表中住在北京的总人数大于1的 LASTNAME,根据 LASTNAME 分组

UCASE/UPPER 函数把字段的值转换为大写。

选取 “LastName” 和 “FirstName” 列的内容,然后把 “LastName” 列转换为大写

LCASE/LOWER 函数把字段的值转换为小写。

选取 “LastName” 和 “FirstName” 列的内容,然后把 “LastName” 列转换为小写

LEN/LENGTH 函数返回文本字段中值的长度。

获取 LASTNAME 的值字符长度

ROUND 函数用于把数值字段舍入为指定的小数位数。

保留2位

注意 ROUND 取舍是 「四舍五入」

取整

NOW/SYSDATE 函数返回当前的日期和时间。

获取当前时间

如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间。

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包,需要点击下方链接即可前往获取

CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享

同时每个成长路线对应的板块都有配套的视频提供

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

本文地址:http://syank.xrbh.cn/news/10010.html    迅博思语资讯 http://syank.xrbh.cn/ , 查看更多
 
 
更多>同类资讯
0相关评论

新闻列表
企业新闻
推荐企业新闻
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号