《SQL必知必会》第2课:检索数据-笔记-完善版

2 篇文章 1 订阅

笔记说明1:

目前笔记参考内容:

书籍:《SQL必知必会》

课程:《数据库系统》MOOC-哈工大-战德臣教师

课程:《MySQL8学习教程》哔哩哔哩

以及一些其他的课程和笔记

公众号:LearningTribe

为了后期让学习SQL的我们有一个集结的地方,方便大家交流沟通,我花时间建了一个公众号:LearningTribe,由于时间关系,目前还没怎么开始运营,预计四月中下旬开始运营,大家可以先关注一下,防止找不到部落。


笔记说明2:

我这里安装的是MySQL 8.0.19,我的笔记也只记录通用部分和MySQL的专属部分,至于其他DBMS的专属部分,等后面用到了再去补这方面的知识。

任何学习都是从入门到基础再到高级的,笔记的记录应该是不断完善的过程,这里的笔记我先以《SQL必知必会》的目录为框架进行记录,并对其进行补充,我虽然有一定的基础(本科软件工程),但我喜欢把笔记记录的尽量详细和完整,它会是一个很漫长的过程,但我会坚持下去。

我学习Python有一段时间了,最近才开始自学SQL,期间找了一些视频和书籍看,笔记也记录了一部分,但比较零零散散,这些零散的笔记我会汇总整理到当前的笔记中,所以才等到今天把笔记一点点的分享出来。

基本上对每个知识点我都写上了【我的理解】/【关键】,不过我的水平很有限,对一些知识的理解可能不够完善,甚至错误,所以【我的理解】/【关键】这块大家就参考看一下,如果这块内容有错,灰常恳求大家指点出来,一起交流,一起加油,一起进步~奥里给!

二、检索数据

这部分我在每小节都添加了【关键】,并且调整了书中的一些代码以便更好的理解。

2.1 SELECT 语句

SQL语句基本知识-补充:

  • SQL不区分大小写,但有默认的编程规范:关键字和函数一般大写,其余的一般小写;
  • SQL 没有严格的空格规范,一个空格=很多个空格;
  • SQL语言中不能以关键字对其他项进行命名;
  • SQL语句必须以英文分号 ; 或者 \g 作为结束符,表示该语句输入完成可以执行了,如果没有结束符,该语句就不会执行(也有特殊的会执行),然后命令行的提示符就会变成->的形式,提示还没有输入结束,->是一个很常见的提示符,我们会经常用到这个特性来让语句分行写,来更友好的显示我们编写的代码;
  • SQL语句中的引号必须成对出现,如果缺少一个引号,提示符就会变成 '> 或者 "> ,提示引号中的内容还没有输入完成;

SELECT 检索:

  • SELECT 中文意思是“挑选”,在编程的世界里等于“检索”,属于关键字,在SQL中SELECT表示从一个表或多个表中检索出我们想要的信息;
  • 要检索SELECT需要两个内容:检索什么?检索谁?这两个内容分别由两个关键字连接,“检索什么?”由SELECT引出,“检索谁?”由FROM引出,即:SELECT 检索内容 FROM 从哪里检索;

2.2 检索单个列

命令:

SELECT prod_name
FROM Products;

解释:SELECT和FROM都是关键字,Products是产品表table,prod_name是Products表中的一列,这条语句(两行)表示从Products表中检索出prod_name列的所有数据信息;

结果:结果的返回顺序一般跟在Products中填充数据的顺序一样,但DBMS很多,也可能有不按填充顺序显示的,不过只要内容不多不少就是对的;(下同)

关键:明白SELECT是可以直接检索一个表中的一整列数据,清楚SELECT和FROM一起使用的顺序;

2.3 检索多个列

命令:

SELECT prod_id,  prod_name,  prod_price
FROM Products;

解释: 从Products产品表中检索出prod_id, prod_name, prod_price这三列的全部数据信息;

关键: 首先要记得SELECT是可以从一个表中一次性检索多个列的数据,而检索的方式就是每个列名之间以逗号分割,但最后一个不要加逗号,不然会被误解为下面的内容还是一个列名,会出错的。

2.4 检索所有列

命令:

SELECT *
FROM Products;

