当在数据库的表中存入数据后,就可以查询这些已经存入的数据。下面学习基本SQL查询

本节要点:

  • l  如何使用select语句

    • Select语句的语法
    • SELECT语句中的运算
    • 使用DISTINCT和UNIQUE删除重复列
    • Oracle伪列
  • l  聚合函数、分组和排序
    • 聚合函数
    • 分组函数
    • HAVING子句
    • ORDER BY字句

1          如何使用select语句

Select关键字表示数据的检索,它是由一系列的字句组成。

1.1          Select语句的语法

查询语句中SELECT、FROM、WHERE等是关键字,关键字开始的每一部份都称为一个子句。

语法:

SELECT [DISTINCT|UNIQUE](*,columnname[AS alias],…)

FROM tablename

[WHERE condition]

[GROUP BY group_by_expression]

[HAVING group_condition]

[ORDER BY columnname];

SELECT语句的要点以下几点:

  • l  SELECT语句必需的子句只有SELECT和FROM
  • l  方括号表示可选部分
  • l  可以在几行或一行上输入SQL语句。大多数SQL语句的输入方式都是一个子句占据单独的一行,以便提高可读性,并且使编辑变得更容易。

1)         选择表中的所有数据

SELECT * FROM customers;

2)         从表中选择一列

在Oracle中,可以只在结果中返回特定的列。SELECT语句中选择特定列被称为“投影(projection)”。可以选择表中的一列,也可以选择多个列或者是所有的列。比如要查看数据库中所有图书的名称,我们查询BOOKS表中的TITLE字段:

SELECT title FROM books;

3)         从表中选择多个列

SELECT子句中指定多个列时,应该使用逗号将列出的列分开,输出结果中的顺序,按SELECT子句中列出列的顺序。可以加入空格来提高可读性。

SELECT title, pubdate FROM books;

1.2          SELECT语句中的运算

  • l  使用别名

使用“列别名”来代替在查询结果中显示的列名称。如果显示数据库中存储的所有图书的列表,那么你可能想要将列标题显示为“Title of Books”,可以在SELCECT子句中列名称的后面列出列别名。

SELECT title AS “Title of Books”,category FROM books;

注意:可选关键字AS,以便区分列名称和列别名。在使用别名时,须要记住:如果列名称包含空格、特殊符号、或者你不希望全部以大写字母显示它,那么必须将它包括在“”中。如果只包括一个单词,则不需要“” 。

  • l  使用算数运算

SELECT子句中可以使用+,-,*,/这样的算术运算,Oracle中遵循以下算术运算:

    • 在算术等式中从左向右计算,首先计算任何乘法和除法。
    • 在进行乘法和除法之后才计算任何加法和减法,也是在等式中从左向右进行计算。
    • 可以使用括号覆盖计算顺序

实例:希望获取每本书所产生的利润。Books表包含两个可以用来计算利润的字段:Cost和Retail。一本书的利润是书店为该书支付的金额(成本)与书的销售价格(零售价)之间的差值。我们为计算出的字段指定一个别名。

SELECT title,retail-cost profit FROM books;

1.3          使用DISTINCTUNIQUE删除重复列

希望查看一下客户分布在那些地区:

SELECT DISTINCT state FROM customers;

SELECT UNIQUE state FROM customers;

1.4          Oracle伪列

Oracle 中伪列就像一个表列,但是它并没有存储在表中;伪列可以从表中查询,但不能插入、更新和删除它们的值;常用的伪列有ROWID和ROWNUM:

  • ROWID 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行
  • ROWNUM 是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数

2          聚合函数、分组和排序

2.1          聚合函数

组函数也称为“聚合函数”,他们处理每一组行并返回一个结果 。如Oracle中常用的聚合函数:SUM 、AVG 、COUNT 、MIN 、MAX 。

1)         SUM函数

用来计算存储在一组记录的某个数字字段中的总数量

SELECT SUM(retail-cost) 总利润FROM books  WHERE category=‘Computer’;

2)         AVG函数

计算指定列中的数值的平均值

SELECT AVG(retail-cost) "Average Profit" FROM books WHERE category ='COMPUTER';

3)         COUNT函数

返回指定字段中包含一个值的行数。字段中包含NULL值的行不会包括在结果中。

要想计算包含NULL值的行,使用*而不是字段名称。

SELECT COUNT(*) FROM books;

或者

SELECT COUNT(shipdate) FROM orders;

查询图书不同种类的数量:

SELECT COUNT(DISTINCT category) FROM books;

注意:查询未发货的订单——打印发货日期是NULL值的所有订单列表:

SELECT COUNT(*) FROM orders WHERE shipdate IS NULL;

容易犯错的写法 :

SELECT COUNT(shipdate) FROM orders WHERE shipdate IS NULL;

4)         MAX函数

返回在指定列中存储的最大值 。

返回一本书所产生的最大利润:

SELECT MAX(retail-cost) "Highest Profit" FROM books;

5)         MIN函数

返回在指定列的最小值 。

查找BOOKS表中存储的所有图书中的出版日期最早的图书:

SELECT MIN(pubdate) FROM books;

2.2          分组函数

