【Oracle】曾经的Oracle学习笔记(1-3) 数据库常见用语,常见命令,创建测试表
一、数据库的登录
二、数据库常用语
三、测试表的创建,测试数据初始化
四、常见命令介绍
五、测试
user:jeffrey
sn:jeffrey
user:system
sn:jeffrey
浏览器中输入:
http://127.0.0.1:8080/apex
管理员登陆
user:sys
sn:jeffrey
打开服务列表:
win+r打开运行框,输入services.msc
OracleServiceXE服务一定要是打开的,要不然oracle根本登录不了。
OracleXETNSLintener服务是在我们使用JDBC的时候需要打开的一个服务。
创建数据库用户:
user:briup
sn:briup
-------------------------
打开服务列表:
运行框中输入services.msc
----------------------------------------------
登录oracle的几种方法
sqlplus user/sn   直接用user身份登录
sqlplus  然后根据提示输入用户名,密码
用dba的身份登录到oracle数据库
命令行中输入:
sqlplus "/as sysdba"
注:如果命令不识别,那么就需要配置一下环境变量path,把sqlplus.exe文件所在目录的路径配置在path中
show user
在dos中创建用户:
create user 用户名 identified by 密码;
create user briup identified by briup;
给用户授权
grant connect,resource to briup;
给账户解锁
alter user briup account unlock;
conn user; 切换到用户user
conn jeffrey as sysdba;		//从jeffrey用户切换到sysdba的身份登录
grant create table,create view to jeffrey;//给jeffrey授权创建view的权限
conn jeffrey/jeffrey;	//切换到以jeffrey的身份登录,用户名/密码
如果发现用户被锁定了那么就给账户解锁
alter user briup set account unlock;
查看当前登录用户
show user
在sqlplus中清屏:
$cls   (Windows平台下面)
!clear  (Unix平台下面)
$cls  清屏
exit 退出
----------------------------------
sql语句的基本格式:
select ...
from ..
where ...
group by ...
having ...
order by ..
-------------------------------
oracle中的Object:
Table View Sequence Index Synonym
---------------------------------------------------------
sql  第四代编程语言
特点:只关心做什么,不关心怎么做
sqlplus: 是一个工具,可以把sql语句拿到oracle中切执行,并且显示执行结果。
PL/SQL:可以在sql的基础加入逻辑控制单元
---------------------------------------------------、
使用sql语言在oracle中可以做哪些事情:
数据库操纵语言
Data manipulation language (DML)
INSERT, UPDATE, DELETE
数据库定义语言
Data definition language (DDL)
CREATE, ALTER, DROP, RENAME, TRUNCATE
数据库控制语言
Data control language (DCL)
GRANT, REVOKE
数据库查询:
SELECT
数据库事务:
COMMIT, ROLLBACK, SAVEPOINT
------------------------------------------------------------
登录数据库:
sqlplus 
直接回车输入然后根据提示输入用户名和密码
sqlplus 用户名  
然后根据提示输入密码
sqlplus 用户名/密码
然后回车就可以了
---------------------------------------------------------------
查看当前用户下面有哪些表可以操作
select table_name
from user_tables;
注:sql语句中的字母大小写是不敏感
SELECT TABLE_NAME
FROM USER_TABLES;
这个和上面的小写的sql语句结果是一样的
但是oracle中的字符串就会大小写敏感
'Hello' 和 'hello' 是不同的
查看某张表(例如,s_emp表)中的列名和列的属性
desc s_emp;
在sql语句最后要加上分号;
要不然这个sql语句不会被执行。
--------------------------
sql语句的基本格式:
select ...
from ..
where ...
group by ...
having ...
order by ..
---------------------------
s_region   地区表
s_dept     部门表
s_emp      员工表
改变语言环境,以保证接下来插入日期能被识别
alter session set nls_language=english;
注:在建表插入数据之前,先把当前会话(session)的语言环境设置为英文,因为在下面的插入数据的操作中需要插入英文格式的日期数据.
alter session set nls_language=english;
************************************************
建表命令
第一张表 s_region
建表语言:
CREATE TABLE s_region
(id                         NUMBER(7)
   CONSTRAINT s_region_id_nn NOT NULL,
 name                       VARCHAR2(50)
   CONSTRAINT s_region_name_nn NOT NULL,
     CONSTRAINT s_region_id_pk PRIMARY KEY (id),
     CONSTRAINT s_region_name_uk UNIQUE (name));
