1、數據庫的登陸sql
2、數據庫經常使用語數據庫
3、測試表的建立,測試數據初始化編程
4、常見命令介紹瀏覽器
5、測試緩存
user:jeffrey
sn:jeffreysession
user:system
sn:jeffreyoracle
瀏覽器中輸入:
http://127.0.0.1:8080/apex
管理員登錄
user:sys
sn:jeffrey編程語言
打開服務列表:
win+r打開運行框,輸入services.msc
OracleServiceXE服務必定要是打開的,要否則oracle根本登陸不了。
OracleXETNSLintener服務是在咱們使用JDBC的時候須要打開的一個服務。編輯器
建立數據庫用戶:
user:briup
sn:briupide
-------------------------
打開服務列表:
運行框中輸入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天仍是2九、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;