基本SQL查询

本文深入解析SQL查询语句的使用方法,涵盖SELECT语句的基本语法、运算操作、聚合函数应用、分组与排序技巧。从简单查询到复杂数据处理,帮助读者掌握高效的数据检索技能。
部署运行你感兴趣的模型镜像

当在数据库的表中存入数据后,就可以查询这些已经存入的数据。下面学习基本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;

 

转载于:https://www.cnblogs.com/zhouyeqin/p/7299431.html

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

【完整课程列表】 oracle_系统表.pdf 超详细Oracle数据库开发教程 共115页.pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf 数据库开发 Oracle数据库 SQL开发教程 第06章 分组函数(共41页).pdf 数据库开发 Oracle数据库 SQL开发教程 第07章 子查询(共49页).pdf 数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf 数据库开发 Oracle数据库 SQL开发教程 第11章 数据操作与事务控制(共52页).pdf 数据库开发 Oracle数据库 SQL开发教程 第12章 Oracle数据库网络连接(共39页).pdf 数据库开发 Oracle数据库 SQL开发教程 第13章 创建和维护表(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf 数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限和角色(共28页).pdf
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值