适用范围

本书涵盖的DBMS一般来说,本书中所讲授的SQL可以应用到任何数据库管理系统(DBMS)。但是,各种SQL实现不尽相同,本书介绍的SQL主要适用于以下系统(需要时会给出特殊说明和注释):

❑ IBM DB2(包括云上DB2);❑ Microsoft SQL Server(包括Microsoft SQL Server Express);❑ MariaDB;❑ MySQL;❑ Oracle(包括Oracle Express);❑ PostgreSQL;❑ SQLite。

http://forta.com/books/0135182794

书中所有的数据库示范例

了解mysql

我们需要以某种方式与数据库打交道,而sql正是用来实现这一任务的语言。

其实,每当我们在手机上选取联系人,或是从电子邮件地址里查找名字时,就是在使用数据库。我们在网站上进行搜索,也是在使用数据库。

但尽管我们一直都在使用数据库,但我们仍然对究竟什么事数据库并不清楚。所以,先了解一些最重要的数据库术语,并加以说明。

数据库(database)

从sql的角度来看数据库是以某种有组织的方式储存的数据集合。最简单的方法是将数据库想象成一个文件柜。文件柜只是一个存放数据的物理位置,他不管数据是什么,也不管数据是如何组织的。

数据库是保存有组织的数据的容器(通常是一个文件或一组文件)

ps:人们通常用数据酷这个术语来代表数据库软件,这是不正确的,也因此产生了许多混淆。确切的说,数据库软件应称为数据库管理系统(DBMS)。数据库是通过DBMS创建和操纵的容器,而就他究竟是什么,形式什么样的,各种数据库都不一样。

表(table)

你往文件柜里放资料时,并不是随便将它们扔进某个抽屉就结束了,而是在文件柜中创建文件,然后将相关资料放入特定的文件中。

在数据库领域中,这些文件称为表。表是一种结构化的文件,可用来存储特定的类型的数据。表可以保存顾客清单,产品目录,活着其他信息清单。

表是某种特定类型数据的结构化清单

关键点:存储在表中的数据是同一种类型的数据或清单。绝不要把顾客的清单和订单的清单存储在同一个数据库表中,否则以后的检索和访问会很困难。应该创建两个表,每个清单一个表。

表名

数据库中的每一个表都有一个名字来标识自己。这个名字是唯一的,即数据库中没有其他表具有相同的名字。

在一个数据库中不能使用相同的表名,但在不同的数据库中完全可以使用相同的表名。

表具有一些特性,这些特性定义了数据在表中如何存储,包括存储什么样的数据,数据如何分解,各部分信息如何命名等信息。描述表的这组信息就是所谓的模式(schema),模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)

模式

关于数据库和表的布局及特性的信息

列和数据类型

表由列组成。列存储表中某部分的信息。

列(column)

表中的一个字段。所有表都是由一个或多个列组成的。

数据分解

正确的将数据分解为多个列极为重要。例如,城市,州,邮政编码应该总是彼此独立的列。通过分解这些数据,才有可能利用特定的列对数据进行分类和过滤。如果城市和州组合在一个列中,则按州进行分类或过滤就会很困难。

数据类型

允许什么类型的数据。每个表列都有相应的数据类型,他限制(或允许)该列中相应的数据类型。

数据类型限定了可存储在列中的数据种类(例如,放置在数值字段中录入字符值)。数据类型还帮助正确的分类数据,并在优化磁盘使用方面起重要作用。因此,在创建表时必须特效关注所用的数据类型。

数据类型兼容

数据类型及其名称是sql不兼容的一个主要原因。虽然大多数基本数据类型得到了一致的智齿,但许多高级的数据类型却没有。更糟的是,偶然会有相同的数据类型在不同的DBMS中具有不同的名称。对此用户毫无办法,重要的是在创建表结构时要记住这些差异。

表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果江表想象成网格,网格中垂直的列为表列,水平行为表行。

行是表中的一个记录。有些人在提到行时称其为数据库记录(record)。这两个术语多半可以互通,但从技术上,行才是正确的术语。

