【SQL笔记】一、SQL基础与检索数据

目录

1.基本概念

2.检索数据——SELECT语句

2.1 检索单个列

2.2 检索多个列

2.3 检索所有列

2.4 检索不同的值

2.5 限制结果

2.6 使用注释

3.排序检索数据

3.1 排序数据

3.2 按多个列排序

3.3 按列位置排序

3.4 指定排序方向

4.测试题


 1.基本概念

        数据库:保存有组织的数据的容器。

        数据库软件应称为数据库管理系统(DBMS)。数据库是通过 DBMS 创建和操纵的容器。

        往文件柜里放资料时,并不是随便将它们扔进某个抽屉就完事了的,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。在数据库领域中,这种文件称为表(table)。表是某种特定类型数据的结构化清单。表是一种结构化的文件,可用来存储某种特定类型的数据。存储在表中的数据是同一种类型的数据或清单。数据库中的每个表都有一个唯一的表名来标识自己。但在不同的数据库中完全可以使用相同的表名。

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

        表由列(column)组成。列是表中的一个字段。所有表都是由一个或多个列组成的。例如,在顾客表中,一列存储顾客编号,另一列存储顾客姓名,而地址、城市、州以及邮政编码全都存储在各自的列中。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。

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

        行(row),常称做记录(record),例如,顾客表可以每行存储一个顾客。表中的行编号为记录的编号。

        主键(primary key),一列或几列,其值能唯一标识每一行。唯一标识表中每行的这个列(或这几列)称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行就极为困难,因为你不能保证操作只涉及相关的行,没有伤及无辜。

        SQL是 Structured Query Language(结构化查询语言)的缩写。SQL 是一种专门用来与数据库沟通的语言。许多 DBMS 厂商通过增加语句或指令,对 SQL 进行了扩展。这种扩展的目的是提供执行特定操作的额外功能或简化方法。虽然这种扩展很有用,但一般都是针对个别 DBMS 的,很少有两个厂商同时支持这种扩展。

2.检索数据——SELECT语句

2.1 检索单个列

SELECT prod_name
FROM Products;

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

1.多条 SQL 语句必须以分号(;)分隔。

2.SQL 语句不区分大小写,因此 SELECT 与 select 是相同的。同样,写成 Select 也没有关系。许多 SQL 开发人员喜欢对 SQL 关键字使用大写,而对列名和表名使用小写,这样做代码更易于阅读和调试。但是表名、列名和值可能有所不同(这有赖于具体的 DBMS 及其如何配置)。

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

2.2 检索多个列

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

SELECT prod_id, prod_name, prod_price
FROM Products;

        SQL 语句一般返回原始的、无格式的数据,不同的 DBMS 和客户端显示数据的方式略有不同(如对齐格式不同、小数位数不同)。数据的格式化是表示问题,而不是检索问题。

2.3 检索所有列

SELECT *
FROM Products;

其中*是通配符

2.4 检索不同的值

输入:

SELECT vend_id
FROM Products;

输出:

vend_id
----------
BRS01
BRS01
BRS01
DLL01
DLL01
DLL01
DLL01
FNG01
FNG01

使用在SELECT的同时使用DISTINCT关键字:

SELECT DISTINCT vend_id
FROM Products;

输出:

vend_id
----------
BRS01
DLL01
FNG01

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

SELECT DISTINCT prod_id, prod_name, prod_price
FROM Products;

此时DISTINCT同时作用于prod_id,prod_name,prod_price。

2.5 限制结果

各种数据库中的这一 SQL 实现并不相同

例如,SQL Server中,限制最多返回5行

SELECT TOP 5 prod_name
FROM Products;

2.6 使用注释

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

注释使用 -- (两个连字符)嵌在行内。-- 之后的文本就是注释

SELECT prod_name    /* 这是一条注释 */
FROM Products;

注释从 /* 开始,到 */ 结束,/* 和 */ 之间的任何内容都是注释。

3.排序检索数据

