《SQL必知必会》(1,2):了解SQL、检索数据

本书中的实例表和数据,请移步附录< - (戳)
附录中还有很多资料,建议一定先看一下附录!!!

第一课:了解SQL

1.1数据库基础

1.1.1 数据库

数据库(database): 保存有组织的数据的容器(通常是一个文件或一组文件)。
可以将数据库想象为一个文件柜,这个柜子是一个存放数据的物理位置,不管数据是什么,也不管数据是如何组织的。
注意:人们常用数据库这个术语来表示他们使用的数据库软件,这是不正确的,确切的说,数据库软件应称为数据库管理系统(DBMS)。数据库是通过DBMS创建和操作的容器,而具体它究竟是什么,形式如何 各种数据库都不一样。

1.1.2 表

往文件柜中放资料时,并不是随便一扔,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。
在数据库领域,这种文件称为表。表是一种结构化文件,用来存储某种特定类型的数据。

表(table):某种特定类型数据的结构化清单。
关键点在于,表中的数据是一种类型的数据或清单,这里参考java中类的概念。

数据库中每个表都有一个名字来标识自己,这个名字是唯一的。

ps:在不同的数据库中完全可以有相同的表名。

表有一些特性,这些特性定义了数据在表中如何存储,包含存储什么样的数据等等。表述表的这组信息就是所谓的模式(schema),模式可以用来描述数据库中特定的表,也可以用来描述整个数据库和表中的关系。
模式: 关于数据库和表的布局及特性的信息。

1.1.3 列和数据类型

表由列组成,列存储表中某部分信息。
列(column):表中的一个字段。所有表都是有一个或多个列组成。
数据库中每个列都有相应的数据类型。数据类型(datatype) 定义了列可以存储那些数据种类。如,数字,日期,文本。。。
数据类型:所允许的数据的类型,每个表列都有相应的数据类型。它限制该列中存储的数据。

注意数据类型兼容:大多数基本数据类型得到了一致的支持,但很多高级的数据类型却没有。偶然会有相同的数据类型在不同的DBMS中有不同的名称,很恶心。

1.1.4 行

表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
行(row):表中的一个记录。形象点就是一条数据。

1.1.5 主键

表中每一行都应该有一列或几列可以唯一标识自己。比如顾客表,可以使用顾客编号。
主键(primary key):一列,其值能唯一标识表中的每一行。
任何一个列都可以当主键,但是是有条件的:

  1. 任意两行都不具有相同的主键值。
  2. 每一行都必须具有一个主键值(主键列不允许为null)
  3. 主键列中的值不允许修改或更新
  4. 主键值不能重用。(如果某行从表中删除,他的主键不能赋给以后的新行)

还有一种非常重要的键 叫外键,后边讲。

1.2 什么是SQL

SQL(Structure Query Language):结构化查询语言。是一种专门用来与数据库沟通的语言。
与Java,C,C# 等不一样,SQL之后很少的单词,hhh。
设计SQL的目的是:提供一种从数据库中读写数据的简单有效的方法。
SQL有如下优点:

  • SQL不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持sQL,所以学习此语言使你几乎能与所有数据库打交道。
  • SQL简单易学。它的语句全都是由有很强描述性的英语单词组成,而且这些单词的数目不多。
  • SQL虽然看上去很简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。

说明:SQL的扩展
许多 DBMS 厂商通过增加语句或指令,对SQL进行了扩展。这种扩展的目的是提供执行特定操作的额外功能或简化方法。虽然这种扩展很有用,但一般都是针对个别DBMS的,很少有两个以上的供应商支持这种扩展。

标准SQL由ANSI标准委员会管理,从而称为ANSI SQL。所有主要的DBMS,即使有自己的扩展,也都支持ANSI SQL。各个实现有自己的名称,如PL/SQL、Transact-SQL等。

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

1.3动手实践

与学习任何语言一样,最好的方法就是实践。我们需要一个数据库,来测试SQL语句。
本书中所有课程采用的都是真实的SQL语句和数据表。附录A给出了具体的样例表,并介绍了获得(或创建)它们的详细步骤,便于读者理解每一课讲授的内容。附录B介绍在各种应用程序中执行SQL所需的步骤。在进入下一课之前,强烈建议读者先阅读这两个附录的内容,为以后的学习做好准备。

