SQL学习分享(入门篇)

引言:

         作为一篇SQL学习的入门篇文章,如何打造一个好的开头,不“劝退”初学者是至关重要的,在本文中作者将砍掉大段理论将重点放在实操环节帮助同学在实操中逐步学习SQL。此外作者还请来了三位同学来帮助大家一起学习,他(她)们的信息如下表所示。

student
s_ids_names_sexs_age
01胡图图6
02牛爷爷55
03壮壮妈33

        这是一个三行四列的数据表,包含三位同学的四种信息,表名student。实际上,这正是数据库中表的表现形式,本文使用Mysql数据库管理系统和数据库管理工具Navicat进行后续学习。那么这个表格是如何使用数据库生成的呢?让我们带着这个疑问开始本文第一章的学习吧!

学前准备:

        磨刀不误砍柴工,学习SQL前我们需要下载对应的软件Mysql与Navicat来方便我们实操学习,已经下载和安装好这两个软件的同学直接进入第一章学习即可。在进入MySQL官网下载页面后点击下图中红色线圈出选项即可下载。

        在安装完安装包后,由于安装步骤较为繁琐,可以参考其他博主总结的安装教程,本文便不再赘述,感谢其他博主的分享:MySQL安装教程

         在Navicat官网下载页面中我们选择对应系统便可以直接下载软件安装包,安装包下载好后双击运行安装程序,根据需要选择安装位置与桌面快捷方式一路“下一步”安装即可。在安装完Navicat后,需要将MySQL与其连接:

        通过上述方法下载的Navicat版本可以试用十五天,有很多博主提供了免费使用的方法,同学们后续有需要可以搜索查看,现在我们双击Navicat后弹出试用提醒,点击“试用”即可。

        进入Navicat后点击左上角“连接”,在数据库列表中选择MySQL并点击“下一步”进行连接。

        点击“下一步”后会出现如下登录界面,连接名称可以忽略不填,系统会根据主机和端口生成默认命名,在“密码”处输入安装MySQL时自己设置的密码点击“确定”即可。

连接建立成功后在“我的连接”处可以看见连接名称与数量,如下图所示。

        这里需要注意,Navicat可以与同一数据库进行多次连接,在不命名的情况下后续重复数据库会自动生成后缀,同学们要注意鉴别,也可以自行对数据库命名方便区分。

第一章:如何创建你的翻斗花园数据表?

        这里要为同学简单介绍一下SQL的四种基本的操作语言:DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)和DCL(数据控制语言)。其中DDL用于创建(CREATE)、更改(ALTER)和删除(DROP)数据库对象,如数据库(DATABASE)、表(TABLE)、索引(INDEX)、视图(VIEW)、触发器(TRIGGER)等。DML用于对数据库中的数据进行操作,如插入(INSERT INTO)、更新(UPDATE)和删除(DELETE)数据。DQL用于从数据库中检索数据,是SQL的核心部分。最常用的DQL语句是SELECT语句,用于查询和获取数据。DCL用于管理数据库的访问权限和安全性。

        这些概念内容同学们先了解即可,这一章主要学习数据库实操部分,这里便需要使用SQL语言DDL与DML,即数据定义语言与数据操作语言。想要构建引言中的翻斗花园同学信息表跟把大象装进冰箱的步骤数一样,都是三步:

首先是前提准备:

        单击选中MySQL管理系统,双击则可以选中展开该管理系统数据库列表,如下左一图所示,“海豚”代表MySQL,“绿桶”代表已点开查看的数据库,“灰桶”代表尚未点开的数据库,MySQL四个系统数据库如下居中图所示 ,在单击选中MySQL后点击左上角“新建查询”(如下右一图所示)。

        在选中连接后点击“新建查询”,Navicat为你生成对应MySQL下的查询并暂存在“对象”行,这里先不用使用Navicat的各种功能,直接点击红圈下方的空白语句行就可以愉快地将第一个连接下创建数据库了,此时,需要将输入法的中英文切换至“英文”,因为SQL操作语言是英文形式。

第一步:在MySQL下创建blog数据库并检验( DDL)

创建数据库模板为:

CREATE DATABASE IF NOT EXISTS dbname;

       “CREATE”即DDL用于创建的关键字,在创建数据库和数据表时都会用到,“DATABASE”指本次创建类型:数据库,“IF NOT EXISTS”为限定条件确保语句正确,“dbname”为你要创建的自定义的数据库名称,“;”为每个SQL语句的结束标志,使用英文符号。在构建SQL语句时,尽管系统不区分大小写,但为使语句兼具规范与美观,对于语句中的关键字均使用大写

        其中“IF NOT EXISTS”语句是一种筛选条件,它能确保语句正确的原因是作为筛选,当现有数据库没有名称为“dbname”的数据库时,执行CREATE语句创建名为“dbname”的数据库,当现有数据库已有名称为“dbname”的数据库时,则不执行CREATE语句。由于同学们是在新安装的MySQL中创建库,只要“dbname”不与上述四个系统库重名,便可以成功创建一个新的数据库。作者选择将数据库命名为“blog”,同学们可以按喜好命名英文名称。

在输入完整建库语句后,点击下图中“运行”键便可运行本查询内全部语句。

        在运行后输入框下方会展示运行信息与摘要,这里我们主要查看摘要内容中的“成功”,“已处理的查询”表示进行的操作此处为1,当“成功”为1则说明查询正确运行,但是由于本查询中使用“IF NOT EXISTS”关键字,因此输入语句后“成功”均为1,但是如果数据库命名重复,我们就无法得到想要的新建数据库,会影响到后续新建表和插入数据的操作。

        检验方式:当发现对应连接下新增一数据库且名称为“dbname”后,说明创建新数据库成功。若无新增数据库则创建失败,原因可能是已经存在同名数据库。

第二步:在数据库中创建student数据表并检验(DDL)

        结束第一步查询并单击选中新建数据库再次新建一个查询,这里需要注意,在我们叉选第一步查询后系统会提示我们是否保存此次操作,对于这种有意义的操作语句建议保存,在保存时,需要定义查询名称与保存路径,如下图所示,名称最好定义为英文形式,保存位置可以选择MySQL或者点选红圈选择“模式”列表下所连接MySQL下的各个数据库。

        查询的保存位置会影响到后续的语句查询,保存位置只有两级可选,而数据操作语言DML语句一般保存在对应数据库位置下,因此这种建立数据库的语句一般保存在对应MySQL连接下。

        在完成查询保存后,需要单击新建数据库,在数据库下写数据表创建语句。

创建数据表语句的模板为:

CREATE TABLE table_name ( column1 datatype, column2 datatype, ... );

  参数说明:

  • table_name 是你要创建的表的名称。
  • column1column2, ... 是表中的列名。
  • datatype 是每个列的数据类型。

        在学习初期,不涉及到日期与数字时,数据类型选择VARVHAR(n)可以应付大部分需求,其中VARCHAR表示容纳可变长度的字符串(可容纳变长字符串,更节省空间),在括号中用数字规定字符串的最大长度,n的数值可以随意选择,只要大于所创建的列中出现的最长字符串长度即可。

        在遇到整数时,可以使用INT容纳,在遇到小数时,可以使用decimal(size,d),numeric(size,d)容纳带有小数的数字,“size” 规定数字的最大位数,“d” 规定小数点右侧的最大位数;在遇到日期时,使用date即可,注意插入含有该date列表时注意格式满足('yyyy-mm-dd')。

        上述展示了创建数据表的基本模板,实际上在创建数据表时还可以对各列字段增加约束,参考下面的语句,在定义完列名称与数据类型后,均增加了“NOT NULL”约束,意味该列数据不可为空。在三步插入数据时会对什么为“空”讲解,“PRIMARY KEY”约束即主键约束约等于“NOT NULL”与“UNIQUE”的结合,主键数据在该列中非空且不可重复,可以作为区分每行数据的依据,就像为学生分配唯一的学号以便区分管理学生一样。在后续章节会对约束详细讲解,这里仅作简单说明培养同学们好的语句输入习惯,在不作特殊要求的情况下,数据都作“非空”约束。

CREATE TABLE student (
  s_id INT PRIMARY KEY,
  s_name VARCHAR ( 10 ) NOT NULL,
  s_sex VARCHAR ( 5 ) NOT NULL,
  s_age INT NOT NULL 
)

检验方式:在输入语句并运行后,系统提示运行成功,便可进行第三步操作。

第三步:向数据表student插入数据并检验

向数据表插入数据的模板为:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

参数说明:

  • table_name:需要插入新记录的表名。
  • column1, column2, ...:需要插入的字段名。
  • value1, value2, ...:需要插入的字段值。

        以同学信息表为例,由于定义的表数据类型均为VARCHAR(可变字符型),在插入字符数据时需要使用英文单引号引用,数字不需要单引号,最后运行语句后结果便如下所示,全部成功则说明数据成功插入至student数据表中。