第一张表中插入数据:
INSERT INTO s_region VALUES (
   1, 'North America');
INSERT INTO s_region VALUES (
   2, 'South America');
INSERT INTO s_region VALUES (
   3, 'Africa / Middle East');
INSERT INTO s_region VALUES (
   4, 'Asia');
INSERT INTO s_region VALUES (
   5, 'Europe');
COMMIT;
第二张表: s_dept
建表语句:
CREATE TABLE s_dept
(id                         NUMBER(7)
   CONSTRAINT s_dept_id_nn NOT NULL,
 name                       VARCHAR2(25)
   CONSTRAINT s_dept_name_nn NOT NULL,
 region_id                  NUMBER(7),
     CONSTRAINT s_dept_id_pk PRIMARY KEY (id),
     CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id));
第二张表插入数据:
INSERT INTO s_dept VALUES (
   10, 'Finance', 1);
INSERT INTO s_dept VALUES (
   31, 'Sales', 1);
INSERT INTO s_dept VALUES (
   32, 'Sales', 2);
INSERT INTO s_dept VALUES (
   33, 'Sales', 3);
INSERT INTO s_dept VALUES (
   34, 'Sales', 4);
INSERT INTO s_dept VALUES (
   35, 'Sales', 5);
INSERT INTO s_dept VALUES (
   41, 'Operations', 1);
INSERT INTO s_dept VALUES (
   42, 'Operations', 2);
INSERT INTO s_dept VALUES (
   43, 'Operations', 3);
INSERT INTO s_dept VALUES (
   44, 'Operations', 4);
INSERT INTO s_dept VALUES (
   45, 'Operations', 5);
INSERT INTO s_dept VALUES (
   50, 'Administration', 1);
COMMIT;
第三张表 s_emp
CREATE TABLE s_emp
(id                         NUMBER(7)
   CONSTRAINT s_emp_id_nn NOT NULL,
 last_name                  VARCHAR2(25)
   CONSTRAINT s_emp_last_name_nn NOT NULL,
 first_name                 VARCHAR2(25),
 userid                     VARCHAR2(8),
 start_date                 DATE,
 comments                   VARCHAR2(255),
 manager_id                 NUMBER(7),
 title                      VARCHAR2(25),
 dept_id                    NUMBER(7),
 salary                     NUMBER(11, 2),
 commission_pct             NUMBER(4, 2),
     CONSTRAINT s_emp_id_pk PRIMARY KEY (id),
     CONSTRAINT s_emp_userid_uk UNIQUE (userid),
     CONSTRAINT s_emp_commission_pct_ck
        CHECK (commission_pct IN (10, 12.5, 15, 17.5, 20)));
第三张表插入数据:
INSERT INTO s_emp VALUES (
  1, 'Velasquez', 'Carmen', 'cvelasqu',
   to_date('03-MAR-90 8:30', 'dd-mon-yy hh24:mi'), NULL, NULL, 'President',
   50, 2500, NULL);
INSERT INTO s_emp VALUES (
   2, 'Ngao', 'LaDoris', 'lngao',
   '08-MAR-90', NULL, 1, 'VP, Operations',
   41, 1450, NULL);
INSERT INTO s_emp VALUES (
   3, 'Nagayama', 'Midori', 'mnagayam',
   '17-JUN-91', NULL, 1, 'VP, Sales',
   31, 1400, NULL);
INSERT INTO s_emp VALUES (
   4, 'Quick-To-See', 'Mark', 'mquickto',
   '07-APR-90', NULL, 1, 'VP, Finance',
   10, 1450, NULL);
INSERT INTO s_emp VALUES (
   5, 'Ropeburn', 'Audry', 'aropebur',
   '04-MAR-90', NULL, 1, 'VP, Administration',
   50, 1550, NULL);
INSERT INTO s_emp VALUES (
   6, 'Urguhart', 'Molly', 'murguhar',
   '18-JAN-91', NULL, 2, 'Warehouse Manager',
   41, 1200, NULL);