上面聚合函数是对于所有记录进行聚合的,有时候我们需要先对记录分组再进行聚合。对记录的分组是通过关键字GROUP BY实现的,如GROUP BY F1,F2,F3,则当且仅当两条记录在所有属性F1,F2,F3上达成一致,它们才是同一组的。

求每一类图书的平均利润

SELECT category,TO_CHAR(AVG(retail-cost), '999.99') profit

FROM books

GROUP BY category;

使用GROUP BY子句时要注意:

  • l  如果在SELECT 子句中使用一个组函数,那么在SELECT子句中列出的任何单独的列必须在GROUP BY子句中列出。
  • l  用来在GROUP BY子句中分组数据的列不必在SELECT子句中列出,在SELECT子句中包括它们只是为了在输出中指定组。
  • l  不能在GROUP BY子句中使用列别名
  • l  从包括GROUP BY子句的SELECT语句返回的结果将以在GROUP BY子句中列出的列的升序显示结果,要想以不同的顺序显示结果,可以使用ORDER BY子句

2.3          HAVING子句

用来限制一个查询返回的组。HAVING子句指定了那些组将显示在结果中。换句话说HAVING子句充当了组的WHERE子句。

显示平均利润超过15美元的图书的种类:

SELECT category,TO_CHAR(AVG(retail-cost), '999.99') Profit

FROM books

GROUP BY category

HAVING AVG(retail-cost)>15;

2.4          ORDER BY子句

用来按某个顺序显示查询结果

语法:

SELECT [DISTINCT|UNIQUE](*,column[AS alias],…)

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[HAVING group_condition]

[ORDER BY column [asc|desc]];

查看按Name升序排序的所有的出版社的列表:

SELECT * FROM publisher ORDER BY name;

注:升序使用asc ,降序使用desc,默认是asc。

ORDER BY子句只指定一列时,我们称为“主排序”,如果主排序中的两行或更多行完全相同,那么次排序提供了另一个进行排序的字段。 查询按州降序排列的客户,有多个居住在某个特定州的客户时,将按城市的升序对客户排序:

SELECT lastname,firstname,city,state

FROM customers

ORDER BY state desc,city;

基本SQL查询的更多相关文章

  1. SQL常见优化Sql查询性能的方法有哪些?

    常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...

  2. 记一个简单的sql查询

    在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...

  3. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

  4. MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?

    如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...

  5. SQL查询第m条到第n条的方法

    SQL查询第m条到第n条的方法 如表名为GOOD Sselect top (n-m) * from GOODS where (某一列名) not in (select top m (某一列名) fro ...

  6. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  7. slick for play 使用原生sql查询以及拼接sql

    在play中用函数式框架slick来操作数据库是一件很爽的事情.但有时因为某些特殊场景又不得不用原生的sql了. 还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL ...

  8. SQL查询每个表的字段数量

    --SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...

  9. SQL查询关于相对路径、矢代、绝对路径、递归、计算列的速度对比跟优化-SOD群记录

    1秒查原本递归的查询. 适用于:上下级.多层查询 -- Get childs by parent id WITH Tree AS ( SELECT Id,ParentId FROM dbo.Node ...

  10. ThinkPHP(3)SQL查询语句

    ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...

随机推荐

  1. 通用扩展函数之TypeParse

    代码实现: ".TryToInt();//转换为int失败返回0 var int2 = "2x".TryToInt(); );//转换为int失败返回1 ); " ...

  2. php错误抑制符

    php错误抑制符 简介 PHP 支持一个错误控制运算符:@.当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉. @这个符号在Java里面是注解符号. 实例 <?ph ...

  3. global cache cr request

    当一个进程访问需要一个或者多个块时,它会首先检查自己的CACHE是否存在该块,如果发现没有,就会先通过global cache赋予这些块 共享访问的权限,然后再访问.假如,通过global cache ...

  4. Windows Server 2012 / 2016 安装 .Net Framework 3.5(PowerShell)

    原文链接:https://www.muhanxue.com/essays/2017/04/3736598.html 问题描述 使用 Windows Server 2012 R2 或 Windows S ...

  5. [CSharp] C#开源大全

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  6. Solr快速入门(一)

    概述 本文档介绍了如何获取和运行Solr,将各种数据源收集到多个集合中,以及了解Solr管理和搜索界面. 首先解压缩Solr版本并将工作目录更改为安装Solr的子目录.请注意,基本目录名称可能随Sol ...

  7. pinpoint体系中,关于如何清理过期hbase数据

    版本: pinpoint:1.7.1 hbase:1.2.6 命令行命令: $HBASE_HOME/bin/hbase shell    newrestruct.hbase 备注:保留一天半的数据(秒 ...

  8. window 10 多版本激活工具

    window 10 通用版激活工具 云盘地址:https://pan.baidu.com/s/1bo3L4Kn 激活工具网站:http://www.tudoupe.com/win10/win10jih ...

  9. Android学习——Button填充颜色及实现圆角

    在drawable下新建文件夹bt_shape.xml,如下: <?xml version="1.0" encoding="utf-8"?> < ...

  10. 算法 之 3n+1问题

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...