SQL必知必会(三)

简介: 作用是从一个或多个表中检索信息

SELECT语句

作用是从一个或多个表中检索信息

检索单个列


SELECT column FROM table;


该SQL语句的意思从某表中检索某一字段(列)的数据

注意:

1.SQL语句必须以分号作为结束标识,尤其在执行多条SQL语句的时候

2.SQL不区分大小写,这里根据开发习惯来规定,一般情况下用大写

3.在处理SQL语句,其中所有空格都会被忽略,一般建议通过空格或者换行方便阅读和调试

检索多个列


SELECT column1,column2,column3 FROM table;


跟检索单个列不同的是,我们需要将要查的列用逗号分割开(最后一个字段后面不加都好)

检索全部列

这里我们用通配符*来实现检索全部列


SELECT * FROM table;


通配符*标识返回全部列,列的顺序一般是表中定义的物理顺序

注意:

1.我们开发中坚决杜绝使用通配符去查找所有列(敲黑板!!!),如果需要查询所有字段,我们必须一个一个把字段全部写出去进行查找。使用通配符*会极大降低SQL执行性能

2.开发的原则是需要什么数据去拿什么数据,不去拿跟业务无关的数据以消耗磁盘IO

检索不同的值


SELECT DISTINCT column FROM table;


DISTINCT关键字表示数据库只返回不同的值

注意:

DISTINCT作用于所有列。如果是检索多行数据,使用DISTINCT会检索过滤这几个字段全部都相同的字段,后续随着进度的深入会补充对应的优化方案

限制返回结果

SQLServer、Oracle、Mysql对这部分限制语法有各自的写法未做统一,这里采用Mysql的语法进行解释


SELECT * FROM table LIMIT 1,1;


该SQL语句的意思是返回从第1行开始一共1行数据

注意:LIMIT 1,1中第一个被检索行元素下标是从第0行开始的,因此第一行是从0开始,1实际上在数据库中表示的是第2行

检索排序

本质上,检索的数据并不是随机显示的,如果不排序,数据一般将会按照它底层表中出现的顺序进行显示,有可能会是数据最初添加的顺序。但是如果数据随后进行过更新或删除,那么这个顺序有可能不依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有任何意义。

ORDER BY

通常我们使用ORDER BY来实现对检索结果的排序


SELECT * FROM table ORDER BY column;


该SQL语句表示查询结果根据column进行排序

注意:

1.ORDER BY子句的位置,在指定一条ORDER BY子句时,应该保证它是SELECT语句的最后一条语句,如果不是最后的语句,将会出现错误消息

2.通常我们是选择使用要显示的列进行排序,但是实际上并不一定要这样,用非检索的列排序也是完全可以的

按多个列进行排序


SELECT * FROM table ORDER BY column1,column2;


指定列名,列名之间用逗号隔开即可。

我们需要注意的是,按多个列进行排序的时候,排序的顺序按照顺序进行规定,如果出现相同的column1,则开始使用column2进行排序,否则默认还是从第一个字段开始排序

指定排序方向

ORDER BY默认采用升序排序(ASC),如果想要采用降序排序,我们可以使用关键字DESC


SELECT * FROM table ORDER BY column DESC;


注意:

1.DESC只作用到位于其前面的列名

2.对于多个字段排序,如果要在每一列进行降序排序,必须每个字段指定DESC关键字

相关文章
|
SQL 网络协议 数据库
sql总结喔
sql总结喔
|
8天前
|
SQL
SQL IN
【11月更文挑战第05天】
22 5
|
6月前
|
SQL 存储 数据管理
SQL
SQL
40 0
|
3月前
|
SQL 数据库 开发者
SQL中为什么不要使用1=1?
【8月更文挑战第11天】在SQL查询语句中,偶尔会遇到使用1=1作为WHERE子句一部分的情况,这种做法看似无害,实则隐藏着一些潜在的问题和更好的替代方案。本文将深入探讨为什么不建议在SQL中使用1=1,并分享更优化的查询构建策略。
83 2
|
6月前
|
SQL 存储 关系型数据库
sql日常总结
sql日常总结
|
6月前
|
SQL 数据库 索引
八、SQL-Limite
八、SQL-Limite
47 0
|
SQL
SQL日常
SQL日常
120 0
|
SQL Go 移动开发
常用SQL收藏
原文:常用SQL收藏 MSSQL Split表字段 --拆分字符串之后匹配结果集合 CREATE FUNCTION [dbo].[fnSplit]( @sInputList VARCHAR(8000) -- List of delimited items , @sDelimi...
784 0