INSERT INTO s_emp VALUES (
   7, 'Menchu', 'Roberta', 'rmenchu',
   '14-MAY-90', NULL, 2, 'Warehouse Manager',
   42, 1250, NULL);
INSERT INTO s_emp VALUES (
   8, 'Biri', 'Ben', 'bbiri',
   '07-APR-90', NULL, 2, 'Warehouse Manager',
   43, 1100, NULL);
INSERT INTO s_emp VALUES (
   9, 'Catchpole', 'Antoinette', 'acatchpo',
   '09-FEB-92', NULL, 2, 'Warehouse Manager',
   44, 1300, NULL);
INSERT INTO s_emp VALUES (
   10, 'Havel', 'Marta', 'mhavel',
   '27-FEB-91', NULL, 2, 'Warehouse Manager',
   45, 1307, NULL);
INSERT INTO s_emp VALUES (
   11, 'Magee', 'Colin', 'cmagee',
   '14-MAY-90', NULL, 3, 'Sales Representative',
   31, 1400, 10);
INSERT INTO s_emp VALUES (
   12, 'Giljum', 'Henry', 'hgiljum',
   '18-JAN-92', NULL, 3, 'Sales Representative',
   32, 1490, 12.5);
INSERT INTO s_emp VALUES (
   13, 'Sedeghi', 'Yasmin', 'ysedeghi',
   '18-FEB-91', NULL, 3, 'Sales Representative',
   33, 1515, 10);
INSERT INTO s_emp VALUES (
   14, 'Nguyen', 'Mai', 'mnguyen',
   '22-JAN-92', NULL, 3, 'Sales Representative',
   34, 1525, 15);
INSERT INTO s_emp VALUES (
   15, 'Dumas', 'Andre', 'adumas',
   '09-OCT-91', NULL, 3, 'Sales Representative',
   35, 1450, 17.5);
INSERT INTO s_emp VALUES (
   16, 'Maduro', 'Elena', 'emaduro',
   '07-FEB-92', NULL, 6, 'Stock Clerk',
   41, 1400, NULL);
INSERT INTO s_emp VALUES (
   17, 'Smith', 'George', 'gsmith',
   '08-MAR-90', NULL, 6, 'Stock Clerk',
   41, 940, NULL);
INSERT INTO s_emp VALUES (
   18, 'Nozaki', 'Akira', 'anozaki',
   '09-FEB-91', NULL, 7, 'Stock Clerk',
   42, 1200, NULL);
INSERT INTO s_emp VALUES (
   19, 'Patel', 'Vikram', 'vpatel',
   '06-AUG-91', NULL, 7, 'Stock Clerk',
   42, 795, NULL);
INSERT INTO s_emp VALUES (
   20, 'Newman', 'Chad', 'cnewman',
   '21-JUL-91', NULL, 8, 'Stock Clerk',
   43, 750, NULL);
INSERT INTO s_emp VALUES (
   21, 'Markarian', 'Alexander', 'amarkari',
   '26-MAY-91', NULL, 8, 'Stock Clerk',
   43, 850, NULL);
INSERT INTO s_emp VALUES (
   22, 'Chang', 'Eddie', 'echang',
   '30-NOV-90', NULL, 9, 'Stock Clerk',
   44, 800, NULL);
INSERT INTO s_emp VALUES (
   23, 'Patel', 'Radha', 'rpatel',
   '17-OCT-90', NULL, 9, 'Stock Clerk',
   34, 795, NULL);
INSERT INTO s_emp VALUES (
   24, 'Dancs', 'Bela', 'bdancs',
   '17-MAR-91', NULL, 10, 'Stock Clerk',
   45, 860, NULL);
INSERT INTO s_emp VALUES (
   25, 'Schwartz', 'Sylvie', 'sschwart',
   '09-MAY-91', NULL, 10, 'Stock Clerk',
   45, 1100, NULL);
COMMIT;
*****************************************************
s_region地区表
ID	地区的编号
NAME	地区的名字
s_dept部门表
ID		部门编号
NAME		部门名字
REGION_ID	部门所在地区编号
s_emp 员工表
ID		员工的编号
 LAST_NAME	
 FIRST_NAME
 USERID
 START_DATE	入职时间
 COMMENTS
 MANAGER_ID	这个员工的领导的id号
 TITLE		职位
 DEPT_ID	所在部门编号
 SALARY
 COMMISSION_PCT 提成率
