oracle数据库之常用的函数练习
- 格式:pdf
- 大小:184.32 KB
- 文档页数:10
ORACLE_分析函数大全Oracle分析函数是一种高级SQL函数,它可以在查询中实现一系列复杂的分析操作。
这些函数可以帮助我们在数据库中执行各种数据分析和报表生成任务。
本文将介绍Oracle数据库中的一些常用分析函数。
1.ROW_NUMBER函数:该函数为查询结果中的每一行分配一个唯一的数字。
可以用它对结果进行排序或分组。
例如,可以使用ROW_NUMBER函数在结果集中为每个员工计算唯一的编号。
2.RANK和DENSE_RANK函数:这两个函数用于计算结果集中每个行的排名。
RANK函数返回相同值的行具有相同的排名,并且下一个排名值将被跳过。
DENSE_RANK函数类似,但是下一个排名值不会被跳过。
G和LEAD函数:LAG函数返回结果集中指定列的前一个(上一个)行的值,而LEAD函数返回后一个(下一个)行的值。
这些函数通常用于计算增长率或发现趋势。
4.FIRST和LAST函数:这两个函数用于返回结果集中分组的第一个和最后一个行的值。
可以与GROUPBY子句一起使用。
5.CUME_DIST函数:该函数用于计算给定值的累积分布。
它返回值的累积分布在结果集中的位置(百分比)。
6.PERCENT_RANK函数:该函数用于计算结果集中每个行的百分位数排名。
它返回值的百分位数排名(0到1之间的小数)。
7. NTILE函数:该函数用于将结果集分成指定数量的桶(Bucket),并为每个行分配一个桶号。
通常用于将数据分组为更小的块。
8.LISTAGG函数:该函数将指定列的值连接成一个字符串,并使用指定的分隔符分隔每个值。
可以用它将多个值合并在一起形成一个字符串。
9.AVG、SUM、COUNT和MAX/MIN函数:这些是常见的聚合函数,可以在分析函数中使用。
它们用于计算结果集中的平均值、总和、计数和最大/最小值。
以上只是Oracle数据库中的一些常用分析函数。
还有其他一些分析函数,如PERCENTILE_CONT、PERCENTILE_DISC等可以用于更高级的分析计算。
oracle 常用字符串函数Oracle是一种广泛使用的关系型数据库管理系统,它提供了许多强大的函数和工具来处理和管理数据。
在Oracle中,字符串函数是最常用的函数之一,它们可以帮助我们处理和操作字符串数据。
在本文中,我们将介绍一些常用的Oracle字符串函数。
1. SUBSTR函数SUBSTR函数用于从字符串中提取子字符串。
它的语法如下:SUBSTR(string, start_position, [length])其中,string是要提取子字符串的字符串,start_position是子字符串的起始位置,length是要提取的子字符串的长度(可选)。
如果省略length,则将提取从start_position开始的所有字符。
例如,以下语句将从字符串“Hello World”中提取“World”:SELECT SUBSTR('Hello World', 7) FROM dual;输出结果为:“World”。
2. INSTR函数INSTR函数用于查找字符串中某个子字符串的位置。
它的语法如下:INSTR(string, substring, [start_position], [nth_appearance])其中,string是要查找的字符串,substring是要查找的子字符串,start_position是查找的起始位置(可选),nth_appearance是要查找的子字符串的第几个出现位置(可选,默认为1)。
例如,以下语句将查找字符串“Hello World”中第一个出现的字母“o”的位置:SELECT INSTR('Hello World', 'o') FROM dual;输出结果为:5。
3. CONCAT函数CONCAT函数用于连接两个或多个字符串。
它的语法如下:CONCAT(string1, string2, ...)其中,string1、string2等是要连接的字符串。
oralce函数Oracle是一种关系数据库管理系统,它使用了一种名为Oracle数据库的数据库管理系统。
Oracle是一种强大的工具,提供了许多内置函数,可以用于在数据库中进行各种操作。
以下是一些常用的Oracle函数。
1.聚合函数-AVG:计算指定列的平均值。
-COUNT:计算指定列中非空数据的数量。
-SUM:计算指定列的总和。
-MAX:找到指定列的最大值。
-MIN:找到指定列的最小值。
2.字符串函数-CONCAT:将两个字符串连接成一个字符串。
-LOWER:将字符串转换为小写。
-UPPER:将字符串转换为大写。
-LENGTH:计算字符串的长度。
-SUBSTR:返回一个字符串的子字符串。
3.数值函数-ROUND:将一个数值四舍五入到指定的小数位数。
-CEIL:向上取整,返回不小于指定数值的最小整数。
-FLOOR:向下取整,返回不大于指定数值的最大整数。
-ABS:返回指定数值的绝对值。
-MOD:返回两个数值的余数。
4.日期和时间函数-SYSDATE:返回当前日期和时间。
-ADD_MONTHS:在指定日期上增加指定的月份。
-TRUNC:截断日期或时间到指定的精度。
-MONTHS_BETWEEN:计算两个日期之间的月数差。
-TO_CHAR:将日期转换为指定格式的字符串。
5.条件函数-DECODE:根据条件返回不同的值。
-CASE:根据条件执行不同的操作。
-NVL:如果给定的表达式为NULL,则将其替换为指定的值。
-NULLIF:如果两个表达式的值相等,则返回NULL。
6.分析函数-ROW_NUMBER:为每一行分配一个唯一的数字。
-RANK:为每一行分配一个排名,如果有并列的值,则排名相同。
-DENSE_RANK:为每一行分配一个排名,如果有并列的值,则排名可以重复。
-LEAD:返回指定行后的值。
-LAG:返回指定行前的值。
上述函数只是Oracle提供的一小部分功能,Oracle还提供了许多其他有用的函数。
oracle常用聚集函数Oracle是数据库管理系统中的一种,支持众多的聚集函数,这些聚集函数能够按照特定规则将行组合为单个结果值。
以下是Oracle中比较常用的聚集函数。
1. AVG函数:用于计算数值列的平均值。
语法:AVG(column_name)2. COUNT函数:用于计算指定列中的行数。
可以使用COUNT(*)来计算表中的所有行数。
语法:COUNT(column_name)3. MAX函数:用于查找数值列中的最大值。
语法:MAX(column_name)4. MIN函数:用于查找数值列中的最小值。
语法:MIN(column_name)5. SUM函数:用于计算数值列的总和。
语法:SUM(column_name)其中,AVG、SUM、MAX和MIN等函数可以用于数字列,而COUNT也可以用于任何列(字符串、数字等)。
除了以上常用的聚集函数外,Oracle还支持其他聚集函数,如STDDEV、VARIANCE等。
STDDEV函数返回给定数列的标准差,VARIANCE函数返回给定数列的方差。
需要注意的是,在使用聚集函数时,必须指定分组条件。
使用GROUP BY关键字指定分组条件,以便使聚集函数仅作用于指定的数据子集上。
例如:SELECT department, AVG(salary)FROM employeesGROUP BY department;以上代码将返回每个部门的平均工资,因为使用了GROUP BY部门。
总之,Oracle中的聚集函数可以大大简化复杂查询的编写,帮助开发者更高效地进行数据分析和处理。
以上介绍的聚集函数是Oracle常用聚集函数中的一部分,也是开发者在使用Oracle进行数据查询时需要了解的重要知识点。
oracle常用的开窗函数使用技巧在数据库操作中,常常需要对数据进行分组、排序、过滤、统计等操作,这时候开窗函数就成为了一种非常有用的技巧。
Oracle是一种支持开窗函数的数据库,他们可以被用于查询、分析、排序、聚合等操作。
下面将为大家介绍几种常见的开窗函数使用技巧。
一、聚合函数实现在数据库中,聚合函数是非常常见的操作,例如SUM、COUNT、AVG等。
在某些情况下,我们需要在查询中同时获得数据的总量或平均值,这时候开窗函数就可以派上用场了。
下面是一个求平均值并加上一个平均值窗口的例子:SELECT name, salary, AVG(salary) OVER () AS average_salary FROM employee结果如下所示:name | salary | average_salary John Smith | 50000 | 66667 Jane Doe | 75000 | 66667 Harry Zheng| 83333 | 66667 Eva Li | 58000 | 66667二、分组函数实现有时候,我们需要按照某些条件来对数据进行分组操作,这就需要使用到分组函数。
例如以下查询就需要按照部门将员工数据进行分组:SELECT department, name, salary, AVG(salary)OVER (PARTITION BY department) AS average_salaryFROM employee结果如下所示:department | name | salary |average_salary IT | John Smith | 50000 |51667 IT | Harry Zheng| 83333 | 51667 HR | Jane Doe | 75000 | 66667 Finance | Eva Li | 58000 | 58000三、分析函数实现分析函数可以帮助我们对数据进行排序和分组。
oracle常用sql函数Oracle是一款非常优秀的数据库管理系统,它提供了很多强大的功能与工具,其中最基本而实用的功能就是SQL函数了。
下面我们将重点介绍一些常用的Oracle SQL函数,帮助读者更好地了解和掌握这些常用的函数,从而更加有效地处理和管理数据。
一、数值型函数1. ABS()函数:用于计算数值的绝对值,比如ABS(-10)会返回10。
2. CEIL()函数:用于向上取整,比如CEIL(3.14)会返回4。
3. FLOOR()函数:用于向下取整,比如FLOOR(3.14)会返回3。
4. MOD()函数:用于求模,比如MOD(12,5)会返回2。
5. ROUND()函数:用于四舍五入,比如ROUND(3.49)会返回3,而ROUND(3.51)会返回4。
二、字符型函数1. CONCAT()函数:用于连接两个字符串,比如CONCAT('hello','world')会返回helloworld。
2. SUBSTR()函数:用于截取字符串,比如SUBSTR('hello',2,3)会返回ell。
3. UPPER()函数:用于将字符串转换成大写,比如UPPER('hello')会返回HELLO。
4. LOWER()函数:用于将字符串转换成小写,比如LOWER('HELLO')会返回hello。
5. TRIM()函数:用于去掉字符串首尾的空格,比如TRIM(' hello ')会返回hello。
三、日期型函数1. CURRENT_DATE函数:用于获取当前日期,比如SELECT CURRENT_DATE FROM DUAL会返回当前日期。
2. SYSDATE函数:用于获取系统当前时间,比如SELECTSYSDATE FROM DUAL会返回系统当前时间。
3. TO_CHAR()函数:用于将日期转换成字符型,比如TO_CHAR(SYSDATE,'yyyy-mm-dd')会返回当前日期的年月日格式。
oracle练习题(打印版)### Oracle数据库练习题#### 一、选择题1. Oracle数据库中,哪个命令用于创建表?- A. CREATE TABLE- B. CREATE DATABASE- C. DROP TABLE- D. ALTER TABLE2. 以下哪个不是Oracle数据库的数据类型?- A. NUMBER- B. CHAR- C. DATE- D. IMAGE3. 在Oracle数据库中,哪个命令用于删除表?- A. DELETE FROM- B. DROP TABLE- C. REMOVE TABLE- D. ERASE TABLE4. Oracle数据库中,如何查看当前用户?- A. SELECT USER FROM DUAL;- B. SELECT CURRENT_USER FROM DUAL;- C. SELECT USERNAME FROM ALL_USERS;- D. SELECT CURRENT_USER FROM ALL_USERS;5. 以下哪个命令用于在Oracle数据库中创建索引?- A. CREATE INDEX- B. CREATE KEY- C. CREATE CONSTRAINT- D. CREATE UNIQUE#### 二、填空题1. 在Oracle数据库中,使用____命令可以查看表结构。
2. Oracle数据库中,使用____命令可以查看当前数据库的所有表。
3. 要删除Oracle数据库中的行,可以使用____命令。
4. Oracle数据库中,____用于存储二进制数据。
5. Oracle数据库中,____命令用于查看数据库中所有的索引。
#### 三、简答题1. 描述Oracle数据库中事务的ACID属性。
2. 解释Oracle数据库中的锁定机制。
3. 说明Oracle数据库中视图的作用。
#### 四、操作题1. 创建一个名为`Employees`的表,包含以下字段:- `EmployeeID` NUMBER(10) PRIMARY KEY,- `FirstName` VARCHAR2(50),- `LastName` VARCHAR2(50),- `HireDate` DATE,- `Salary` NUMBER(10, 2),- `DepartmentID` NUMBER(10).2. 向`Employees`表中插入以下数据:- `EmployeeID`: 1001, `FirstName`: 'John', `LastName`:'Doe', `HireDate`: '2023-01-01', `Salary`: 70000,`DepartmentID`: 101.- `EmployeeID`: 1002, `FirstName`: 'Jane', `LastName`:'Smith', `HireDate`: '2023-02-15', `Salary`: 50000,`DepartmentID`: 102.3. 编写一个查询,显示所有员工的姓名和工资,按工资从高到低排序。
ORACLE函数大全SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL〉 select ascii('A')A,ascii(’a') a,ascii('0’) zero,ascii(' ') space from dual;A A ZERO SPACE————-——-— -—---———- ---—----- ---————-—65 97 48 322.CHR给出整数,返回对应的字符;SQL〉 select chr(54740) zhao,chr(65) chr65 from dual;ZH C—— -赵 A3.CONCAT连接两个字符串;SQL> select concat('010—’,'88888888')||'转23’高乾竞电话 from dual;高乾竞电话—-——-———-—--——-—010—88888888转234.INITCAP返回字符串并将字符串的第一个字母变为大写;SQL〉 select initcap('smith’) upp from dual;UPP—————Smith5.INSTR(C1,C2,I,J)在一个字符串中搜索指定的字符,返回发现指定的字符的位置;C1 被搜索的字符串C2 希望搜索的字符串I 搜索的开始位置,默认为1J 出现的位置,默认为1SQL> select instr(’oracle traning’,’ra',1,2) instring from dual;INSTRING—-—------96.LENGTH返回字符串的长度;SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;NAME LENGTH(NAME) ADDR LENGTH(ADDR) SALLENGTH(TO_CHAR(SAL))————-———---————-—- —--——---——----—- -———--—-—-—— ----———-————----—-——--—--—---高乾竞 3 北京市海锭区 6 9999.99 77。
oracle 函数的用法Oracle 是一个非常强大的数据库管理系统,它提供了丰富的函数库,可以让我们在SQL 语句中使用各种函数来实现数据处理、计算和查询。
本文将给大家介绍一些常用的Oracle 函数及其用法。
一、字符串函数1. UPPER 函数:将字符串转换为大写字母。
SELECT UPPER('hello world!') FROM DUAL;结果为:HELLO WORLD!结果为:hello world!3. INSTR 函数:查找子字符串在字符串中第一次出现的位置。
结果为:54. SUBSTR 函数:截取字符串的一部分。
5. REPLACE 函数:将字符串中的某个子串替换为另一个子串。
二、数值函数1. ROUND 函数:将指定的数字四舍五入到指定的小数位数。
3. ABS 函数:计算数字的绝对值。
4. SIGN 函数:返回数字的符号,如果为正数返回 1,为负数返回 -1,为零返回 0。
SELECT SIGN(-10), SIGN(10), SIGN(0) FROM DUAL;结果为:-1 1 05. POWER 函数:计算一个数的指定次幂。
三、日期函数1. SYSDATE 函数:返回当前系统日期和时间。
SELECT SYSDATE FROM DUAL;2. MONTHS_BETWEEN 函数:计算两个日期之间相差的月数。
SELECT MONTHS_BETWEEN('2022-01-01', '2021-01-01') FROM DUAL;3. ADD_MONTHS 函数:对指定日期增加指定的月数。
4. TRUNC 函数:截取日期到指定的精度,例如截取到月份。
5. TO_CHAR 函数:将日期类型转换为字符串类型。
SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;结果为:2021-08-01 14:00:00四、聚合函数1. COUNT 函数:计算查询结果集中的行数。
oracle统计个数的函数Oracle是一种强大的数据库管理系统,它提供了许多函数来处理和分析数据。
其中之一就是用于统计个数的函数。
在本文中,我将为您介绍一些常用的Oracle统计个数的函数,并提供相应的示例。
1. COUNT函数COUNT函数用于统计满足指定条件的行数。
它可以作用于单个列、多个列或整个表。
以下是COUNT函数的语法:```SELECT COUNT(column_name) FROM table_name WHERE condition;```其中,column_name是要进行统计的列名,table_name是要进行统计的表名,condition是筛选条件(可选)。
示例1:我们有一个名为"students"的表,其中包含了学生的信息。
现在,我们想统计表中所有学生的个数。
可以使用以下SQL语句:```SELECT COUNT(*) FROM students;```这将返回表中所有学生的个数。
示例2:假设我们只想统计表中英语成绩超过60分的学生个数,可以使用以下SQL语句:```SELECT COUNT(*) FROM students WHERE English > 60;```这将返回英语成绩超过60分的学生个数。
2. SUM函数SUM函数用于计算指定列的数值总和。
它常用于对数值进行求和操作。
以下是SUM函数的语法:```SELECT SUM(column_name) FROM table_name WHERE condition;```其中,column_name是要进行求和的列名,table_name是要进行求和的表名,condition是筛选条件(可选)。
示例3:假设我们有一个名为"sales"的表,其中包含了销售数据。
现在,我们想计算表中所有销售额的总和。
可以使用以下SQL语句:```SELECT SUM(sales_amount) FROM sales;```这将返回表中所有销售额的总和。
/*此文章可以作为sql脚本直接运行,某些函数限于oracle数据库!前面建表和数据插入可以不看,直接看后面红色部分的代码,前面的表只是提供一些数据供大家练习,不用自己再去建表了,真正的内容在后面*/--人员表create table person(personID number ,pname varchar2(20) constraint NN_pname not null,psex char(2) ,pbirth date ,constraint PK_personID primary key (personID) ,constraint CK_psex check (psex='男' or psex='女'));--增加数据create sequence seq_personID ;insert into person values(seq_personID.Nextval,'david','男',to_date('1990-09-10','yyyy-mm-dd'));insert into person values(seq_personID.Nextval,'ggyy','男',to_date('1991-10-10','yyyy-mm-dd')); insert into person values (seq_personID.Nextval,'朱刀','男',to_date('1970-10-10','yy-mm-dd'));insert into person values (seq_personID.Nextval,'泥巴','女',to_date('1991-10-10','yy-mm-dd'));insert into person values (seq_personID.Nextval,'憨坨','女',to_date('1991-10-10','yy-mm-dd'));insert into person values (seq_personID.Nextval,'李静芳','女',to_date('1990-09-10','yyyy-mm-dd'));insert into person (personID,pname,psex) values(seq_personID.Nextval,'胖子','男');insert into person (personID,pname,psex) values(seq_personID.Nextval,'小成成','男');insert into person (personID,pname,psex) values(seq_personID.Nextval,'乐姐','女');insert into person (personID,pname,psex) values(seq_personID.Nextval,'靓崽波','男');--登录账号表create table loginzh(userID number ,personID number ,zhanghao varchar2(20) ,passwd varchar2(20) ,logintime date ,loginIP varchar2(15) ,constraint PK_userID primary key (userID) ,constraint FK_personID foreign key (personID) references person (personID));--为这个表加点数据create sequence seq_userID ;insert into loginzh values(seq_userID.Nextval,1,'111111','123456',sysdate,'127.0.0.1'); --sysdate为系统当前时间insert into loginzh values(seq_userID.Nextval,2,'222222','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,3,'333333','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,4,'444444','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,5,'555555','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,6,'666666','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,6,'777777','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,6,'888888','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,6,'999999','123456',sysdate,'127.0.0.1');insert into loginzh values(seq_userID.Nextval,6,'000000','123456',sysdate,'127.0.0.1');--角色表create table trole (roleID number ,rolename varchar2(20) ,roleremark varchar2(100) ,constraint PK_roleID primary key (roleID));--为这个表加点数据create sequence seq_roleID ;insert into trole values (seq_roleID.Nextval,'剑圣','一个能转出剑刃风暴和无敌斩的家伙!');insert into trole values (seq_roleID.Nextval,'宙斯','一个能全屏放闪电的家伙!');insert into trole values (seq_roleID.Nextval,'LION','用大招抢人头的屌丝!');insert into trole values (seq_roleID.Nextval,'炸弹人','我不说什么了...'); insert into trole values (seq_roleID.Nextval,'UG','辉耀在手,天下我有!');insert into trole values (seq_roleID.Nextval,'风行者','风一样的男子,哦不,是女子!');insert into trole values (seq_roleID.Nextval,'小黑','和风行者是双胞胎,只是一个整天穿白衣服,一个整天穿黑衣服');insert into trole values (seq_roleID.Nextval,'凤凰','凤凰开大有两个结果,要不就是信春哥,要不就是蛋都碎了...');insert into trole values (seq_roleID.Nextval,'术士','A帐加刷新能瞬间甩出四个石头人的家伙');insert into trole values (seq_roleID.Nextval,'火枪','传说哥');select * from trole ;--账号与角色表create table userandrole(userID number ,roleID number ,constraint FK_userID foreign key (userID) references loginzh (userID) ,constraint FK_roleID foreign key (roleID) references trole (roleID) );--为这个表添加数据insert into userandrole values (1,1);insert into userandrole values (2,1);insert into userandrole values (3,2);insert into userandrole values (4,2);insert into userandrole values (5,3);insert into userandrole values (6,3);insert into userandrole values (7,5);insert into userandrole values (8,6);insert into userandrole values (9,7);insert into userandrole values (10,8);--功能节点表create table tfunction(functionID number ,nodename varchar2(20) ,noderemark varchar2(100),constraint PK_functionID primary key (functionID));--加数据create sequence seq_functionID ;insert into tfunction values (seq_functionID.Nextval,'剑刃风暴','反正就是这么转,转的时候魔免');insert into tfunction values (seq_functionID.Nextval,'鬼影重重','一个鬼影跟着你屁股后面跑,还打你');insert into tfunction values (seq_functionID.Nextval,'死亡一指','抢人头必备!');insert into tfunction values (seq_functionID.Nextval,'无敌斩','孤身一人被逮到了?我削你!');insert into tfunction values (seq_functionID.Nextval,'地狱火','还不就是天上掉下个石头人');insert into tfunction values (seq_functionID.Nextval,'超级新星','好大一个蛋,好烫!');insert into tfunction values (seq_functionID.Nextval,'仙女之尘','哦一下~');insert into tfunction values (seq_functionID.Nextval,'新月之痕','就是一道动感光波');insert into tfunction values (seq_functionID.Nextval,'梦境缠绕','一切皆为梦境,越逃脱,越受伤...');insert into tfunction values (seq_functionID.Nextval,'相位转移','传说中的八度空间');--角色到节点表create table roleandnode(roleID number ,functionID number ,constraint FK_roleID1 foreign key (roleID) references trole (roleID) , constraint FK_functionID foreign key (functionID) references tfunction (functionID));--加数据insert into roleandnode values (1,1);insert into roleandnode values (2,1);insert into roleandnode values (3,1);insert into roleandnode values (4,2);insert into roleandnode values (5,2);insert into roleandnode values (6,6);insert into roleandnode values (7,7);insert into roleandnode values (8,8);insert into roleandnode values (9,9);insert into roleandnode values (10,6);--计数函数 count 注意:只能用于数值型字段----统计总行数select count (*) as 总人数 from person ;----统计满足某些条件的记录的行数select count (*) as 男同学 from person where psex = '男' ;select count (*) as 女同学 from person where psex = '女' ;--第一个create table bbc(name varchar(50) primary key not null,region varchar(60),area decimal(10),population decimal(11),gdp decimal(14,2));insert into bbc values('中国','亚洲',960000,1400000000,100);insert into bbc values('美国','美洲',45000,2100000,980);insert into bbc values('日本','亚洲',2000,140000,90);insert into bbc values('印度','亚洲',300,240000000,60);insert into bbc values('法国','欧洲',230000,3000,40);insert into bbc values('俄罗斯','欧洲',450000,1400000,50);insert into bbc values('英国','欧洲',961000,13000000,30);insert into bbc values('马来西亚','大洋洲',960000,140000000,60.5); insert into bbc values('埃及','非洲',50000,140000,40);insert into bbc values('阿尔及利亚','非洲',10000,14000,20);--求平均数 avg函数注意:只能用于数值型字段----求某个字段的平均数select avg(gdp) as 平均gdp from bbc ;select trunc(avg(gdp),2) as 亚洲平均gdp from bbc where region = '亚洲';--返回字符串长度select name,length(name) from bbc ;----substr 字符串切割函数select substr ('123123',2,3) from dual ;select * from dual ; --系统测试表--四舍五入函数 round (数值)select round(123.5) from dual ;select round(123.4) from dual ;--取整函数 floor (数值)select floor(123.789) from dual ;--设置精度函数 trunc (数值,数值的精度) 如果设置的精度值大于已有的精度值,那么取已有的精度select trunc (123.11111,2) from dual ;select trunc (123.11,3) from dual ; --设置的精度大于已有的精度--分组 group by 字段select region , count(*) as 国家数 from bbc group by region ;select psex,count(*) as 人数 from person group by psex ;--having 在分组后筛选 where 在分组前筛选select region , count (*) as 国家数 , sum (area) as 总面积from bbc where gdp > 50group by regionhaving sum (area)>50000/* 下面的练习可以帮大家检测下自己的学习情况,如果都能独立完成的话那么常用的函数就基本掌握了 */--练习--第二个create table nobel(yr int,subject varchar(15),winner varchar(50));insert into nobel values(2005,'医学奖','张风');insert into nobel values(2005,'物理学奖','david');insert into nobel values(2005,'和平奖','刘小');insert into nobel values(2006,'文学奖','何林');insert into nobel values(2006,'医学奖','张风');insert into nobel values(2006,'和平奖','奥巴马');insert into nobel values(2007,'医学奖','张三风');insert into nobel values(2007,'和平奖','朱刀');insert into nobel values(2008,'医学奖','张三风');insert into nobel values(2008,'文学奖','朱刀');insert into nobel values(2008,'物理学奖','david');insert into nobel values(2008,'物理学奖','ggyy');insert into nobel values(2008,'物理学奖','朱刀');select * from nobel ;--给出表中得过诺贝尔奖的总人数select count(distinct winner) as 总人数 from nobel ;--给出每人诺贝尔奖的获奖总次数select winner,count(*) as 总次数 from nobel group by winner ;--显示每个奖项的获奖总次数select subject , count(*) as 次数 from nobel group by subject ;--显示每个奖项在2005年获奖人数select subject ,count(*) as 获奖人数from nobel where yr = 2005 group by subject ;--显示每个奖项不同获奖者的人数select subject ,count (distinct winner) as 人数from nobel group by subject ;--显示每个奖项有多少年有人获奖select subject ,count(yr) as 年数 from nobel group by subject ;--显示当年有三个诺贝尔奖的年份select yr, count(*) as 奖数 from nobel group by yr having count(*)>=3 ;--显示得奖超过一次的获奖者select winner, count(*) as 获奖次数from nobel group by winner having count(*)>1 ;--显示得到多个奖(不同种类)的获奖者select winner, count (distinct subject) as 获奖种类from nobel group by winnerhaving count(distinct subject)>1 ;--显示2005年及以后,有三个人获得同一奖项的年份以及奖项select yr as 年份 ,subject as 奖项 ,count (winner) as 获奖人数from nobel where yr > 2005group by yr,subjecthaving count (winner) =3 ;。