SQL回炉重造02_数据检索_SELECT&ORDERBY

10 篇文章 0 订阅

查询

  • SELECT语句:SELECT语句的用途是从一个或多个表中检索数据,需要给出两条信息:选择什么&&从什么地方选择。

1. 检索数据基础——SELECT语句

1.1 检索单个列
  • 语法:
SELECT colName
FROM tableName;
  • 数据顺序:在没有指定查询排序结果的情况下,返回数据的顺序是没有特殊意义的

  • 结束SQL语句:多条SQL语句需要以分号(;)结尾

    • 注意:某些DBMS可能需要每一句单句SQL语句结尾都要加分号
  • SQL语句大小写:SQL语句实际上是不区分大小写的,也即select与SELECT是一样的;但习惯而言,开发者往往喜欢对SQL关键字使用大写,而对所有列和表名使用小写从而使代码易于阅读和调试。

  • 忽略空格:在处理SQL语句时,所有的空格都会被忽略,可以将较长的语句拆分成多行以便阅读和调试。

1.2 检索多个列
  • 语法:
SELECT col1Name,col2Name,col3Name...
FROM tableName;
  • 注意逗号:在检索多个列时,需要在列名之间加上逗号,但最后一个列名不需要加。
1.3 检索所有列——使用通配符*
  • 语法:
SELECT *
FROM tableName
  • 使用通配符:一般情况下,除非确实需要表中的所有列,应该尽量避免使用通配符*。检索不需要的列通常会减低检索和应用程序的性能。
  • 通配符优点:由于不明确指定列名,所以使用通配符可以检索出名字未知的列
1.4 检索不同的行——DISTINCT关键字
  • 使用DISTINCT关键字去除重复值,指示MySQL只返回不同的值
  • 注意:不能部分使用DISTINCT:DISTINCT关键字作用于所有列而不仅仅是前置它的列,换言之,如果给出多个选择列,除非某些行的值在所有列中都有重复,否则所有行都会被检索出来。
  • 语法:
SELECT DISTINCT colName
FROM tableName;
1.5 限制检索结果——LIMIT子句
  • 使用LIMIT子句返回第一行或者前几行
  • 语法:
# 选取前5行
SELECT colName
FROM tableName
LIMIT 5;

# 选取从行5开始的5行
SELECT colName
FROM tableName
LIMIT 5,5;
  • 注意
    • 行n:索引是从0开始的,所以第一行是行0而不是行1;因此,LIMIT 1,1检索出来的是表的第二行而非第一行。
    • 行数不够时,返回剩下的所有行。
    • LIMIT的替代用法:LIMIT 3,4含义是从行3开始的4行;在MySQL5之后,支持使用LIMIT 4 OFFSET 3来替代上述用法。
1.6 使用完全限定的表名
  • 使用完全限定的名字来引用列(同时使用表名和列字)/表名
# 完全限定的列名
SELECT tableName.colName
FROM tableName;

# 完全限定的表名
SELECT tableName.colName
FROM dataBaseName.tableName;

2. 排序检索数据——ORDER BY子句

  • 子句(clause):SQL语句是由子句构成的,有些子句是必须的,而有些则是可选的。一个子句通常是由一个关键字和所提供的数据组成。

  • 注意:由SELECT语句直接检索出来的数据并不是以纯粹的随即顺序显示的。**如果不排序,数据一般将以它在底层表中出现的顺序显示。**这个顺序可以是最初添加到表中的顺序,但是如果数据后来进行过更新或者删除,则顺序会受到MySQL重用回收存储空间的影响。因此,如果不明确控制顺序,则认为检索出来的数据顺序没有意义。

  • ORDER BY子句:为了明确地排序用SELECT语句检索出的数据,可以使用ORDER BY子句。它选取一个或多个列的名字,据此对输出进行排序。

    • 通常,ORDER BY子句使用的列为检索列,但是使用非检索列进行数据排序也是完全合法的
  • 语法:

SELECT colName
FROM tableName
ORDER BY colName;
2.1 按多列进行排序
  • 在实际运用中,我们可能需要使用多列进行排序(如先按姓氏排序,再按名字排序)。但值得注意的是,只有在对于前一个排序列,多个行有相同值时,后一个排序列才是有意义的。(例如如果没有姓氏相同的行,那么只会按姓氏排序,后续用名字排序是没有意义的)

  • 语法:

SELECT colName
FROM tableName
ORDER BY colName1,colName2...;
2.2 指定排序方向——DESC、ASC关键字
  • 排序顺序默认为升序排列(ASC关键字ASCENDING,其实这个关键字没啥用,因为默认就是升序),如要使用降序排列,则需要使用DESC关键字
    • 多个列降序排序:DESC关键字只作用在位于它前面的列名,如果要在多个列上指定降序排序必须为每个列指定DESC关键字
    • 区分大小写和排序顺序:在MySQL中,使用默认字典排序顺序,也即大小写字母是视为相同的,如果需要更改这种排序顺序,简单的ORDER BY子句是做不到的,需要请求数据库管理员的帮助。
    • 子句的顺序:在给出ORDER BY子句时,应该确保它在FROM子句后面;如果要使用LIMIT子句,则要保证它在ORDER BY子句后面。子句顺序不对会报错!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值