----------------------------------------------------
查找
select last_name from s_emp;
调整列名下面分割线的长度(非数字列)
col last_name for a15;  //调节last_name 这列的a(小横线)到15格
查看多列数据用逗号隔开
注:这个逗号一定要是英文输入法下面的逗号
select column1,column2,column3...
from 表;
查看表中所有的列用*
select *
from 表;
给查询的某一列起一个别名(显示用的,并不改变数据库中的表列名),空格隔开
select last_name,salary sal from s_emp; //将salary列名显示为sal
--------------------------------------------------------
调整列名下面分割线的长度(非数字列)
col last_name for a15;
查看某一列上面设置的格式
col last_name
清空某一列上面设置的格式
col last_name clear
select last_name
from s_emp;
查看多列数据用逗号隔开
注:这个逗号一定要是英文输入法下面的逗号
select column1,column2,column3...
from 表;
例如:
select id,last_name,dept_id,salary
from s_emp;
查看表中所有的列用*
select *
from 表;
select *
from s_emp;
给查询的某一列起一个别名
select last_name name
from s_emp;
select id myId,last_name MyName,salary MySalary
from s_emp;
DISTINCT
distinct   //作用:可以用来去除重复的数据,注:数据是否重复是按照当前显示的一行是否完全一样判定的。
select dept_id
from s_emp;
select distinct dept_id
from s_emp;
在查询的过程中可以加入加减乘除
Add		+
Subtract	-
Multiply	*
Divide		/
select salary
from s_emp;
select salary*12 salaryOfYear
from s_emp;
select ((salary+1000)*20-50000)/15-20000
from s_emp;
select last_name,first_name
from s_emp;
||是可以连接俩个字符串的值或者是俩个字符串列上面的值。
select first_name||last_name full_name
from s_emp;
select 'hello'||'world'
from dual;
dual 哑表
注:dual是oracle中的一张表,每一个用户都可以使用。当前我们直接查询一个运算式子或者是日期的时候就可以用这张表。
函数
nvl(列名,替换的新值)	  //作用:能帮我们把某一列上面是null的值替换为另一个值
select last_name,nvl(commission_pct,0) from s_emp;
练习:查询一个s_emp表中所有人的工资,如果是销售人员,那么就把他的工资加上提成之后再显示(在原来基础工资的基础加入上提成)
	select last_name,salary+salary*(nvl(commission_pct,0)/100) from s_emp;
-------------------------------------------------------------
sql语句中的【小技巧】
在sql*plus工具中,会有一个buffer(缓存),这个buffer中只能存放一条sql语句(不管这条sql语句多少行),buffer中会存放着我们最近一次执行过的一条sql语句。
L或者l  //大写或小写都可以list,显示buffer中存放的sql语句
/     	//这一命令可以执行buffer中的sql语句
2	//选择buffer中的第二行
a   	//在buffer中的sql语句的某一行(选择的那一行)后面增加内容,a后面跟的内容
i	//在buffer中的sql语句中的某一行(选择的那一行)下面插入一行,i后面跟的内容
del	//删除某一行(选择的那一行)
c/ma/me 	//将某一行(选择的那一行)中的ma替换成me
2 新代码	//将buffer中第2行中的代码全部重写为新代码
save LL.sql	//将buffer中的额内容保存到文件LL.sql中,文件在登录sql前的路径存放。
clear buffer 	//清空缓冲区
start LL.sql	//执行文件LL.sql中保存的命令。
@LL.sql		//执行文件LL.sql中保存的命令。
edit LL.sql	//修改LL.sql文件,使用系统中默认的编辑器打开
get LL.sql	//显示LL.sql文件中存储的命令。
spool spool.sql	//将接下来的操作记录在spool.sql文件中直到spool off
spool off	//记录结束
--------------------------------------------
将salary列中的数字显示为9,999的形式,如2391显示为2,391
col salary for $9,999	
select salary from s_emp;
将不足的显示为0,如4399显示为004,399
col salary for $099,999.99
将货币符号显示为本地的
col salary for L099,999.99
修改数字列显示的格式:
将来这个数字按照这样的格式来显示
col salary for $9,999.99
例如:2500 ---> $2,500.00
这个表示将来数字一定要显示成整数为6位,不够6位的前面补0
col salary for $099,999.99
例如:2500 ---> $002,500.00
L表示使用本地的货币符号来表示
col salary for L099,999.99
例如:2500 ---> ¥002,500.00
--------------------------------
order by 排序
默认是升序
select last_name,salary
from s_emp
order by salary;
加上desc后就会变为降序
select last_name,salary
from s_emp
order by salary desc;
通过日期排序
select last_name,salary,start_date
from s_emp
order by start_date;
通过字符串排序
select last_name,salary
from s_emp
order by last_name;
按要查询的第2个列进行排序
select last_name,salary
from s_emp
order by 2;
where子句: 条件查询
select last_name
from s_emp
where dept_id = 41;
= > >= < <=
BETWEEN ... AND...
例如:
  注:这时候也包括41和50这个俩个部门
  select last_name,dept_id
  from s_emp
  where dept_id between 41 and 5