3.1 排序数据

        SQL 语句由子句(clause)构成,有些子句是必需的,有些则是可选的。一个子句通常由一个关键字加上所提供的数据组成。例如SELECT语句中的FROM子句

        为了对SELECT语句检索出的数据进行明确地排序,可使用ORDER BY子句——指示DBMS软件对某列/若干列以字母顺序排序。例如

输入:

SELECT prod_name
FROM Products;

输出:

prod_name
--------------------
Fish bean bag toy
Bird bean bag toy
Rabbit bean bag toy
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear
Raggedy Ann
King doll
Queen doll

输入:

SELECT prod_name
FROM Products
ORDER BY prod_name;

输出:

prod_name
--------------------
12 inch teddy bear
18 inch teddy bear
8 inch teddy bear
Bird bean bag toy
Fish bean bag toy
King doll
Queen doll
Rabbit bean bag toy
Raggedy Ann

:在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出错。

3.2 按多个列排序

        经常需要按不止一个列进行数据排序。例如,如果要显示雇员名单,如果多个雇员有相同的姓,可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序)。

输入:

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;

输出:

prod_id     prod_price     prod_name
-------     ----------     --------------------
BNBG02      3.4900         Bird bean bag toy
BNBG01      3.4900         Fish bean bag toy
BNBG03      3.4900         Rabbit bean bag toy
RGAN01      4.9900         Raggedy Ann
BR01        5.9900         8 inch teddy bear
BR02        8.9900         12 inch teddy bear
RYL01       9.4900         King doll
RYL02       9.4900         Queen doll
BR03        11.9900        18 inch teddy bear

:以上输出中,仅在多个行具有相同的 prod_price 值时才对产品按 prod_name 进行排序。如果 prod_price 列中所有的值都是唯一的,则不会按 prod_name 排序。

3.3 按列位置排序

输入:

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2, 3;

:ORDER BY 2 表示按 SELECT 清单中的第二个列 prod_price 进行排序。ORDER BY 2,3 表示先按 prod_price,再按 prod_name 进行排序。

3.4 指定排序方向

        数据排序默认从A到Z的排序方向(升序),为了进行降序排序,可以指定DESC关键字(DESC是DESCENDING的缩写,二者有相同的效用)。例如

输入:

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;

输出:

prod_id     prod_price     prod_name
-------     ----------     --------------------
BR03        11.9900        18 inch teddy bear
RYL01       9.4900         King doll
RYL02       9.4900         Queen doll
BR02        8.9900         12 inch teddy bear
BR01        5.9900         8 inch teddy bear
RGAN01      4.9900         Raggedy Ann
BNBG02      3.4900         Bird bean bag toy
BNBG01      3.4900         Fish bean bag toy
BNBG03      3.4900         Rabbit bean bag toy

DESC 关键字只应用到直接位于其前面的列名。在上例中,只对 prod_price 列指定 DESC,对 prod_name 列不指定。因此,prod_price 列以降序排序,而 prod_name 列(在每个价格内)仍然按标准的升序排序。

4.测试题

1.编写 SQL 语句,从 Customers 中检索所有的顾客名称(cust_names),并按从 Z 到 A 的顺序显示结果。

SELECT cust_name
FROM Customers
ORDER BY cust_name DESC;

2.编写 SQL 语句,从 Orders 表中检索顾客 ID(cust_id)和订单号(order_num),并先按顾客 ID 对结果进行排序,再按订单日期倒序排列。

SELECT cust_id, order_num
FROM Orders
ORDER BY cust_id, order_date DESC;

3.显然,我们的虚拟商店更喜欢出售比较贵的物品,而且这类物品有很多。编写 SQL 语句,显示 OrderItems 表中的数量和价格(item_price),并按数量由多到少、价格由高到低排序。

SELECT quantity, item_price
FROM OrderItems
ORDER BY quantity DESC, item_price DESC;

4.下面的 SQL 语句有问题吗?(尝试在不运行的情况下指出。)

SELECT vend_name,
FROM Vendors
ORDER vend_name DESC;

vend_name后面多了逗号,ORDER后面缺少BY。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DUANDAUNNN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值