1.4 小结

我们了解了什么是SQL,他为什么很有用。因为SQL是用来与数据库打交道的,所以 我们也复习了一些基本的数据库术语。

第二课:检索数据

这一课介绍如何使用select语句从表中检索一个或多个数据列。

2.1 select语句

每个sql语句都是由一个或多个关键字组成的。
关键字(keyword):作为sql组成部分的保留字,关键字不能用作表或列的名字。附录E中列出了经常使用的关键字。

为了使用select检索表数据,必须至少给出两条信息:想找什么,在哪找。

2.2 检索单个列

SELECT prod_name FROM Products;

分析:上述语句利用SELECT语句从Products表中检索一个名为prod_name的列。所需的列名写在SELECT关键字之后,FROM关键字指出从哪个表中检索数据。此语句的输出如下所示:
在这里插入图片描述

如上的一条简单 SELECT语句将返回表中的所有行。数据没有过滤(过滤将得出结果集的一个子集),也没有排序。以后几课将讨论这些内容。

提示:结束SQL语句
多条SQL语句必须以分号(;)分隔。多数DBMS不需要在单条SQL语句后加分号,但也有DBMS可能必须在单条SQL语句后加上分号。当然,如果愿意可以总是加上分号。事实上,即使不一定需要,加上分号也肯定没有坏处。
提示:SQL语句和大小写
请注意,SQL语句不区分大小写,因此SELECT 与select是相同的。同样,写成Select 也没有关系。许多SQL开发人员喜欢对SQL关键字使用大写,而对列名和表名使用小写,这样做使代码更易于阅读和调试。不过,一定要认识到虽然SQL是不区分大小写的,但是表名、列名和值可能有所不同(这有赖于具体的DBMS及其如何配置)。
提示:使用空格
在处理SQL语句时,其中所有空格都被忽略。SQL语句可以写成长长的一行,也可以分写在多行。

2.3 检索多个列

跟检索一个列没有本质区别,无非就是:找哪些,在哪找。
提示:当心逗号
在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。如果在最后一个列名后加了逗号,将出现错误。

SELECT prod_id,prod_name,prod_priceFROM Products;

在这里插入图片描述

说明:数据表示
从上述输出可以看到,SQL语句一般返回原始的、无格式的数据。数据的格式化是表示问题,而不是检索问题。因此,表示(如把上面的价格值显示为正确的十进制数值货币金额)一般在显示该数据的应用程序中规定。通常很少直接使用实际检索出的数据(没有应用程序提供的格式)。

2.4 检索所有列

*就代表所有东西,也就是:找所有东西(*),在哪找

select * from products;

在这里插入图片描述

2.5 检索不相等的值

也就是去除掉重复的数据,用到关键词 distinct

SELECT  vend_id from products;

是这样的:
在这里插入图片描述
加个distinct:

SELECT distinct vend_id from products;

在这里插入图片描述
去除了上边重复的数据

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

2.6 限制结果

如果我要查询前5行,这要怎么实现呢?在这每个DBMS就差别比较大了。
大学课上通常使用SQLServer:

select TOP 5 prod_name
from products;

工作中通常使用MySQL:

select prod_name
from products
limit 5;

政府学校等机构的数据库经常使用Oracle:

select prod_name
from products
where rownum <= 5;

那我要是想取任意五行的数据呢?
MySQL中是这样干的:

SELECT * from products
limit 5 offset 5   #第一个5是行数,第二个是在哪行开始
;

2.7 注释

-- 
#
/* */

1,2 单行注释
3是多行注释

2.8 小结

这—课学习了如何使用SQL的SELECT语句来检索单个表列、多个表列以及所有表列。也学习了如何返回不同的值,如何注释代码。同时不幸的是,更复杂的SQL使得SQL代码变得不轻便。下—课将讲授如何对检索出来的数据进行排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce.vvu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值