栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号