基本SQL查询
当在数据库的表中存入数据后,就可以查询这些已经存入的数据。下面学习基本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 使用DISTINCT和UNIQUE删除重复列
希望查看一下客户分布在那些地区:
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查询的更多相关文章
- SQL常见优化Sql查询性能的方法有哪些?
常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...
- 记一个简单的sql查询
在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...
- Oracle常用SQL查询(2)
三.查看数据库的SQL 1 .查看表空间的名称及大小 select t.tablespace_name, round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...
- SQL查询第m条到第n条的方法
SQL查询第m条到第n条的方法 如表名为GOOD Sselect top (n-m) * from GOODS where (某一列名) not in (select top m (某一列名) fro ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- slick for play 使用原生sql查询以及拼接sql
在play中用函数式框架slick来操作数据库是一件很爽的事情.但有时因为某些特殊场景又不得不用原生的sql了. 还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL ...
- SQL查询每个表的字段数量
--SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...
- SQL查询关于相对路径、矢代、绝对路径、递归、计算列的速度对比跟优化-SOD群记录
1秒查原本递归的查询. 适用于:上下级.多层查询 -- Get childs by parent id WITH Tree AS ( SELECT Id,ParentId FROM dbo.Node ...
- ThinkPHP(3)SQL查询语句
ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...
随机推荐
- 某P2P开发商ERP系统核心业务介绍
之前说到.某软件公司卖P2P系统的后台管理系统.号称"ERP",今天继续说说这个ERP的核心业务. 业务1:贷款审批流程 贷款审批.主要是针对线下人员的 ...
- 0x61 最短路
终于会dij了原来我以前写的也是堆优化spfa-_-! poj3662DP 通过spfa来放缩(可怜我去年NOIP的day1t3啊) #include<cstdio> #include&l ...
- Build website project by roslyn through devenv.com
1.fetch the source code2.compile controls project3.copy files under bin folder of controls to bin fo ...
- nyoj--491--幸运三角形(dfs)
幸运三角形 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成('+'或者'-'),图形的最上层有n个符号,往下个数依次减一,形成倒置的 ...
- 05.使用jdk发布webservice服务
无论服务端是用什么写的,使用框架写的还是用jdk写的,它都会发布出来这样一个东西.主要你遵循咱们这七个步骤来走就可以调用了. 咱们现在转换一下角色,自己发布一个服务让别人去调.怎么来发布一个服务? 我 ...
- Java IO-InputStream家族 -装饰者模式
最近看到一篇文章,初步介绍java.io.InputStream,写的非常通俗易懂,在这里我完全粘贴下来. 来源于 https://mp.weixin.qq.com/s/hDJs6iG_YPww7ye ...
- HDU1412 {A} + {B}
2019-05-17 10:15:01 每个元素之间有一个空格隔开. 每行最后一的元素后面没有空格,区别于HDU人见人爱A - B 注意使用STL的时候要清空 . a.clear(); #inclu ...
- 如何用jQuery实现div随鼠标移动而移动?(详解)----2017-05-12
重点是弄清楚如何获取鼠标现位置与移动后位置,div现在位置与移动后位置: 用jQuery实现div随鼠标移动而移动,不是鼠标自身的位置!!而是div相对于之前位置的移动 代码如下:(注意看绿色部分的解 ...
- Java集合(一)HashMap
HashMap 特点: HashMap的key和value都允许为空,无序的,且非线程安全的 数据结构: HashMap底层是一个数组,数组的每一项又都是链表,即数据和链表的结合体.当新建一个Hash ...
- 动画库animate.css的用法
简介 animate.css是一个来自国外的 CSS3 动画库,它预设了引起弹跳(bounce).摇摆(swing).颤抖(wobble).抖动(shake).闪烁(flash).翻转(flip).旋 ...