SQL检索语句

SQL语言 专栏收录该内容
1 篇文章 0 订阅

数据库学习日记
*

第一章 认识数据库*

1、数据库的概念

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

2、数据库管理系统

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

3.1、

表是指某种特定类型数据的结构化清单,可以用来存储某种特定类型的数据。表具有一些特性,这些特性定义了数据在表中如何存储,包括存储什么样的数据,数据如何分解,各部分信息日和命名等信息。描述表的这组信息就是所谓的**模式**,模式可以用来描述数据库中特定的表,也可以用来描述整个数据库。

3.2 表名

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

4、列和数据类型

*
**列**-----列中的一个字段,所有表都是由一个或者多个列组成的。
  分解数据:正确的将数据分解为多个列极其重要。通过分解这些数据才有可能利用特定列对数据进行分类和过滤。

5 、 数据类型

所允许的数据类型,每个表列都有相应的数据类型,它限制该列中存储的数据。

6 、-----表中的一个记录

7、 主键-----表中的每一行有应该有一列(或几列)可以唯一的标识自己。

	提示:虽然并不总是需要定义主键,但多数数据库设计者都会保证他们创建的每个表都具有一个主键,以便于以后的数据操作和管理。
表中的任何列都可以作为主键,只要他满足一下的条件:
1 任意两行都不具有相同的主键值。
2 每一行都必须有主键值
3 主键值不允许修改或者更新;
4 主键值不能重用(如果某行从表中删除,它的主键不能赋值给以后的新行)。

8、 外键(暂时略过,后续补充)。

SQL(发音为:S-Q-L或者是sequel )是Structured Query Language (结构化查询语言的缩写)

9 、SQL语句对大小写不敏感

第二章 检索数据

2.1 SELECT 语句

关键字(keyword)---作为SQL组成部分的**保留字**。

2.1.1 检索单个列

格式: **SELECT 列名(1)	FROM 表名(A);	#(SQL语句必须以分号结尾,在MySQL中使用‘#’做注释符)
含义: 表示从 'A'这张表中查询列名为‘1’的记录。
注意:查询结果的排列顺序可能与原始数据不同,这是没有指定对数据进行排序,是正常的。SQL语句的结尾处必须使用分号(英文状态下的),SQL语句不区分大小写,但是不意味着表名,列名也不区分,要注意上述句子的含义。在SQL中所用的空格将被忽略,例如下面这个例子:
例1: 	SELECT 列名					例2:	SELECT 列名 FROM 表名;
			FROM 表名;
例3:   select  列名	from 表名;	例4 		select 列名	FROM 表名;
例1与例2是完全等价的,但是为了程序阅读方便,最好将语句分开写,避免写在一行,不便于程序的维护。由于SQL语句对大小写不敏感,所以例3与例4与例1和例2是完全等价的。虽然SQL语句对大小写不敏感,但是为了程序方便维护,尽量建议对SQL语句进行大写。

2.1.2 检索多个列

格式:   **SELECT  	列名1,列名2,列名3···	  FROM  表名A;
含义:表示从 A这张表中查询列名为1,2,3···多列记录。(每个要查询的列之间使用英文状态下的分号分隔)
例如:   SELECT  prod_id,prod_name,prod_price FROM Products;
表示我从Products 这张表之中查找列为 prod_id ,prod_name,prod_price 这三列的数据(注意:查询结果是按照查询语句的顺序来显示的,并非原始的列之间的顺序)。

2.1.3 检索所有列

**格式: SELECT * FROM  表名;  使用通配符 * 检索表中的每一列元素。
  注意:一般而言,除非你确实需要表中的每一列,否则最好别使用通配符 (*),虽然使用通配符能让你自己省事,但检索不需要的列通常会降低检索和应用程序的性能。使用通配符有一个大优点,由于不明确指定列名,所以能检索出来名字未知的列。

2.1.4 检索不同的值

如果不想要检索出来的内容有重复该怎么办呢?使用**DISTINCT**关键字就可以去重。
格式: 	**SELECT   DISTINCT   列名1   FROM  表名A;**
含义,输出表名A中列名为1的项,但是结果中不会有重复的结果。
注意:不能部分的使用**DISTINCT**
	DISTINCT 关键字作用于所有的列,不仅仅是跟在其后的那一列,例如你指定
	SELECT DISTINCT  vend_id,prod_price,这两列不完全相同,DISTINCT作用于这两列。

2.1.5 限制结果

SELECT 语句返回指定列表中所有匹配的行,很可能是每一行,如果你只想返回一行或者一定数量的行,该怎么办呢?
每个数据库实现的方式并不相同
在**SQL Server和Access**中使用SELECT时,可以使用TOP关键字来限制最多返回多少行。
格式:**SELECT  TOP 5  列名  FROM   表名;**	含义:使用TOP 5表示结果中最多显示5行记录。

在DB2,可以使用如下语句来限制输出结果的行数
**格式: SELECT	  列名1   	 FROM   	表名A  	FETCH 	5 	ROWS	 ONLY;

	在Oracle中,需要基于ROWNUM来计算行,像这样:
**SELECT  列名1	FROM 	表名A	WHERE 	ROWUNM <=5;
在MySQL 、MariaDB、PostgreSQL、SQLite中需要使用LIMIT字句。像这样:
	**SELECT  列名1	FROM  	表名			LIMIT 	5;**
