??xml version="1.0" encoding="utf-8" standalone="yes"?>
SELECT --从数据库表中索数据行和列
INSERT --向数据库表添加新数据?BR>DELETE --从数据库表中删除数据?BR>UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创徏一个数据库?BR>DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表l构
CREATE VIEW --创徏一个视?BR>DROP VIEW --从数据库中删除视?BR>CREATE INDEX --为数据库表创Z个烦?BR>DROP INDEX --从数据库中删除烦?BR>CREATE PROCEDURE --创徏一个存储过E?BR>DROP PROCEDURE --从数据库中删除存储过E?BR>CREATE TRIGGER --创徏一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库d一个新模式
DROP SCHEMA --从数据库中删除一个模?BR>CREATE DOMAIN --创徏一个数据值域
ALTER DOMAIN --改变域定?BR>DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户讉K权限
DENY --拒绝用户讉K
REVOKE --解除用户讉K权限
--事务控制
COMMIT --l束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据讉K特征
--E序化SQL
DECLARE --为查询设定游?BR>EXPLAN --为查询描q数据访问计?BR>OPEN --索查询结果打开一个游?BR>FETCH --索一行查询结?BR>CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变?BR>declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开?/P>
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符?x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ??then e_wage*1.08
when job_level = ??then e_wage*1.07
when job_level = ??then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的?BR>while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的?BR>select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--?{待1 时2 分零3 U后才执行SELECT 语句
waitfor delay ?1:02:03?BR>select * from employee
--?{到晚上11 炚w8 分后才执行SELECT 语句
waitfor time ?3:08:00?BR>select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在用like关键字的where子句中用通配W?
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序Qdesc-降序Qasc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查?BR>--------- 除非能确保内层select只返回一个行的|
--------- 否则应在外层where子句中用一个in限定W?BR>select distinct column_name form table_name --------- distinct指定索独有的列|不重?BR>select stocknumber ,stocknumber + 10 = stocknumber + 10 from table_name
select stockname , stocknumber = count(*) from table_name group by stockname
--------- group by 表按行分组,指定列中有相同的?BR>having count(*) = 2 --------- having选定指定的组
select *
from table1, table2
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 叛_部连?
select stockname from table1
union [all] ----- union合ƈ查询l果集,all-保留重复?BR>select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value (xxx,xxxx)
value (select Stockname , Stocknumber from Stock_table2)---value为select语句
***update***
update table_name set Stockname = xxx [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name ----------- 删除表中所有行Q仍保持表的完整?BR>drop table table_name --------------- 完全删除?/P>
***alter table*** --- 修改数据库表l构
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 昄表已有特?BR>create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 实现删除列的ҎQ创建新表)
alter table table_name drop constraint Stockname_default ---- 删除Stockname的defaultU束
***function(/*常用函数*/)***
----l计函数----
***G --求^均?BR>COUNT --l计数目
MAX --求最大?BR>MIN --求最?BR>SUM --求和
--***G
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函数q回表达式中所有数据的标准?/P>
--STDEVP()
--STDEVP()函数q回M标准?/P>
--VAR()
--VAR()函数q回表达式中所有值的l计变异?/P>
--VARP()
--VARP()函数q回M变异?/P>
----术函数----
/***三角函数***/
SIN(float_expression) --q回以弧度表C的角的正u
COS(float_expression) --q回以弧度表C的角的余u
TAN(float_expression) --q回以弧度表C的角的正切
COT(float_expression) --q回以弧度表C的角的余切
/***反三角函?**/
ASIN(float_expression) --q回正u是FLOAT 值的以弧度表C的?BR>ACOS(float_expression) --q回余u是FLOAT 值的以弧度表C的?BR>ATAN(float_expression) --q回正切是FLOAT 值的以弧度表C的?BR>ATAN2(float_expression1,float_expression2)
--q回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度{换ؓ角度q回与表辑ּ相同的数据类型可?BR>--INTEGER/MONEY/REAL/FLOAT cd
RADIANS(numeric_expression) --把角度{换ؓ弧度q回与表辑ּ相同的数据类型可?BR>--INTEGER/MONEY/REAL/FLOAT cd
EXP(float_expression) --q回表达式的指数?BR>LOG(float_expression) --q回表达式的自然Ҏ?BR>LOG10(float_expression)--q回表达式的?0 为底的对数?BR>SQRT(float_expression) --q回表达式的qx?BR>/***取近似值函?**/
CEILING(numeric_expression) --q回>=表达式的最整数返回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
FLOOR(numeric_expression) --q回<=表达式的最整数返回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
ROUND(numeric_expression) --q回以integer_expression 为精度的四舍五入D回的数据
--cd与表辑ּ相同可ؓINTEGER/MONEY/REAL/FLOAT cd
ABS(numeric_expression) --q回表达式的l对D回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
SIGN(numeric_expression) --试参数的正负号q回0 零? 正数?1 负数q回的数据类?BR>--与表辑ּ相同可ؓINTEGER/MONEY/REAL/FLOAT cd
PI() --q回gؓπ ?.1415926535897936
RAND([integer_expression]) --用Q选的[integer_expression]做种子值得?-1 间的随机点?/P>
----字符串函?---
ASCII() --函数q回字符表达式最左端字符的ASCII 码?BR>CHAR() --函数用于ASCII 码{换ؓ字符
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL ?BR>LOWER() --函数把字W串全部转换为小?BR>UPPER() --函数把字W串全部转换为大?BR>STR() --函数把数值型数据转换为字W型数据
LTRIM() --函数把字W串头部的空格去?BR>RTRIM() --函数把字W串N的空格去?BR>LEFT(),RIGHT(),SUBSTRING() --函数q回部分字符?BR>CHARINDEX(),PATINDEX() --函数q回字符串中某个指定的子串出现的开始位|?BR>SOUNDEX() --函数q回一个四位字W码
--SOUNDEX函数可用来查扑֣音相似的字符串但SOUNDEX函数Ҏ字和汉字均只q回0 ?
DIFFERENCE() --函数q回由SOUNDEX 函数q回的两个字W表辑ּ的值的差异
--0 两个SOUNDEX 函数q回值的W一个字W不?BR>--1 两个SOUNDEX 函数q回值的W一个字W相?BR>--2 两个SOUNDEX 函数q回值的W一二个字符相同
--3 两个SOUNDEX 函数q回值的W一二三个字W相?BR>--4 两个SOUNDEX 函数q回值完全相?/P>
QUOTENAME() --函数q回被特定字W括h的字W串
/*select quotename('abc', '{') quotename('abc')
q行l果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函数q回一个重复character_expression 指定ơ数的字W串
/*select replicate('abc', 3) replicate( 'abc', -2)
q行l果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函数指定的字符串的字符排列序颠?BR>REPLACE() --函数q回被替换了指定子串的字W串
/*select replace('abc123g', '123', 'def')
q行l果如下
----------- -----------
abcdefg*/
SPACE() --函数q回一个有指定长度的空白字W串
STUFF() --函数用另一子串替换字符串指定位|长度的子串
----数据cd转换函数----
CAST() 函数语法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函数语法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
q行l果如下
------------------------------ ------------
199 Jan 15 2000
----日期函数----
DAY() --函数q回date_expression 中的日期?BR>MONTH() --函数q回date_expression 中的月䆾?BR>YEAR() --函数q回date_expression 中的q䆾?BR>DATEADD(<datepart> ,<number> ,<date>)
--函数q回指定日期date 加上指定的额外日期间隔number 产生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函数q回两个指定日期在datepart 斚w的不同之?BR>DATENAME(<datepart> , <date>) --函数以字W串的Ş式返回日期的指定部分
DATEPART(<datepart> , <date>) --函数以整数值的形式q回日期的指定部?BR>GETDATE() --函数以DATETIME 的缺省格式返回系l当前的日期和时?/P>
----pȝ函数----
APP_NAME() --函数q回当前执行的应用程序的名称
COALESCE() --函数q回众多表达式中W一个非NULL 表达式的?BR>COL_LENGTH(<'table_name'>, <'column_name'>) --函数q回表中指定字段的长度?BR>COL_NAME(<table_id>, <column_id>) --函数q回表中指定字段的名U即列名
DATALENGTH() --函数q回数据表达式的数据的实际长?BR>DB_ID(['database_name']) --函数q回数据库的~号
DB_NAME(database_id) --函数q回数据库的名称
HOST_ID() --函数q回服务器端计算机的名称
HOST_NAME() --函数q回服务器端计算机的名称
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函数只在SELECT INTO 语句中用用于插入一个identity column列到新表?BR>/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函数判断所l定的表辑ּ是否为合理日?BR>ISNULL(<check_expression>, <replacement_value>) --函数表辑ּ中的NULL 值用指定值替?BR>ISNUMERIC() --函数判断所l定的表辑ּ是否为合理的数?BR>NEWID() --函数q回一个UNIQUEIDENTIFIER cd的数?BR>NULLIF(<expression1>, <expression2>)
--NULLIF 函数在expression1 与expression2 相等时返回NULL D不相{时则返回expression1 的?/P>
<FRAMESET> <FRAME> <NOFRAMES> <IFRAME> | |||||||||||||||||||||||||||||||||||
?框架概念 Q?/FONT> | |||||||||||||||||||||||||||||||||||
所谓框架便是网는面分成几个框H,同时取得多个 URL。只 ?<FRAMESET> <FRAME> 卛_Q而所有框架标记 要放在一个总v?html ,q个档案只记录了该框?如何划分Q不会显CZQ何资料,所以不必放?<BODY> 标记Q浏览这框架必须dq 案而不是其它框H的档案?lt;FRAMESET> 是用以划分框H,每一框窗׃?<FRAME> ?记所标示Q?lt;FRAME>必须?<FRAMESET> 范围中用。如下例Q?
<frameset cols="50%,*"> </frameset> 此例?<FRAMESET> 把画面分成左右两相等部分Q左便是昄 up2u.htmlQ右边则会显C?me2.html q档案,<FRAME> 标记所标示的框H永q是按由上而下、由左至右的ơ序? 本节?Composer 教室的【运用框架】大部分相同Q只是本节增加了内容及较l,?如其它篇章一样ƈ不会提及|页制作工具Q若馈下学会?HTML 怿你亦不会选用 Composer Q?FrontPage 一cȝ工具了? | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
<FRAMESET> U框架标讎ͼ用以宣告HTML文g为框架模式,q设定视H如何分剌Ӏ? <FRAME> 则只是设定某一个框H内的参数属性? <FRAMESET> 参数讑֮Q?
<FRAME> 参数讑֮Q?
| |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
当别Z用的览器太旧,不支援框架这个功能时Q他看到的将会是一片空白。ؓ了避?q种情况Q可使用 <NOFRAMES> q个标记Q当使用者的览器看不到框架Ӟ他就会看 ?<NOFRAMES> ?</NOFRAMES> 之间的内容,而不是一片空白。这些内容可以是提醒 览转用新的览器的字句Q甚x一个没有框架的|页或能自动切换x有框架的版本 亦可?
应用ҎQ?
若浏览器支援框架Q那堋它不会理会 <noframes> 中的东西Q但若浏览器不支援框Ӟ?g认识所有框架标讎ͼ不明的标C被略q,标记包围的东西便被解d来,所以放?<noframes>范围内的文字会被昄? | |||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||
q标记只适用?IE?/FONT> 它的作用是在一늽中间插入一个框H以昄另一个文件。它?一个围堉|讎ͼ但围著的字句只有在浏览器不支?iframe 标记时才会显C,?lt;noframes> 一P可以放些提醒字句之类。通常 iframe 配合一个L认浏览器?Java Script 会较好,?javascript 认出该浏览器q Internet Explorer 便会切换臛_一版本?
<iframe> 的参数设定如下:
|
|
|
|
1. package bookstore; 2. import javax.Servlet.http.HttpSessionBindingListener; 3. import javax.servlet.http.HttpSessionBindingEvent; 4. import java.sql.*; 5. import java.text.SimpleDate表单at; 6. import java.util.Date; 7. 8. public class User implements HttpSessionBindingListener 9. { 10. ?BR>11. private String loginDatetime;//用户d旉 12. ?BR>13. public void valueBound(HttpSessionBindingEvent event) 14. { 15. Connection conn = null; 16. String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " + 17. " values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )"; 18. try 19. { 20. conn = DBConnection.getConnection(); 21. PreparedStatement pStat = conn.prepareStatement(sqlStr); 22. loginDatetime = getCurrDatetimeStr(); //当前旉?BR>23. pStat.setString(1, userId); 24. pStat.setString(2, loginDatetime); 25. pStat.executeUpdate(); 26. 27. } catch (SQLException e) 28. { 29. throw new RuntimeException( 30. "用户登陆日志写入出错"); 31. } finally 32. { 33. try 34. { 35. if (conn != null) 36. { 37. conn.close(); 38. } 39. } catch (SQLException ex) 40. { 41. ex.printStackTrace(); 42. } 43. } 44. } 45. 46. public void valueUnbound(HttpSessionBindingEvent event) 47. { 48. Connection conn = null; 49. String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " + 50. " where USER_ID=? and DT_LOGIN = ?"; 51. try 52. { 53. conn = DBConnection.getConnection(); 54. PreparedStatement pStat = conn.prepareStatement(sqlStr); 55. pStat.setString(1, getCurrDatetimeStr()); 56. pStat.setString(2, userId); 57. pStat.setString(3, loginDatetime); 58. pStat.executeUpdate(); 59. 60. } catch (SQLException e) 61. { 62. throw new RuntimeException( 63. "用户退出日志写入出?); 64. } finally 65. { 66. try 67. { 68. if (conn != null) 69. { 70. conn.close(); 71. } 72. } catch (SQLException ex) 73. { 74. ex.printStackTrace(); 75. } 76. } 77. } 78. 79. //获取当前旉字串Q以yyyyMMddHHmmss格式q回Q如20050505010101 80. private static String getCurrDatetimeStr() 81. { 82. SimpleDate表单at sdf = new SimpleDate表单at("yyyyMMddHHmmss"); 83. return sdf.表单at(new Date()); 84. } 85. } |
![]() ?26 讄WebE序默认讉K的页?/DIV> |
1. ?BR>2. Qweb-appQ?BR>3. Qdisplay-nameQwebModuleQ?display-nameQ?BR>4. Qwelcome-file-listQ?BR>5. Qwelcome-fileQlogin.jspQ?welcome-fileQ?BR>6. Q?welcome-file-listQ?/B> 7. ?BR>8. Q?web-appQ?/TD> |
![]() ?27 讄在Rebuild工程或Web模块时创建WAR案文g |
![]() ?28 部v后login.jsp的访问效?/DIV> |
--??nbsp; ??
--数据操作
SELECT --从数据库表中索数据行和列
INSERT --向数据库表添加新数据?
DELETE --从数据库表中删除数据?
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创徏一个数据库?
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表l构
CREATE VIEW --创徏一个视?
DROP VIEW --从数据库中删除视?
CREATE INDEX --为数据库表创Z个烦?
DROP INDEX --从数据库中删除烦?
CREATE PROCEDURE --创徏一个存储过E?
DROP PROCEDURE --从数据库中删除存储过E?
CREATE TRIGGER --创徏一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库d一个新模式
DROP SCHEMA --从数据库中删除一个模?
CREATE DOMAIN --创徏一个数据值域
ALTER DOMAIN --改变域定?
DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户讉K权限
DENY --拒绝用户讉K
REVOKE --解除用户讉K权限
--事务控制
COMMIT --l束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据讉K特征
--E序化SQL
DECLARE --为查询设定游?
EXPLAN --为查询描q数据访问计?
OPEN --索查询结果打开一个游?
FETCH --索一行查询结?
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变?
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开?
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符?x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ??then e_wage*1.08
when job_level = ??then e_wage*1.07
when job_level = ??then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的?
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的?
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--?{待1 时2 分零3 U后才执行SELECT 语句
waitfor delay ?1:02:03?
select * from employee
--?{到晚上11 炚w8 分后才执行SELECT 语句
waitfor time ?3:08:00?
select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在用like关键字的where子句中用通配W?
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序Qdesc-降序Qasc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查?
--------- 除非能确保内层select只返回一个行的|
--------- 否则应在外层where子句中用一个in限定W?
select distinct column_name form table_name --------- distinct指定索独有的列|不重?
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 表按行分组,指定列中有相同的?
having count(*) = 2 --------- having选定指定的组
select *
from table1, table2
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 叛_部连?
select stockname from table1
union [all] ----- union合ƈ查询l果集,all-保留重复?
select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value为select语句
***update***
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name ----------- 删除表中所有行Q仍保持表的完整?
drop table table_name --------------- 完全删除?
***alter table*** --- 修改数据库表l构
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 昄表已有特?
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 实现删除列的ҎQ创建新表)
alter table table_name drop constraint Stockname_default ---- 删除Stockname的defaultU束
***function(/*常用函数*/)***
----l计函数----
AVG --求^均?
COUNT --l计数目
MAX --求最大?
MIN --求最?
SUM --求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函数q回表达式中所有数据的标准?
--STDEVP()
--STDEVP()函数q回M标准?
--VAR()
--VAR()函数q回表达式中所有值的l计变异?
--VARP()
--VARP()函数q回M变异?
----术函数----
/***三角函数***/
SIN(float_expression) --q回以弧度表C的角的正u
COS(float_expression) --q回以弧度表C的角的余u
TAN(float_expression) --q回以弧度表C的角的正切
COT(float_expression) --q回以弧度表C的角的余切
/***反三角函?**/
ASIN(float_expression) --q回正u是FLOAT 值的以弧度表C的?
ACOS(float_expression) --q回余u是FLOAT 值的以弧度表C的?
ATAN(float_expression) --q回正切是FLOAT 值的以弧度表C的?
ATAN2(float_expression1,float_expression2)
--q回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度{换ؓ角度q回与表辑ּ相同的数据类型可?
--INTEGER/MONEY/REAL/FLOAT cd
RADIANS(numeric_expression) --把角度{换ؓ弧度q回与表辑ּ相同的数据类型可?
--INTEGER/MONEY/REAL/FLOAT cd
EXP(float_expression) --q回表达式的指数?
LOG(float_expression) --q回表达式的自然Ҏ?
LOG10(float_expression)--q回表达式的?0 为底的对数?
SQRT(float_expression) --q回表达式的qx?
/***取近似值函?**/
CEILING(numeric_expression) --q回>=表达式的最整数返回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
FLOOR(numeric_expression) --q回<=表达式的最整数返回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
ROUND(numeric_expression) --q回以integer_expression 为精度的四舍五入D回的数据
--cd与表辑ּ相同可ؓINTEGER/MONEY/REAL/FLOAT cd
ABS(numeric_expression) --q回表达式的l对D回的数据cd与表辑ּ相同可ؓ
--INTEGER/MONEY/REAL/FLOAT cd
SIGN(numeric_expression) --试参数的正负号q回0 零? 正数?1 负数q回的数据类?
--与表辑ּ相同可ؓINTEGER/MONEY/REAL/FLOAT cd
PI() --q回gؓπ ?.1415926535897936
RAND([integer_expression]) --用Q选的[integer_expression]做种子值得?-1 间的随机点?
----字符串函?---
ASCII() --函数q回字符表达式最左端字符的ASCII 码?
CHAR() --函数用于ASCII 码{换ؓ字符
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL ?
LOWER() --函数把字W串全部转换为小?
UPPER() --函数把字W串全部转换为大?
STR() --函数把数值型数据转换为字W型数据
LTRIM() --函数把字W串头部的空格去?
RTRIM() --函数把字W串N的空格去?
LEFT(),RIGHT(),SUBSTRING() --函数q回部分字符?
CHARINDEX(),PATINDEX() --函数q回字符串中某个指定的子串出现的开始位|?
SOUNDEX() --函数q回一个四位字W码
--SOUNDEX函数可用来查扑֣音相似的字符串但SOUNDEX函数Ҏ字和汉字均只q回0 ?nbsp;
DIFFERENCE() --函数q回由SOUNDEX 函数q回的两个字W表辑ּ的值的差异
--0 两个SOUNDEX 函数q回值的W一个字W不?
--1 两个SOUNDEX 函数q回值的W一个字W相?
--2 两个SOUNDEX 函数q回值的W一二个字符相同
--3 两个SOUNDEX 函数q回值的W一二三个字W相?
--4 两个SOUNDEX 函数q回值完全相?
QUOTENAME() --函数q回被特定字W括h的字W串
/*select quotename('abc', '{') quotename('abc')
q行l果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函数q回一个重复character_expression 指定ơ数的字W串
/*select replicate('abc', 3) replicate( 'abc', -2)
q行l果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函数指定的字符串的字符排列序颠?
REPLACE() --函数q回被替换了指定子串的字W串
/*select replace('abc123g', '123', 'def')
q行l果如下
----------- -----------
abcdefg*/
SPACE() --函数q回一个有指定长度的空白字W串
STUFF() --函数用另一子串替换字符串指定位|长度的子串
----数据cd转换函数----
CAST() 函数语法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函数语法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
q行l果如下
------------------------------ ------------
199 Jan 15 2000
----日期函数----
DAY() --函数q回date_expression 中的日期?
MONTH() --函数q回date_expression 中的月䆾?
YEAR() --函数q回date_expression 中的q䆾?
DATEADD(<datepart> ,<number> ,<date>)
--函数q回指定日期date 加上指定的额外日期间隔number 产生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函数q回两个指定日期在datepart 斚w的不同之?
DATENAME(<datepart> , <date>) --函数以字W串的Ş式返回日期的指定部分
DATEPART(<datepart> , <date>) --函数以整数值的形式q回日期的指定部?
GETDATE() --函数以DATETIME 的缺省格式返回系l当前的日期和时?
----pȝ函数----
APP_NAME() --函数q回当前执行的应用程序的名称
COALESCE() --函数q回众多表达式中W一个非NULL 表达式的?
COL_LENGTH(<'table_name'>, <'column_name'>) --函数q回表中指定字段的长度?
COL_NAME(<table_id>, <column_id>) --函数q回表中指定字段的名U即列名
DATALENGTH() --函数q回数据表达式的数据的实际长?
DB_ID(['database_name']) --函数q回数据库的~号
DB_NAME(database_id) --函数q回数据库的名称
HOST_ID() --函数q回服务器端计算机的名称
HOST_NAME() --函数q回服务器端计算机的名称
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函数只在SELECT INTO 语句中用用于插入一个identity column列到新表?
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函数判断所l定的表辑ּ是否为合理日?
ISNULL(<check_expression>, <replacement_value>) --函数表辑ּ中的NULL 值用指定值替?
ISNUMERIC() --函数判断所l定的表辑ּ是否为合理的数?
NEWID() --函数q回一个UNIQUEIDENTIFIER cd的数?
NULLIF(<expression1>, <expression2>)
--NULLIF 函数在expression1 与expression2 相等时返回NULL D不相{时则返回expression1 的?
_֦SQL语句
_֦SQL语句
说明Q复制表(只复制结?源表名:a 新表名:b)
SQL: select * into b from a where 1<>1
说明Q拷贝表(拯数据,源表名:a 目标表名Qb)
SQL: insert into b(a, b, c) select d,e,f from b;
说明Q显C文章、提交h和最后回复时?
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
说明Q外q接查询(表名1Qa 表名2Qb)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
说明Q日E安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时?getdate())>5
说明Q两张关联表Q删除主表中已经在副表中没有的信?
SQL:
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
说明Q?-
SQL:
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM TABLE1,
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
WHERE X.NUM = Y.NUM Q?Q?
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM
说明Q?-
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and pdU?'"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源?高考Ll?
说明Q?
从数据库中去一q的各单位电话费l计(电话费定额贺电化肥清单两个表来源Q?
SQL:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
FROM TELFEESTAND a, TELFEE b
WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
说明Q四表联查问题:
SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
说明Q得到表中最的未用的ID?
SQL:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
CONCAT(,)
c1,c2均ؓ字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓnullQ则q回null。他和操作符||q回的结果相?BR>select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda
INITCAP()
c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?BR>select INITCAP('veni,vedi,vici') Ceasar from dualCeasarVeni,Vedi,Vici
INSTR(,[,QiQ[,]])
c1,c2均ؓ字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ1.
select INSTR('Mississippi','i',3,3) from dualINSTR('MISSISSIPPI','I',3,3)11select INSTR('Mississippi','i',-2,3) from dualINSTR('MISSISSIPPI','I',3,3)2
INSTRB(,[,i[,j])
与INSTRQ)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()
LENGTH()
c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?BR>select LENGTH('Ipso Facto') ergo from dualergo10
LENGTHb()
与LENGTH()一Pq回字节?BR>
lower()
q回c的小写字W,l常出现在where子串?BR>select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'COLORNAMEWinterwhite
LPAD(,QiQ[,])
c1,c2均ؓ字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空|参见RPAD?BR>select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe
LTRIM(,)
把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃会改变?BR>select LTRIM('Mississippi','Mis') from dualLTRppi
RPAD(,QiQ[,])
在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空?其他与LPAD怼
RTRIM(,)
把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃会改变?BR>
REPLACE(,[,])
c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?BR>select REPLACE('uptown','up','down') from dualREPLACEdowntown
STBSTR(,QiQ[,])
c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓj的子字符Ԍ如果j为空Q则直到串的N?BR>select SUBSTR('Message',1,4) from dualSUBSMess
SUBSTRB(,QiQ[,])
与SUBSTR大致相同Q只是I,J是以字节计算?BR>
SOUNDEX()
q回与c1发音怼的词
select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dualDawes Daws DawsonD200 D200 D250
TRANSLATE(,,)
c1中与c2相同的字W以c3代替
select TRANSLATE('fumble','uf','ar') test from dualTEXTramble
TRIM([[]] from c3)
c3串中的第一个,最后一个,或者都删除?BR>select TRIM(' space padded ') trim from dual TRIMspace padded
UPPER()
q回c1的大写,常出现where子串?BR>select name from dual where UPPER(name) LIKE 'KI%'NAMEKING
单行数字函数
单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数?BR>
ABS()
q回n的绝对?BR>
ACOS()
反余玄函敎ͼq回-1?之间的数。n表示弧度
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0
ASIN()
反正玄函敎ͼq回-1?Qn表示弧度
ATAN()
反正切函敎ͼq回n的反正切|n表示弧度?BR>
CEIL()
q回大于或等于n的最整数?BR>
COS()
q回n的余玄|n为弧?BR>
COSH()
q回n的双曲余玄|n 为数字?BR>select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847
EXP()
q回e的nơ幂Qe=2.71828183.
FLOOR()
q回于{于N的最大整数?BR>
LN()
q回N的自然对敎ͼN必须大于0
LOG(,)
q回以n1为底n2的对?BR>
MOD()
q回n1除以n2的余敎ͼ
POWER(,)
q回n1的n2ơ方
ROUND(,)
q回舍入数点右边n2位的n1的|n2的缺省gؓ0Q这回将数Ҏ接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?BR>select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54
SIGN()
如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.
SINQ?
q回n的正玄?n为弧度?BR>
SINH()
q回n的双曲正玄?n为弧度?BR>
SQRT()
q回n的^Ҏ,n为弧?BR>
TANQ?
q回n的正切?n为弧?BR>
TANH()
q回n的双曲正切?n为弧?BR>
TRUNC(,)
q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时会将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?BR>
单行日期函数
单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?BR>
ADD_MONTHS(,QiQ?
q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会截去数点后面的部分?BR>
LAST_DAY()
函数q回包含日期d的月份的最后一?
MONTHS_BETWEEN(,)
q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则会返回的l果包含一个分数?BR>
NEW_TIME(,,)
d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?BR>NEXT_DAY(,)
q回日期d后由dowl出的条件的W一天,dow使用当前会话中给出的语言指定了一周中的某一天,q回的时间分量与d的时间分量相同?BR>select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004
ROUND([,])
日期d按照fmt指定的格式舍入,fmt为字W串?BR>
SYADATE
函数没有参数Q返回当前日期和旉?BR>
TRUNC([,])
q回由fmt指定的单位的日期d.
单行转换函数
单行转换函数用于操作多数据类型,在数据类型之间进行{换?BR>
CHARTORWID()
c 使一个字W串Q函数将c转换为RWID数据cd?BR>SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA')
CONVERT(,[,])
c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓdset字符集,sset的缺省设|ؓ数据库的字符集?BR>
HEXTORAW()
x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?BR>
RAWTOHEX()
x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ16q制的数据类型?BR>
ROWIDTOCHAR()
函数ROWID数据cd转换为CHAR数据cd?BR>
TO_CHAR([[,)
x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及货币W号?BR>NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"
TO_DATE([,[,Q?BR> c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?BR>
TO_MULTI_BYTE()
c表示一个字W串Q函数将c的担子截字符转换成多字节字符?BR>
TO_NUMBER([,[,)
c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?BR>
TO_SINGLE_BYTE()
字W串c中得多字节字W{化成{h的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?BR>
其它单行函数
BFILENAME(
,)
dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?BR>
DECODE(,,[,,,[])
x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?BR>
DUMP(,[,[,[,]]])
x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?BR>
EMPTY_BLOB()
该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?BR>
EMPTY_CLOB()
该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?BR>
GREATEST()
exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?BR>
LEAST()
exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?
UID
该函数没有参敎ͼq回唯一标示当前数据库用L整数?BR>
USER
q回当前用户的用户名
USERENV()
Zoptq回包含当前会话信息。opt的可选gؓQ?BR>
ISDBA 会话中SYSDBA脚色响应Q返回TRUE
SESSIONID q回审计会话标示W?BR> ENTRYID q回可用的审计项标示W?
INSTANCE 在会话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?BR> LANGUAGE q回语言、地域、数据库讄的字W集?BR> LANG q回语言名称的ISO~写?BR> TERMINAL 为当前会话用的l端或计机q回操作pȝ的标C符?BR>
VSIZE()
x是一个表辑ּ。返回x内部表示的字节数?BR>SQL中的l函?BR>
l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.
l(多行Q函?BR>
与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?BR>
AVG([{DISYINCT|ALL}])
q回数值的q_倹{缺省设|ؓALL.
SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413
COUNT({*|DISTINCT|ALL} )
q回查询中行的数目,~省讄是ALL,*表示q回所有的行?BR>
MAX([{DISTINCT|ALL}])
q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?BR>
MIN([{DISTINCT|ALL}])
q回选择列表目的最倹{?BR>
STDDEV([{DISTINCT|ALL}])
q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?BR>
SUM([{DISTINCT|ALL}])
q回选择列表目的数值的d?BR>
VARIANCE([{DISTINCT|ALL}])
q回选择列表目的统计方差?BR>
用GROUP BYl数据分l?BR>
正如题目暗示的那L函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ一cR?BR>select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982
在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?BR>select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982
用HAVING子句限制分组数据
现在你已l知道了在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:
错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk
q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ是用HAVING语句Q?BR>SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;
嵌套函数
函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可l承的执行过E。但函数的优先权只是Z位置Q函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODEq样的能被用于逻辑判断语句IF....THEN...ELSE的函数?BR>
嵌套函数可以包括在组函数中嵌套单行函敎ͼ或者组函数嵌套入单行函数或l函C。比如下面的例子Q?BR>SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2