检验方式:双击左侧student数据表查看内容,出现图示表格说明插入成功。

        恭喜你,成功完成了你的第一个数据表的构建,这是一个三行四列的翻斗花园同学数据表,四个列名分别为s_id、s_name、s_sex和s_age,分别代表学生ID、学生姓名、学生性别和学生年龄,大家要熟记自己创建的数据表表名和列名。第二章将对DQL涉及的关键字与语句结构进行学习,DQL是SQL的核心部分与难点,我们将继续以实操为主帮助大家学习。

第二章:如何对已构建的数据表进行查询操作?

        在创建好一个数据表后,我们常需要调用其中的数据信息,MySQL 数据库使用 SELECT 语句来查询数据。下面是MySQL 数据库中查询数据通用的 SELECT 语法:

SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];

参数说明:

  • SELECT用于选择列,FROM用于选择数据表,只有这两个关键词是查询语句所必须的
  • column1column2, ... 是你想要选择的列的名称,如果使用 * 表示选择所有列
  • table_name 是你要从中查询数据的表的名称。
  • WHERE condition 是一个可选的子句,用于指定过滤条件,只返回符合条件的行。
  • ORDER BY column_name [ASC | DESC] 是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。
  • LIMIT number 是一个可选的子句,用于限制返回的行数。
WHERE操作符与示例(假定A=10,B=20)
操作符描述实例
=等号,检测两个值是否相等,如果相等返回true(A = B) 返回false。
<>, !=不等于,检测两个值是否相等,如果不相等返回true(A != B) 返回 true。
>大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true(A > B) 返回false。
<小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true(A < B) 返回 true。
>=大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true(A >= B) 返回false。
<=小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true(A <= B) 返回 true。

SQL关键字顺序:SELECT...FROM...WHERE...GROUP BY...HAVING...ORDER BY...LIMIT

SQL执行顺序:FROM>WHERE>GROUP BY>聚集函数计算>HAVING>计算所有表达式>SELECT>ORDER BY>LIMIT

        在实操之前,我们需要了解SQL语句的关键字顺序与执行顺序,以便学习和理解查询语句。上述是SQL的关键字顺序和执行顺序,关键字顺序就是SQL的关键字书写顺序,执行顺序就是SQL中各个关键字段的底层执行逻辑,我们需要记牢这两个顺序方便后续书写查询语句。这里有一个Navicat的使用小技巧,由于Navicat支持换行书写语句,我们可以先书写部分语句后续补全也可以先书写执行顺序靠前的关键字语句,具体操作根据查询语句功能不同可以随机应变。此外,在书写关键字时,我们在输入SELECT关键词后,不必立刻将查询列写完,我们可以先换行输入FROM关键字及其后我们需要用到的表名,这样不仅更符合执行顺序,在输入列名时,Navicat还会根据已引用表帮助我们输入,提高语句编写效率

        这里需要注意,SELECT查询的本质是行查询,一个数据行可以含有多列。一个数据行是一个整体,在执行含有WHERE条件的SELECT语句时,FROM(来自)“table_name”表的数据行经WHERE子句筛选后由SELECT抽取出全部或特定列。通过 SELECT 查询,用户可以选择返回所有列或者指定需要返回的列。当使用 SELECT 查询时,可以通过 WHERE 子句指定筛选条件,以限制返回的行数。还可以使用 ORDER BY 子句对结果进行排序,以及使用 GROUP BY 子句对结果进行分组。
        总之,SELECT 查询在数据库中执行行级别的查询,可以返回符合条件的多个数据行并抽取列,以满足用户的需求。下面是MySQL SELECT 语句简单的应用实例与查询结果展示。需要说明的是,查询操作只是调用数据表的内容,并不影响数据表的结构。

-- 1、选择所有列的所有行
SELECT * FROM student;

-- 2、选择所有行的性别列并去重
SELECT DISTINCT s_sex FROM student;

-- 3、选择特定列的所有行
SELECT s_id, s_name FROM student;

-- 4、添加 WHERE 子句,选择满足条件的行
SELECT * FROM student WHERE s_sex='男';

-- 5、添加 ORDER BY 子句,按照某列的升序排序
SELECT * FROM student ORDER BY s_id;

-- 6、添加 ORDER BY 子句,按照某列的降序排序
SELECT * FROM student ORDER BY s_id DESC;

-- 7、添加 LIMIT 子句,限制返回的行数
SELECT * FROM student LIMIT 2;

-- 8、使用 SQL LIKE 操作符选择姓名列以胡开头的数据行
SELECT * FROM student WHERE s_name LIKE '胡%';