语言环境此时为中文,所以日期用中文格式
  select last_name,start_date
  from s_emp
  where start_date between '03-3月-90'
  and '17-6月-91';
语言环境改为英文
  	alter session set nls_language=english;
  语言环境改为简体中文
  	alter session set nls_language='simplified chinese';
IN(list)
例如:
  查询41,42,43,44,45部门中的员工信息
   select last_name,dept_id
   from s_emp
   where dept_id in(41,42,43,44,45)
LIKE
一般用作模糊查询
  %代表可能有0个或者多个字符
  _代表有一个字符
  escape可以忽略某些字符
  /相当于转义符号
查询名字的首字母是N的员工信息
  select last_name,salary
  from s_emp
  where last_name like 'N%';
查询名字中以_g开头的员工信息
  select last_name,salary
  from s_emp
  where last_name like '/_g%' escape'/';
IS NULL
例如:
  select last_name,commission_pct
  from s_emp
  where commission_pct is null;
AND
OR
例如:
 salary<1450
 salary>1100
 dept_id = 41
select last_name,salary,dept_id
 from s_emp
 where dept_id=41 or salary>1100 and 
 salary<1450
注:and的优先级比or高
NOT
!=   <>   ^=
这三个都是不等于的意思
NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL
ANY
例如:
   select last_name,salary
   from s_emp
   where salary > any(3000,2000,1000,500);
   相当于以下语句
   where salary>3000
   or salary>2000
   or salary>1000
   or salary>500
ALL
例如:
   select last_name,salary
   from s_emp
   where salary > all(3000,2000,1000,500);
   相当于以下语句
   where salary>3000
   and salary>2000
   and salary>1000
   and salary>500
--------------------------------------
函数
   分两类:
   	单值函数
组合函数/聚合函数/组函数
单值函数
---------
 1.字符串函数
LOWER  把一个字符串或者字符串类型的列上面的值转换成小写
     例如:
     select lower('HELLO')
     from dual;
     select lower(last_name)
     from s_emp;
UPPER 把一个字符串或者字符串类型的列上面的值转换成大写
INITCAP 把一个字符串或者字符串类型的列上面的值转换成首字母大写,其他字符小写
     例如:
      select initcap('hELLOWoRld')
      from dual;
结果显示: Helloworld
CONCAT 链接俩个字符串或者字符串列上面的值.
     例如:
       select concat('hello','world')
       from dual;
       select concat(last_name,first_name)
       from s_emp;
SUBSTR 截取字符串
      例如:
	第一个参数:要被截取的字符串
	第二个参数:从哪个位置来说截取(下标从1,2,3....)
	第三个参数:要截取的字符串长度
        select substr('hello',1,1)
	from dual;
	select substr(last_name,1,2)
	from s_emp;
LENGTH 返回字符串或者字符串列上面值的长度
      例如:
        select length('hello')
	from dual;
NVL
2.数字函数
ROUND 四舍五入
      第一个参数:要操作的数字
      第二个参数:需要保留的位数
      正数表示保留小数点右边多少位。
      0表示保留到个位,默认这个参数值就是为0
      -1表示保留到十位,以此类推
      例如:
       select round(45.923,2)
       from dual; --->45.92