主键(primary key)

表中每一行都应该有一列(或几列)可以唯一标识自己。顾客表可以使用顾客编号,而订单表可以使用订单id,雇员表可以使用雇员id。

一列(或几列),其值能够唯一标识表中每一行。

唯一标识表中每行的这个列(或这几列)

tips:

应该总是定义主键

虽然并不总是需要主键,但多数数据库设计者都会保证他们创建的每一个表具有一个主键,以便于以后的数据操作和管理。

表中的任何列都可以作为主键,只要他满足以下条件:

1.任意两行都不具有相同的主键值;

2.每一行都必须具有一个主键值(主键列不能为NULL)

3.主键列中的值不允许修改货更新;

4.主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。

主键通常定义在表的一列上,但并不是必须这么做,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的(但其中单个列的值可以不唯一)。

什么是sql

SQL(发音为字母S-Q-L或sequel)是Structured Query Language(结构化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言。

设计sql的目的是很好地完成一项任务---提供一种从数据库中读写数据的简单有效的方法。

sql的优点:

1.sql不是某个特定数据库厂商专有的语言。绝大多数重要的DBMS都智齿sql,所以学习此语言使你几乎能与所有数据库打交道。

2.sql简单易学。他的语句全都是由有很强的描述性的英语单词组成,而且这些单词的数目不多。

3.sql虽然看上去很简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。

本书讲授的SQL主要是ANSI SQL。在使用某种DBMS特定的SQL时,会特别说明。

sql语句

SELECT语句

最近常用的sql语句大概就是select语句了。

他的用途是从一个或多个表中检索信息。

关键字(keyword)

作为sql组成部分的保留字。关键字不能用作表或列的名字。

使用select检索表数据,必须至少给出两条信息---想选择什么,以及从什么地方选择。

简单的select语句

select prod_name
from products;

解析:

上述语句利用select语句从products中检索一名为prod_name的列。所需的列名写在select关键字之后。from关键字指出从哪个表中检索数据。

根据你使用的具体DBMS和客户端,可能你会看到一条信息说明检索了多少行,以及花了多长时间。例如,mysql命令行会显示类似于下面这样一行信息:

9 rows in set (0.01sec)

未排序数据

查询数据的顺序不同,出现这种情况很正常。如果没有明确的排序查询结果,则返回的数据没有特定的顺序。返回数据的顺序可能是数据被添加到表的顺序,也可能不是。只要返回相同行数的行,就是正确的。

结束sql语句

多条sql语句必须以分号(;)分割。多数DBMS不需要在单条sql语句后加分号,但也有DBMS可能必须在单条sql语句后加分号。

sql语句和大小写

sql语句不区分大小写,因此SELECT和select是一样的。同样,写成Select也是没有关系的。

建议sql关键字使用大写,而对于列名和表名使用小写,这样做代码更易于阅读和调试。

使用空格

在处理sql语句时,其中所有的空格都被忽略。sql语句可以写成长长的一行,也可以分写在多行。下面这三种写法的作用是一样的。

1.
select prod_name
from products;
2.
select prod_name from products;
3.
select
prod_name
from
products;

检索多个列

要想从一个表中检索多个列,任然使用相同的select语句。唯一不同是必须在select关键字后给出多个列名,列名之间必须以逗号分隔。

当心逗号,

在选择多个列时,一定要在列名之间加上逗号,但最后一个列名不加。否则会报错。

sql语句一般返回原始的。无格式的数据,不同的DBMS和客户端显示数据的方式略有不同(如对齐格式不同,小数位数不同)。数据的格式化是表示问题,而不是检索问题。因此,如何表示一般会在显示该数据的应用程序中规定。通常很少直接使用实际检索出的数据(没有应用程序提供的格式)

检索所有列

如果不给出任何列名,则select语句将检索表中的所有列。

select *
from products;

SQL必知必会(第5版) 读书笔记的更多相关文章

  1. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. 学习《SQL必知必会(第4版)》中文PDF+英文PDF+代码++福达BenForta(作者)

    不管是数据分析还是Web程序开发,都会接触到数据库,SQL语法简洁,使用方式灵活,功能强大,已经成为当今程序员不可或缺的技能. 推荐学习<SQL必知必会(第4版)>,内容丰富,文字简洁明快 ...

  3. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  4. 《SQL必知必会》学习笔记(一)

    这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...

  5. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

  6. 《SQL必知必会》笔记

    SQL必知必会(第4版) 作者:[美]Ben Forta 本书介绍了sql在不同数据库工具(Oracle.SQLite.SQL server.MySQL.MariaDB.PostgreSQL...)是 ...

  7. SQL必知必会 -------- SELECT、注释

    主要是看<SQL必知必会>第四版的书,而写的一些SQL笔记,红色的是方便以后查询的sql语句,工作中主要是使用mysql数据库,所以笔记也是围绕mysql而写的. 下文调试的数据表sql语 ...

  8. MySQL必知必会(第4版)整理笔记

    参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...

  9. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  10. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

随机推荐

  1. JavaSE--初识&&开发基础

    JDK.JRE.JVM JDK:Java Development Kit java开发环境 JRE:Java Runtime Environment java运行时环境 JVM:JAVA Virtua ...

  2. LRU缓存及其实现

    缓存是我们日常开发中来提高性能最直接的方式,经常会听到有人说:性能不行?是因为你没加缓存!常见的缓存有外部缓存服务以及程序内部缓存,外部缓存服务包括:Redis.Memcached等,内部缓存就是我们 ...

  3. git合并某分支上的单次提交(cherry-pick)

    1. 查找提交对应的hash值 git log 查看 d 查看下一页,q退出 vscode通过gitlens插件查看 2.合并提交 git cherry-pick hahs值

  4. KubeVela 1.5:灵活框选 CNCF 原子能力打造独特的企业应用发布平台

    简介: KubeVela 1.5 于近日正式发布.在该版本中为社区带来了更多的开箱即用的应用交付能力,包括新增系统可观测:新增 Cloud Shell 终端,将 Vela CLI 搬到了浏览器:增强的 ...

  5. 阿里云张新涛:连接产业上下游,构建XR协作生态

    简介: 用交互技术辅以澎湃的算力带给大家最真实的"沉浸式体验" 2022年9月2日,在世界人工智能大会"区块新生 数字宇宙--元宇宙技术与生态合作"分论坛上,阿 ...

  6. [Go] httprouter 自动 OPTIONS 响应 和 CORS

    httprouter 是 Gin framework 使用的路由组件. 要对 OPTIONS 请求自动响应,比如支持 CORS 请求或者设置请求头,可用 Router.GlobalOPTIONS. r ...

  7. WPF 已知问题 InputEventArgs 的 Timestamp 属性是静态的导致事件之间相互影响

    本文记录一个 WPF 已知的设计问题,当前此问题已经被大佬修复,这个设计问题刚好属于比较边缘的模块,我写了这么多年的代码还没有踩到这个坑一次,也没有听到有谁提到这个坑 远古时候,不知道大佬是故意还是失 ...

  8. k3s安装---适配边缘计算场景的轻量级的k8s(二)

    三.安装k8s k3s官网:https://k3s.io 文档: github:https://github.com/k3s-io/k3s 3.1 安装基础环境 # 安装基础环境 1.安装yum源 c ...

  9. 笔记06-第六讲 Cadence同一页面建立电气互连

    笔记06-第六讲 Cadence同一页面建立电气互连 内容: 90度和任意角度连线; 连线方式; 十字线添加/删除连接点; Net alias; 无连接的管脚处理; 注意事项. 连线有两种方式,右侧工 ...

  10. 将字节数组输入流拷贝成字节数组输出流,将ByteArrayInputStream转成ByteArrayOutputStream

    /** 将 ByteArrayInputStream 拷贝成 ByteArrayOutputStream * 将 字节数组输入流 拷贝成 字节数组输出流 */ public static ByteAr ...