可见不同的数据库管理软件在实现同一功能的时候可能并不相同,值得我们关注。
上述代码使用SELECT 语句来检索单独的一列数据。LIMIT 5指示MySQL等DBMS返回不超过5行的数据,为了得到后面5行的数据,需要指定从哪开始以及检索的行数,像这样:
输入:
	**SELECT  prod_name  FROM  Products  LIMIT 5 OFFSET 4;**
	LIMIT 5  OFFSET 4指示MySQL等DBMS返回从第4行开始起的5行数据。
	第一个数字是检索的行数,第二个数字是指从哪开始。
	可以使用更为简洁的语句,如下所示:
	**SELECT prod_name	FROM	 Products		LIMIT 4,5;**
	上述代码与前面的LIMIT 5 OFFSET 4是等价的,他们输出结果完全相同。
	**注意:**第一个被检索的行是第0行而不是第1行,因此LIMIT 1 OFFSET 1 指的是检索表中的第2行,而不是第一行。

2.5.6 使用注释

SQL程序的开头处通常都会使用注释,来说明该程序的功能以及日期或者是作者的联系方式等。使用注释通常会使得程序变得更容易阅读。
在很多DBMS种,都支持各种各样的 注释语言,让我们先来看看行内注释:
SELECT prod_name			--这是一条注释
FROM  Products;
分析:注释使用 -- (两个连字符)嵌在行内。 -- 之后的文本就是注释。
下面是另一种形式的注释:
#这是一条注释
SELECT   prod_name	FROM 	Products;
在一行的开始处使用#,这一行都将成为注释。
当然,你也可以使用多行注释,如下面这个例子:
*****/*
SELECT  prod_name,vend_id 
FROM  Products;
*/
SELECT prod_name
FROM	Products;*****
注释是从/*开始,到 */结束的,/*和 */之间的内容都是注释。**

第三章 排序检索数据

3.1 排序数据

上面所使用的的检索语句输出结果并没有特定顺序,若要使得输出结果有序,就必须使用**ORDER BY** 关	键字来对检索的结果进行排序。
**字句:SQL语句有字句构成,有些字句是必须的,有些则是可选的。**
例如下面这个例子:
**SELECT  prod_name	FROM Products	ORDER BY  prod_name;**
表示对prod_name的列进行升序排序。
注意:ORDER BY 字句的位置
		在指定一条ORDER BY 字句时,**应该保证它是 SELECT 语句中最后一条字句**,如果它不是最后的子句,将会出现错误消息。
		提示:ORDER BY 子句中使用的列将是为显示而选择的列,但是也可是使用不显示的列作为排序的依据。

3.2 按多个列排序

上面显示的对单个列进行排序,实际上也可以对多个列进行排序。例如下面的这个例子:
SELECT prod_id,prod_price,prod_name	FROM	Products  ORDER BY 	prod_price,prod_name;
理解在按多行排序时,排序的顺序完全按规定进行。换句话说,对于上面的例子,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。

3.3 按列位置进行排序

除了能用列名指出排序顺序外,ORDER BY 还支持按相对列的位置进行排序。为理解这一内容,我们来看下面的这个例子:
SELECT  prod_id,prod_price,prod_name
FROM 	Products
ORDER BY 2,3;
SELECT清单中指定的是选择列的相对位置而不是列名。这么做的好处是可以不用重新输入列名,但坏处是当整个表的结构发生变化时,如果不对上面的相对位置进行改动,那么输出的结果可能不是你预期的结果。
	**提示:按非选择列排序**:显然,当根据不出现在SELECT清单中的列进行排序时,不能采用这项技术。但是,如有必要,可以混合实际列名与相对位置。如下面这个例子:
	**SELECT  prod_id,prod_price,prod_name FROM  Products	ORDER BY 2,prod_name;**
	这也是可行的。

3.4 指定排序的方向

	数据排序不限于升序排序(从A到Z),这只是默认的排序顺序。还可以使用ORDER BY 字句进行降序排序(从Z到A),为了进行降序排列,必须使用**DESC**关键字。
	例如下面的这个例子:
	 SELECT prod_id,prod_price,prod_name	FROM Products ORDER BY prod_price DESC;
	上面的这个例子为按照prod_price的降序对结果进行排序。
如果打算用多个列进行排序该怎么办?
下面这个例子将很好的阐述如果对多个列进行降序排列:
	SELECT prod_id,prod_price,prod_name FROM  ORDER BY prod_price DESC,prod_name;
上面的这个例子DESC作用于prod_price,对产品价格进行降序排列,在产品价格相同使用,对产品名进行升序排序。
	警告:如果想要在多个列上降序排列,不许对每一列指定DESC关键字。
请注意:DESC是DESCENDING的缩写,这两个关键字都可以使用。与DESC相对的是ASC(或者是ASCENDING),请在升序时可以指定它。但实际上,ASC没有多大用处,应为升序时默认的。

3.5 小结

这一课学习了如何使用SELECT语句的ORDER BY 字句对检索的数据进行排序,这个字句必须是SELECT 语句中的最后一条字句,根据需要,可以利用它在一个或多个列对数据进行排序。
  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值