select round(45.923,0)
       from dual; --->46
select round(45.923)
       from dual; --->46
select round(45.923,-1)
       from dual; --->50
TRUNC 和ROUND的用法一样,唯一不同的就是这个TRUNC函数只会舍去值而不会进位,不管那位上是0或者是9都不会进位。
MOD 取余
      例如:
       select mod(50,30)
       from dual; --->20
3.日期函数
oracle表示日期的第一种方式:
	关键字sysdate表示当前的日期时间
	sysdate的单位是天
	例如:
	select sysdate
	from dual;
sysdate+365表示从当前时间往后推1年
	(sysdate+365)整体代表的是一个日期
	select sysdate+365
	from dual;
sysdate+1/24表示从当前时间往后推1小时
	(sysdate+1/24)整体代表的是一个日期
	select sysdate+1/24
	from dual;
     oracle中表示日期的第二种方式:
       用一个字符串来表示一个日期,只不过这个字符串要按照oracle默认的日期格式来写。
         例如
	   '14-MAY-90'
	   '14-5月-90'
	  注:要和session的语言环境一致
oracle中表示日期的第三种方式:
	借助于日期转换函数来获得一个日期数据
	to_date('string','date_format')
MONTHS_BETWEEN 俩个日期之间相差多少个人,返回的结果单位是月
     例如:
       select months_between(sysdate,sysdate+365)
       from dual; --->12
ADD_MONTHS 在给定的一个日期点上面往后退一个1月,返回的结果是一个日期数据
     例如:
       select add_months(sysdate,1)
       from dual;
NEXT_DAY 表示基于当前给定日期情况下,下一个星期几是多少号,返回的结果是一个日期数据
      例如:
        select next_day(sysdate,'MONDAY')
	from dual;
中文session
	select next_day(sysdate,'星期一')
	from dual;  --->01-7月 -13
LAST_DAY 基于给定日期所在的月份,返回这个月份最后一天的日期,返回结果是一个日期数据
     例如:
       select last_day(sysdate)
       from dual;
ROUND 对日期进行四舍五入
     例如:
        这样是错误的,因为oracle会把这个日期当做一个数字,因为数字函数里面也有round这个函数。
	select round('25-MAY-95','month')
	from dual;
这个是正确的
	select round(to_date(...),'month')
	from dual;
	select round(sysdate-53,'month')
	from dual;
	保留到月份结论:
	不管是28天还是29、30、31,
	16号的都是进位,15都是舍去。
select round(sysdate+82,'year')
	from dual;
	保留到年的结论:
	7月1号以后的时间才会进位
TRUNC 和round类似,但是只会舍去不会进位。
4.字符串、数字、日期相互转换的函数
to_char 把日期或者数字转换为字符串
	to_char(date,'date_format')
	例如:
	select to_char(sysdate,'ddd-Month-Year HH24:mi:ss')
	from dual;
千年虫
	yy rr
select to_char(3500,'$0999,999')
	from dual;
to_number 把字符串转化为数字
	例如:
	select to_number('20')
	from dual;
to_date 把一个字符串转换为日期
	to_date('string','date_format')
	例如:
	select to_date('2013/4/10','yyyy/mm/dd')
	from dual;
注意:单值函数之间是可以相互嵌套使用的.
     例如:
     select concat(lower('HELLO'),upper('world'))
     from dual;