-- 9、使用 SQL BETWEEN 操作符选择年龄列数据在1到40之间的数据行
SELECT * FROM student WHERE s_age BETWEEN 1 AND 40;

-- 10、使用 SQL IN 操作符选择年龄列数据为3或4或5或6的数据行
SELECT * FROM student WHERE s_age IN ('3','4','5','6');

1、选择所有行并抽取所有列,查询结果跟将表直接打开一样,能看见表的全部内容。
SELECT * FROM student;

2、选择所有行的性别列并去重

3、选择特定列的所有行,即选择满足WHERE条件(没有则全选)并抽取特定列。
SELECT s_id, s_name FROM student;

4、添加 WHERE 子句,选择满足s_sex='男'条件的行,并抽取所有列(*)。
SELECT * FROM student WHERE s_sex='男';

5、添加 ORDER BY 子句,按照s_id列的升序排序行并抽取所列(*)。
SELECT * FROM student ORDER BY s_id;

6、添加 ORDER BY 子句,按照s_id列的降序排序所有行。
SELECT * FROM student ORDER BY s_id DESC;

7、添加 LIMIT 子句,限制返回的行数。
SELECT * FROM student LIMIT 2;

8、使用 SQL LIKE 操作符选择姓名列以胡开头的数据行

9、使用 SQL BETWEEN 操作符选择年龄列数据在1到40之间的数据行

 10、使用 SQL IN 操作符选择年龄列数据为3或4或5或6的数据行

        细心的同学可以发现,8-10的查询结果跟前面略有不同,在编写SQL语句时,使用“-- ”符号可以对SQL语句注释而不被SQL执行,注意“--”后跟一空格,使用“;”间隔后,也可以同时执行多个语句,提高操作效率,这也正是编写规范性的优势。

        除此之外,大家也一定有许多疑问,其中有些知识会在第二章与大家一起学习,也欢迎大家有疑问在评论区与作者交流。

第三章:何为“删改”?

        在完成上述查询后,我们对SQL已经有了简单的认识,到目前为止,我们经历了数据库和数据表的创建工作,数据表数据的插入工作以及对数据表内数据的简单查询工作。但是数据库和数据表并不是一成不变的,通常我们会对创建的数据表进行“增删改查”四种操作,其中增(INSERT INTO)和查(INSERT INTO)我们已经接触过了,删(DELETE)和改(UPDATE)分别指删除数据表行数据和更改数据表行数据。

以下是 DELETE 语句从 MySQL 数据表中删除数据的通用语法:

DELETE FROM table_name
WHERE condition;

参数说明:

  • table_name 是你要删除数据的表的名称。
  • WHERE condition 是一个可选的子句,用于指定删除的行。

更多说明:

  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除,但表结构保持不变。
  • 你可以在 WHERE 子句中指定任何条件。

实操示例:

1.删除所有数据(注意数据表名称变更)

DELETE FROM table_name;

“结果1”是删除前的查询结果。

“结果2”是删除后的查询结果。

2.删除性别为男的数据

“结果1”是删除前的查询结果。

“结果2”是删除后的查询结果。

以下是 UPDATE 语句从 MySQL 数据表中更新数据的通用语法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

参数说明:

  • table_name 是你要更新数据的表的名称。
  • column1column2, ... 是你要更新的列的名称。
  • value1value2, ... 是新的值,用于替换旧的值。
  • WHERE condition 是一个可选的子句,用于指定更新的行。如果省略 WHERE 子句,将更新表中的所有行。

更多说明:

  • 你可以同时更新一个或多个字段。
  • 你可以在 WHERE 子句中指定任何条件。
  • 当想要更改某一行的数据时,我们常在WHERE后对主键进行限定。

实操示例:

1.将性别为男的数据行中的年龄列数值改为1

“结果1”是更新前的查询结果。

“结果2”是更新后的查询结果。

2.将主键学生序号为01的姓名改为“第一名”,性别改为“不确定”

“结果1”是更新前的查询结果。

“结果2”是更新后的查询结果。

        自此我们已经了解了数据库、数据表的概念以及对数据表的“增删改查”操作,后续则是SQL更进一步的学习,比如连接、函数、视图、索引等知识的学习。书山有路勤为径,学海无涯苦作舟,学习过程固然枯燥,收获却是值得喜悦,与大家共勉。

后记:新的开始

        在第二篇文章中,作者会和大家一起对SQL进行更深入的学习,入门篇的结束代表着新的开始!

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值