当在数据库的表中存入数据后,就可以查询这些已经存入的数据。下面学习基本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. linux高级技巧:rsync同步(二)

    1.配置两个节点同步         上个帖子已经展示了同步一个主机的方法.这次我们再加入一个要同步的主机. 方法上并无二质.         1.首先显示我们的控制台:                ...

  2. Tomcat容器 web.xml具体解释

    <init-param> <param-name>debug</param-name> <param-value>0</param-value&g ...

  3. UVA 4855 Hyper Box

    You live in the universe X where all the physical laws and constants are different from ours. For ex ...

  4. DevExpress14.1.2 xe XE6 高速安装

    之前在在网上下载的DevExpress14.1.2 xe-XE6都是一个个包文件.须要一个个去查找编译安装,并且须要有一定的顺序要求. 所下面载了好久了都没有安装. 近期在网上找了个旧版的安装方法.以 ...

  5. oc2---类

    // main.m // 第一个OC类,OC中的类其实本质就是一个结构体, 所以p这个指针其实就是指向了一个结构体,创建一个对象就是创建一个结构体指针, #import <Foundation/ ...

  6. bzoj2260: 商店购物&&4349: 最小树形图

    最小树形图问题啊 最小树形图是撒哩,就是给你一个有向图,确定一个根,要你到达所有点,那棵最短路径树的总边权 做这个用的是朱(jv)刘(lao)算法. 首先假如有多个联通块就无解啦 对应每个点(除了根) ...

  7. spark rdd median 中位数求解

    lookup(key) Return the list of values in the RDD for key key. This operation is done efficiently if ...

  8. DNS Tunneling及相关实现——总之,你发起攻击都需要一个DNS server,下载一些工具作为client发起数据,server收集数据并响应

    摘自:http://www.freebuf.com/sectool/112076.html DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DNS协议中传输建立通信.因为在我们的网络 ...

  9. computed与methods的异同

    在vue.js中,有methods和computed两种方式来动态当作方法来用的 如下: 两种方式在这种情况下的结果是一样的 写法上的区别是computed计算属性的方式在用属性时不用加(),而met ...

  10. cloudfoundry service broker 制作

    实验室这边需要制作service broker.从今天开始将精力投入其中.