组合函数/聚合函数/组函数
group by子句: 分组
having子句:   条件筛选
常用的组函数:
avg    平均值
count  计数
sum    求和
max    最大值
min    最小值
查询s_emp表中所有员工的工资总和
select sum(salary)
from s_emp;
查询s_emp表中所有员工的平均工资
select avg(salary)
from s_emp;
查询s_emp表一共有多少个员工
select count(*)
from s_emp;
查询s_emp表中最大工资数是多少
select max(salary)
from s_emp;
查询s_emp表中最小工资数是多少
select min(salary)
from s_emp;
--------------------------------------------------------
group by子句: 分组
having子句:   条件筛选
where和having的区别:
这个俩个都可以作为条件筛选语句,但是where后面不能出现组函数,having语句后面可以出现组函数
查询一张表的时候,如果没有分组,直接使用了组函数,那么就会默认整张表的所有数据就是一个小
组,那么这个组函数就会直接作用到整张表上。
如果进行了group by分组,那么会把整张分为若干个小组,然后组函数会分别作用到每一个小组上,
最后每一个小组都会有自己的一个结果(比如说求的平均值或求的总和)。
一般情况,组函数都会结合group by子句来使用
查询s_emp表中每一个部门的员工的工资总和
select dept_id,sum(salary)
from s_emp
group by dept_id
order by dept_id;
查询s_emp表中每一个部门的员工的工资总和,并且只显示出工资总和大于2000的部门
select dept_id,sum(salary)
from s_emp
group by dept_id
having sum(salary)>2000
order by dept_id;
这样写是错误的!!!!where 后面不能跟组函数
select dept_id,sum(salary)
from s_emp
where sum(salary)>2000
group by dept_id
order by dept_id;
查询每一个部门的平均工资
select dept_id,avg(salary)
from s_emp
group by dept_id
order by avg(salary);
注:order by是可以用组函数执行结果进行排序的
查询s_emp表中最大的工资数
select max(salary)
from s_emp;
【Oracle】曾经的Oracle学习笔记(1-3) 数据库常见用语,常见命令,创建测试表的更多相关文章
- golang学习笔记8 beego参数配置 打包linux命令
		golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ... 
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
		机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ... 
- Oracle创建测试表
		试中文排序的数据库版本: SQL> select * from v$version; BANNER ----------------------------------------------- ... 
- SQLMAP学习笔记2 Mysql数据库注入
		SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ... 
- C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型
		C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ... 
- Oracle之PL/SQL学习笔记
		自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ... 
- 作为一个新手的Oracle(DBA)学习笔记【转】
		一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ... 
- Oracle学习笔记——imp还原数据库
		1. 创建用户及指定用户名密码 create user [用户名] identified by [密码]; create user fskxjsxy identified by fskxjs ... 
- [Python] 学习笔记之MySQL数据库操作
		1 Python标准数据库接口DB-API介绍 Python标准数据库接口为 Python DB-API,它为开发人员提供了数据库应用编程接口.Python DB-API支持很多种的数据库,你可以选择 ... 
随机推荐
- 《精通Spring4.X企业应用开发实战》读后感第五章(不同配置方式比较)
- Java Script 学习笔记 -- jQuery
			一 jquery简介 1 jquery是什么 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototyp ... 
- [Win10] 安装虚拟光驱 用于加载ISO等镜像文件
			百度上找到UltraISO安装 一般来说安装到这就基本会显示一个 若经过上述步骤仍没出现虚拟光驱,则尝试进行加载ISO镜像文件到虚拟光驱然后再看看 这样基本就大功告成了~ 
- elasticsearch 基本介绍
			1. Elasticsearch的适用场景: (1)类似百度百科的全文检索,高亮,搜索推荐(2)新闻类的搜索,用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法),数据分析,给 ... 
- linux线程私有数据---TSD池
			进程内的所有线程共享进程的数据空间,所以全局变量为所有线程共有.在某些场景下,线程需要保存自己的私有数据,这时可以创建线程私有数据(Thread-specific Data)TSD来解决.在线程内部, ... 
- bzoj3876: [Ahoi2014&Jsoi2014]支线剧情(上下界费用流)
			传送门 一道题让我又要学可行流又要学zkw费用流…… 考虑一下,原题可以转化为一个有向图,每次走一条路径,把每一条边都至少覆盖一次,求最小代价 因为一条边每走过一次,就要付出一次代价 那不就是费用流了 ... 
- [Xcode 实际操作]四、常用控件-(15)MKMapView加载简单视图
			目录:[Swift]Xcode实际操作 本文将演示地图视图的使用方法. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先往视图控制 ... 
- 在pom包中添加spring-boot-starter-test包引用
			有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ... 
- Hadoop中解除 "Name node is in safe mode"的方法
			运行hadoop程序时,有时候会报以下错误,说明Hadoop的NameNode处在安全模式下. 原因分析: 在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文 ... 
- es6的箭头函数转换为普通函数,以及将await/async函数转为普通函数
			箭头函数转为普通函数: 1. 安装babel-preset-es2015 npm install babel-preset-es2015 --save-dev 2.在.babelrc文件夹中: & ... 
