SQL,从入门到熟练

本章目录

  • 数据库关系图
  • 检索数据
  • 排序数据
  • 过滤数据
  • 计算字段
  • 数据处理函数
  • 汇总数据
  • 分组数据
  • 子查询
  • 联结表
  • 组合查询

数据库关系图

实际工作中,你会遇到海量数据,多种数据类型以及复杂的数据关系。能否顺利得到你期望的结果,不仅取决于你对SQL的应用是否娴熟,还取决于数据库设计地是否合理、性能如何,更重要的是取决于你对业务的理解。对业务的理解最直接体现在你对数据库各个表之间的关系和每个表存储内容(列)的熟悉程度。因此,有必要在开始查询(检索)之前,一起来跟我熟悉下数据库表之间的相互关系。

数据库关系图

上图是样本数据库各个表之间的关系图,它包含以下3个部分的信息:

  • 表名
表名
  • 列名
列名
  • 引用关系
引用关系

表名和列名一目了然,没有什么可说的。引用关系(联结)是关系型数据库的核心。以上图为例,orders表中,order_num和cust_id分别是表的主键(PK)和外键(FK),可以这样简单来理解,orders表通过cust_id(列或字段)联结了customers表,orderitems表通过order_num联结了orders表。

如果你理解了这点,就没必要对这些概念死记硬背,因为你已经可以根据自己的需求设计一个简化的数据库了。

以下是通过MySQL Workbench导出数据库关系图的图文教程:

利用MySQL Workbench导出数据库关系图

检索数据

  • SELECT
SELECT 
    prod_name
FROM
    Products;

上述语句利用SELECT从Products表中检索一个名为prod_name的列,结果集如下:

单行检索

有的同学会问,如果我想同时获得多列数据该怎么办呢?很简单,用英文逗号(,)隔开不同列就行了。

SELECT 
    prod_id, prod_name, prod_price
FROM
    Products;

结果集如下:

多行检索
SELECT 
    *
FROM
    Products;

结果集如下:

所有行检索

通配符(*)可以帮助我们检索出表中的所有列。但一般情况下我们不会这么做,因为这会降低检索和应用程序的性能。但这么做有一个好处,就是可以检索出名字未知的列。不过通常我们会使用DESCRIBE关键字来处理。

描述表
  • DISTINCT

DISTINCT关键字指示数据库返回不同的值。这么说可能有点抽象,来看看下面的实例。

SELECT DISTINCT
    vend_id
FROM
    Products;

结果集如下:

检索不同的值

下面这段话对于深入理解DISTINCT关键字非常重要:

DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的两列完全相同,否则所有的行都会被检索出来

听起来有点拗口,怎么理解呢?先看这样一个实例

应用DISTINCT关键字前

应用DISTINCT关键字后

仔细对照前后结果的不同,有没有更深刻地理解上面那段话?“除非指定的两列完全相同,否则所有行都会被检索出来”。

这个实例包含了3层信息:

  1. DISTINCT关键字作用于所有列,不仅仅是跟在其后的那一列。

  2. DISTINCT关键字并非是将两列字符串拼接后再去重的,而是分别作用于两列。

  3. DISTINCT关键字作用于多列时,并非是在单列内去重。

当然理解起来稍微有点吃力,不过有个好办法,就是记住当DISTINCT关键字作用于多列时,除非指定的两列完全相同,否则所有的行都会被检索出来。这样你就可以知道在什么情况下应用它会不会得到你想要的结果了。

  • LIMIT

当你想指定返回的行数而不是将所有行返回时,你会用到LIMIT关键字(不同的DBMS实现这一目的的语法不尽相同)。

SELECT 
    prod_name
FROM
    Products
LIMIT 5 OFFSET 5;

结果集如下:

指定返回的行数

LIMIT A OFFSET B是指从B+1行开始,检索不超过A行的数据。也就是说,OFFSET关键字是指定从哪一行开始,LIMIT关键字指定了检索不超过多少行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SQL与MySQL简介 数据库基础 从SQL的角度来看,数据库就是一个以某种有组织的方式存储的数据集合。我们可以采...
    heming阅读 3,156评论 1 8
  • 1. SQL 简介 SQL 的目标 理想情况下,数据库语言应允许用户: 建立数据库和关系结构 完成基本数据管理任务...
    板蓝根plank阅读 2,380评论 0 11
  • 前言 读《sql必知必会 第四版》随手做的笔记,写的比较乱,可读性并不好,读的是中文版,翻译过来的感觉有点怪怪的。...
    _老徐_阅读 649评论 0 0
  • 关系型数据库和SQL SQL语言的三个部分DML:Data Manipulation Language,数据操纵语...
    Awey阅读 1,972评论 0 13
  • 姓名:李有连 企业名称:东莞耀升机电有限公司 组别:AT努力组 【日精进打卡第147天】 【知~学习】 诵读《六项...
    李有连阅读 211评论 0 1