当在数据库的表中存入数据后,就可以查询这些已经存入的数据。下面学习基本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. HDOJ1796 How many integers can you find(dfs+容斥)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. dwr异常处理

    配置异常转换器: dwr.xml: <!-- 异常转换 --> <convert match="java.lang.Exception" converter=&q ...

  3. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第8章节--配送SP2013Apps 总结

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第8章节--配送SP2013Apps 总结         SP商店提供开发者和ISVs权限訪问潜在地世界各地成百上千的S ...

  4. vmware mac 分辨率设置

    1.安装vmware tool 2.关闭虚拟机,在设置中找到显示器项 3.选中“加速3D图形” 4.在监视器中,选中 指定监视器设置,使用任意分辨率 5.如果没有可用分辨率,手动输入,例如 1680* ...

  5. Working with macro signatures

    https://docs.kentico.com/k11/macro-expressions/troubleshooting-macros/working-with-macro-signatures ...

  6. RBF网络——核心思想:把向量从低维m映射到高维P,低维线性不可分的情况到高维就线性可分了

      RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理. ...

  7. [xPlugin] smartupload jsp图片上传

    URL:http://www.cnblogs.com/ISeeYouBlogs/p/jsp.html 1.要实现图片上传,首先需要一个组件,这里我用的是smartupload.jar可以到这里下载ht ...

  8. 大数字运算——1、BigInteger

    package com.wh.BigInteger; import java.math.BigInteger; import java.util.Arrays; /** * @author 王恒 * ...

  9. 洛谷P2391 白雪皑皑(并查集)

    题目背景 “柴门闻犬吠,风雪夜归人”,冬天,不期而至.千里冰封,万里雪飘.空中刮起了鸭毛大雪.雪花纷纷,降落人间. 美能量星球(pty 在 spore 上的一个殖民地)上的人们被这美景所震撼.但是 p ...

  10. android黑科技系列——实现静态的默认安装和卸载应用

    一.访问隐藏的API方式进行静态的默认安装和卸载 1.系统安装程序 android自带了一个安装程序—/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用 ...