解释: 返回的是Products表的所有列,即这个表的所有数据信息;

关键:

  • 使用了通配符*,这点在其他的编程语言的也有类似的用法,

  • 其次要清楚返回所有列的意思就是返回这个表的所有信息,但不一般不推荐这么使用,检索数据我们最好还是先有个目标,不过有时候也可以用这条语句来看看某个表中都有哪些列。

2.5 检索不同的值

命令1:

SELECT DISTINCT vend_id
FROM Products;

解释: 从Products表中检索vend_id这一列的不同数据行,相同的数据只返回一次(最先检索的);

关键: 多个关键字是DISTINCT,中文意思是“不同的”,作为修饰词放在“名词vend_id”的前面,表示不同的vend_id信息。

命令2:

SELECT DISTINCT vend_id, prod_price
FROM Products;

解释: 从Products表中检索出vend_id 和 prod_price 都不同数据,注意是“和”,不是“或”,当vend_id存在相同的数据,但对应的prod_price数据不同,则也是属于不同的;(这里我的返回结果和书中的内容不一样,检查的语句和表中的数据,都没有问题,应该是书的版本比较低,而在网上下载的数据是最新的)

关键: DISTINCT中文意思是“不同的”,修饰的是其后所有的列,是其后所有列的信息叠加后的不同,所以再次说明DISTINCT关键字应该放在所有列名前面;

2.6 限制结果

该功能描述的限制是对结果的输出限制,前提是已经检索好了,但不让他全部输出显示,而是根据需要选取一部分显示,不同的DBMS对该功能使用的命令是不同的,这里以MySQL为例,使用到的关键字是LIMIT;

命令1:

SELECT prod_name
FROM Products
LIMIT  5;

解释: 前两条语句的执行结果是从Products表中检索prod_name这一列数据,最后一条语句的作用是对前面语句的执行结果进行输出限制,LIMIT 5表示结果只返回前5行数据,超出5行则截取,不足5行则显示全部。这个限制是从第0行开始算的,如果想从指定的位置开始限制,见命令2;

命令2:

SELECT prod_name
FROM Products
LIMIT 5 OFFSET 6;

解释: 前两条语句不变,含义也不变。最后一条语句表示从第6行开始限制输出5行数据,这里我对书中的的命令进行了调整,这样更好的理解。OFFSET意思是“偏移”,OFFSET 6 表示偏移量为6,之所以还是从第6行开始,是因为这里MySQL的计数和别的编程语言类似,也是从0开始计数的。

简化命令:

SELECT prod_name
FROM Products
LIMIT 6,5;

解释: 这里有个易混点,简化版的命令,逗号前的值对应OFFSET,逗号后面的对应LIMIT;

关键: 理解“限制结果”的含义是限制输出的行数,以及从哪行开始算,且计数是从0开始的,注意MySQL中“限制结果”的简化命令的易混点。

2.7 使用注释

行内注释命令1:

SELECT prod_name    -- 这是一条注释
FROM  Products;

解释: 这种 – 的注释方式在很多DBMS中都是支持的

行内注释命令2:

# 这是一条注释
SELECT prod_name    
FROM  Products;

解释: 这种井号 # 的注释方式,在编程中的很常见,但书中说只有一小部分DBMS支持,我这边只验证了MySQL8是支持的。

我测试了在MySQL8.0.19中,#也可以用到一条语句的后面,同 – 注释一样,也是可以顺利执行的,这点在命令行模式下已经成功测试,如图:
在这里插入图片描述

多行注释命令:

/* SELECT prod_name, vend_id
FROM Products; */
SELECT prod_price
FROM Products;

解释: 这种注释方式大部分DBMS都支持,除了SQL外,很多编程语言也支持这种多行注释的方式。

2.8 小结

第2课主要讲了检索,也就是SELECT的使用,我理解的检索是从已有的数据中筛选出自己想要的数据,因为数据都是按照行列的结构化存储的,所以检索也是对行与列进行操作,先是对表中的单个整列检索,再对表中多个列/所有列检索,最后对检索出的列进行行限制LIMIT输出操作,这样有了列与行的检索方式,就可以从数据库中检索出我们想要的数据了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值