oracle日期加一天,oracle日期加一天跳过节假日

http://www.itjxue.com  2023-01-07 03:21  来源:未知  点击次数: 

sql按日期时间统计次数的语句怎么写?

1、当日12~次日12点,可以把时间加上12个小时再计算,就是到次日12点再结算。

2、再根据处理后的日期group by。

3、获取group by以后的记录条数即可。

完整sql如下,在SqlServer2008下测试通过:

select?count(*)?as?'消费次数'?from?(

select?

[卡号],

CONVERT(varchar(10),DATEADD(hour,12,[消费时间]),101)?as?'结算日期',

COUNT(*)as?'次数'

from?[消费明细]

where?[卡号]='001'

group?by?

[卡号],

CONVERT(varchar(10),DATEADD(hour,12,[消费时间]),101)

)t1

谁有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 32

2.CHR

给出整数,返回对应的字符;

SQL select chr(54740) zhao,chr(65) chr65 from dual;

ZH C

-- -

赵 A

3.CONCAT

连接两个字符串;

SQL select concat('010-','88888888')||'转23' 高乾竞电话 from dual;

高乾竞电话

----------------

010-88888888转23

4.INITCAP

返回字符串并将字符串的第一个字母变为大写;

SQL select initcap('smith') upp from dual;

UPP

-----

Smith

5.INSTR(C1,C2,I,J)

在一个字符串中搜索指定的字符,返回发现指定的字符的位置;

C1 被搜索的字符串

C2 希望搜索的字符串

I 搜索的开始位置,默认为1

J 出现的位置,默认为1

SQL select instr('oracle traning','ra',1,2) instring from dual;

INSTRING

---------

9

6.LENGTH

返回字符串的长度;

SQL select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;

NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))

------ ------------ ---------------- ------------ --------- --------------------

高乾竞 3 北京市海锭区 6 9999.99 7

7.LOWER

返回字符串,并将所有的字符小写

SQL select lower('AaBbCcDd')AaBbCcDd from dual;

AABBCCDD

--------

aabbccdd

8.UPPER

返回字符串,并将所有的字符大写

SQL select upper('AaBbCcDd') upper from dual;

UPPER

--------

AABBCCDD

9.RPAD和LPAD(粘贴字符)

RPAD 在列的右边粘贴字符

LPAD 在列的左边粘贴字符

SQL select lpad(rpad('gao',10,'*'),17,'*')from dual;

LPAD(RPAD('GAO',1

-----------------

*******gao*******

不够字符则用*来填满

10.LTRIM和RTRIM

LTRIM 删除左边出现的字符串

RTRIM 删除右边出现的字符串

SQL select ltrim(rtrim(' gao qian jing ',' '),' ') from dual;

LTRIM(RTRIM('

-------------

gao qian jing

11.SUBSTR(string,start,count)

取子字符串,从start开始,取count个

SQL select substr('13088888888',3,8) from dual;

SUBSTR('

--------

08888888

12.REPLACE('string','s1','s2')

string 希望被替换的字符或变量

s1 被替换的字符串

s2 要替换的字符串

SQL select replace('he love you','he','i') from dual;

REPLACE('H

----------

i love you

13.SOUNDEX

返回一个与给定的字符串读音相同的字符串

SQL create table table1(xm varchar(8));

SQL insert into table1 values('weather');

SQL insert into table1 values('wether');

SQL insert into table1 values('gao');

SQL select xm from table1 where soundex(xm)=soundex('weather');

XM

--------

weather

wether

14.TRIM('s' from 'string')

LEADING 剪掉前面的字符

TRAILING 剪掉后面的字符

如果不指定,默认为空格符

15.ABS

返回指定值的绝对值

SQL select abs(100),abs(-100) from dual;

ABS(100) ABS(-100)

--------- ---------

100 100

16.ACOS

给出反余弦的值

SQL select acos(-1) from dual;

ACOS(-1)

---------

3.1415927

17.ASIN

给出反正弦的值

SQL select asin(0.5) from dual;

ASIN(0.5)

---------

.52359878

18.ATAN

返回一个数字的反正切值

SQL select atan(1) from dual;

ATAN(1)

---------

.78539816

19.CEIL

返回大于或等于给出数字的最小整数

SQL select ceil(3.1415927) from dual;

CEIL(3.1415927)

---------------

4

20.COS

返回一个给定数字的余弦

SQL select cos(-3.1415927) from dual;

COS(-3.1415927)

---------------

-1

21.COSH

返回一个数字反余弦值

SQL select cosh(20) from dual;

COSH(20)

---------

242582598

22.EXP

返回一个数字e的n次方根

SQL select exp(2),exp(1) from dual;

EXP(2) EXP(1)

--------- ---------

7.3890561 2.7182818

23.FLOOR

对给定的数字取整数

SQL select floor(2345.67) from dual;

FLOOR(2345.67)

--------------

2345

24.LN

返回一个数字的对数值

SQL select ln(1),ln(2),ln(2.7182818) from dual;

LN(1) LN(2) LN(2.7182818)

--------- --------- -------------

0 .69314718 .99999999

25.LOG(n1,n2)

返回一个以n1为底n2的对数

SQL select log(2,1),log(2,4) from dual;

LOG(2,1) LOG(2,4)

--------- ---------

0 2

26.MOD(n1,n2)

返回一个n1除以n2的余数

SQL select mod(10,3),mod(3,3),mod(2,3) from dual;

MOD(10,3) MOD(3,3) MOD(2,3)

--------- --------- ---------

1 0 2

27.POWER

返回n1的n2次方根

SQL select power(2,10),power(3,3) from dual;

POWER(2,10) POWER(3,3)

----------- ----------

1024 27

28.ROUND和TRUNC

按照指定的精度进行舍入

SQL select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;

ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)

----------- ------------ ----------- ------------

56 -55 55 -55

29.SIGN

取数字n的符号,大于0返回1,小于0返回-1,等于0返回0

SQL select sign(123),sign(-100),sign(0) from dual;

SIGN(123) SIGN(-100) SIGN(0)

--------- ---------- ---------

1 -1 0

30.SIN

返回一个数字的正弦值

SQL select sin(1.57079) from dual;

SIN(1.57079)

------------

1

31.SIGH

返回双曲正弦的值

SQL select sin(20),sinh(20) from dual;

SIN(20) SINH(20)

--------- ---------

.91294525 242582598

32.SQRT

返回数字n的根

SQL select sqrt(64),sqrt(10) from dual;

SQRT(64) SQRT(10)

--------- ---------

8 3.1622777

33.TAN

返回数字的正切值

SQL select tan(20),tan(10) from dual;

TAN(20) TAN(10)

--------- ---------

2.2371609 .64836083

34.TANH

返回数字n的双曲正切值

SQL select tanh(20),tan(20) from dual;

TANH(20) TAN(20)

--------- ---------

1 2.2371609

35.TRUNC

按照指定的精度截取一个数

SQL select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;

TRUNC1 TRUNC(124.16666,2)

--------- ------------------

100 124.16

36.ADD_MONTHS

增加或减去月份

SQL select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

TO_CHA

------

200002

SQL select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

TO_CHA

------

199910

37.LAST_DAY

返回日期的最后一天

SQL select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;

TO_CHAR(SY TO_CHAR((S

---------- ----------

2004.05.09 2004.05.10

SQL select last_day(sysdate) from dual;

LAST_DAY(S

----------

31-5月 -04

38.MONTHS_BETWEEN(date2,date1)

给出date2-date1的月份

SQL select months_between('19-12月-1999','19-3月-1999') mon_between from dual;

MON_BETWEEN

-----------

9

SQLselectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;

MON_BETW

---------

-60

39.NEW_TIME(date,'this','that')

给出在this时区=other时区的日期和时间

SQL select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time

2 (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;

BJ_TIME LOS_ANGLES

------------------- -------------------

2004.05.09 11:05:32 2004.05.09 18:05:32

40.NEXT_DAY(date,'day')

给出日期date和星期x之后计算下一个星期的日期

SQL select next_day('18-5月-2001','星期五') next_day from dual;

NEXT_DAY

----------

25-5月 -01

41.SYSDATE

用来得到系统的当前日期

SQL select to_char(sysdate,'dd-mm-yyyy day') from dual;

TO_CHAR(SYSDATE,'

-----------------

09-05-2004 星期日

trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒

SQL select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,

2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH HHMM

------------------- -------------------

2004.05.09 11:00:00 2004.05.09 11:17:00

42.CHARTOROWID

将字符数据类型转换为ROWID类型

SQL select rowid,rowidtochar(rowid),ename from scott.emp;

ROWID ROWIDTOCHAR(ROWID) ENAME

------------------ ------------------ ----------

AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH

AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN

AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD

AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

43.CONVERT(c,dset,sset)

将源字符串 sset从一个语言字符集转换到另一个目的dset字符集

SQL select convert('strutz','we8hp','f7dec') "conversion" from dual;

conver

------

strutz

44.HEXTORAW

将一个十六进制构成的字符串转换为二进制

45.RAWTOHEXT

将一个二进制构成的字符串转换为十六进制

46.ROWIDTOCHAR

将ROWID数据类型转换为字符类型

47.TO_CHAR(date,'format')

SQL select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2004/05/09 21:14:41

48.TO_DATE(string,'format')

将字符串转化为ORACLE中的一个日期

49.TO_MULTI_BYTE

将字符串中的单字节字符转化为多字节字符

SQL select to_multi_byte('高') from dual;

TO

--

50.TO_NUMBER

将给出的字符转换为数字

SQL select to_number('1999') year from dual;

YEAR

---------

1999

51.BFILENAME(dir,file)

指定一个外部二进制文件

SQLinsert into file_tb1 values(bfilename('lob_dir1','image1.gif'));

52.CONVERT('x','desc','source')

将x字段或变量的源source转换为desc

SQL select sid,serial#,username,decode(command,

2 0,'none',

3 2,'insert',

4 3,

5 'select',

6 6,'update',

7 7,'delete',

8 8,'drop',

9 'other') cmd from v$session where type!='background';

SID SERIAL# USERNAME CMD

--------- --------- ------------------------------ ------

1 1 none

2 1 none

3 1 none

4 1 none

5 1 none

6 1 none

7 1275 none

8 1275 none

9 20 GAO select

10 40 GAO none

53.DUMP(s,fmt,start,length)

DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值

SQL col global_name for a30

SQL col dump_string for a50

SQL set lin 200

SQL select global_name,dump(global_name,1017,8,5) dump_string from global_name;

GLOBAL_NAME DUMP_STRING

------------------------------ --------------------------------------------------

ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

54.EMPTY_BLOB()和EMPTY_CLOB()

这两个函数都是用来对大数据类型字段进行初始化操作的函数

55.GREATEST

返回一组表达式中的最大值,即比较字符的编码大小.

SQL select greatest('AA','AB','AC') from dual;

GR

--

AC

SQL select greatest('啊','安','天') from dual;

GR

--

56.LEAST

返回一组表达式中的最小值

SQL select least('啊','安','天') from dual;

LE

--

57.UID

返回标识当前用户的唯一整数

SQL show user

USER 为"GAO"

SQL select username,user_id from dba_users where user_id=uid;

USERNAME USER_ID

------------------------------ ---------

GAO 25

58.USER

返回当前用户的名字

SQL select user from dual;

USER

------------------------------

GAO

59.USEREVN

返回当前用户环境的信息,opt可以是:

ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE

ISDBA 查看当前用户是否是DBA如果是则返回true

SQL select userenv('isdba') from dual;

USEREN

------

FALSE

SQL select userenv('isdba') from dual;

USEREN

------

TRUE

SESSION

返回会话标志

SQL select userenv('sessionid') from dual;

USERENV('SESSIONID')

--------------------

152

ENTRYID

返回会话人口标志

SQL select userenv('entryid') from dual;

USERENV('ENTRYID')

------------------

INSTANCE

返回当前INSTANCE的标志

SQL select userenv('instance') from dual;

USERENV('INSTANCE')

-------------------

1

LANGUAGE

返回当前环境变量

SQL select userenv('language') from dual;

USERENV('LANGUAGE')

----------------------------------------------------

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

LANG

返回当前环境的语言的缩写

SQL select userenv('lang') from dual;

USERENV('LANG')

----------------------------------------------------

ZHS

TERMINAL

返回用户的终端或机器的标志

SQL select userenv('terminal') from dual;

USERENV('TERMINA

----------------

GAO

VSIZE(X)

返回X的大小(字节)数

SQL select vsize(user),user from dual;

VSIZE(USER) USER

----------- ------------------------------

6 SYSTEM

60.AVG(DISTINCT|ALL)

all表示对所有的值求平均值,distinct只对不同的值求平均值

SQLWKS create table table3(xm varchar(8),sal number(7,2));

语句已处理。

SQLWKS insert into table3 values('gao',1111.11);

SQLWKS insert into table3 values('gao',1111.11);

SQLWKS insert into table3 values('zhu',5555.55);

SQLWKS commit;

SQL select avg(distinct sal) from gao.table3;

AVG(DISTINCTSAL)

----------------

3333.33

SQL select avg(all sal) from gao.table3;

AVG(ALLSAL)

-----------

2592.59

61.MAX(DISTINCT|ALL)

求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次

SQL select max(distinct sal) from scott.emp;

MAX(DISTINCTSAL)

----------------

5000

62.MIN(DISTINCT|ALL)

求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次

SQL select min(all sal) from gao.table3;

MIN(ALLSAL)

-----------

1111.11

63.STDDEV(distinct|all)

求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差

SQL select stddev(sal) from scott.emp;

STDDEV(SAL)

-----------

1182.5032

SQL select stddev(distinct sal) from scott.emp;

STDDEV(DISTINCTSAL)

-------------------

1229.951

64.VARIANCE(DISTINCT|ALL)

求协方差

SQL select variance(sal) from scott.emp;

VARIANCE(SAL)

-------------

1398313.9

65.GROUP BY

主要用来对一组数进行统计

SQL select deptno,count(*),sum(sal) from scott.emp group by deptno;

DEPTNO COUNT(*) SUM(SAL)

--------- --------- ---------

10 3 8750

20 5 10875

30 6 9400

66.HAVING

对分组统计再加限制条件

SQL select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)=5;

DEPTNO COUNT(*) SUM(SAL)

--------- --------- ---------

20 5 10875

30 6 9400

SQL select deptno,count(*),sum(sal) from scott.emp having count(*)=5 group by deptno ;

DEPTNO COUNT(*) SUM(SAL)

--------- --------- ---------

20 5 10875

30 6 9400

67.ORDER BY

用于对查询到的结果进行排序输出

SQL select deptno,ename,sal from scott.emp order by deptno,sal desc;

DEPTNO ENAME SAL

--------- ---------- ---------

10 KING 5000

10 CLARK 2450

10 MILLER 1300

20 SCOTT 3000

20 FORD 3000

20 JONES 2975

20 ADAMS 1100

20 SMITH 800

30 BLAKE 2850

30 ALLEN 1600

30 TURNER 1500

30 WARD 1250

30 MARTIN 1250

30 JAMES 950

里恩EDC系统在临床试验数据处理方面可靠吗?

里恩临床试验电子数据采集系统

里恩临床试验电子数据采集系统

功能特点

具备自主产权EC编辑器

里恩系统内置Edit Check编辑器,用户可根据需求,编写或批量生成相应的编辑核查程序,对研究者录入的数据进行实时在线核查,有问题的数据发送系统质疑,同时允许用户手动发送质疑

支持多版本共存

对于复杂临床试验例如肿瘤试验,可满足同一受试者不同访视采用不同的CRF版本,无需进行数据迁移,系统可自动识别;可为不同中心推送不同版本

质疑分类管理

用户可以使用系统提供的质疑分类管理功能,对质疑进行快速的分类,包括CRA发出的质疑,DM发出的质疑,Medical发出的质疑,系统具备质疑的打开、澄清、关闭的全流程管理和追溯功能,且具备自动关闭质疑的功能

支持批量数据清理

支持批量PI签名、批量SDV、批量Review、批量Lock表单、批量Froze、批量Lock受试者等

稽查轨迹 - 审计追踪

所有的稽查轨迹均保留前后的变化对比,便于数据溯源,保存变动的用户、IP、时间、变化前、变化后等源数据

报表功能

系统支持导出临床试验过程中各种常见统计报表,也支持生成一些自定义报表

药品通用名内置检索

用户录入数据时,药物名称可通过模糊检索来查找相似名称并罗列出可供数据录入人员进行选择的功能

访视提醒

内置静态和动态的访视提醒,静态访视提醒根据设置固定的访视日期前后加减固定天数设置,动态访视提醒根据可变的访视日期前后加减天数来设置

标准规范化的版本迭代流程

每次版本迭代,从需求的提出、审批、再到任务的分解、指派、用例的编写、提交测试单再进行测试,发现BUG、解决BUG、关闭BUG,直到产品的发布。这些操作都具备相应的标准化作业流程

产品优势

数据加密

用https进行数据传输,数据库定期备份,基于角色的权限控制(如数据管理员、申办者、监查员、研究者、CRC等等),数据库锁定与解锁

多样的控件类型

系统内置Radio、Checkbox、Text、TextArea、Date、time等控件,满足研究者录入数据的不同需求,并可对研究者录入的数据进行有效性验证

统一访问入口

一个email账户可跨多个申办方同时参与所有项目,也可在前台选择并切换项目

MedDRA编码

系统集成MedDRA编码字典,能对设定了编码的字段进行自动编码,支持历史同义词编码

SOP规范

系统从项目启动、构建eCRF、编写Edit Check、推送生产环境、eCRF版本变更均具有具体的SOP文件进行规范,防范风险

与随机化系统和研究者系统对接

目前国内独家与中兴正远研究者系统和MagMinDA临床试验随机分组药物追踪管理系统实现无缝对接的EDC公司

支持自定义审核流程

具备内置自定义的数据清理流程,SDV和Review的顺序可自行根据需求设置

实验室参考值支持动态年龄设置

针对长时间的试验周期,数据录入者无需更改年龄,系统内置算法自动计算受试者的动态年龄,使用该年龄匹配实验室的正常值范围

SAS文件直接导出

SAS文件无需经过SAS系统的转译便可一键导出,更便于用户进行核查校对数据

收起

热门搜索

阿塞拜疆亚美尼亚停火

巴基斯坦禁用TikTok

黎巴嫩贝鲁特发生爆炸

贾青发文道歉

赵丽颖切肉切到手抖

25省国庆旅游收入

孙红雷瘦了

药房发错药闪电式找人

爱因斯坦成绩单被公布

熊黛林40岁生日秀身材

方媛跳舞遭嘲讽

英特种部队禁用TikTok

微软允许永久在家办公

美团点评更名为美团

朱一龙回应隐婚生子

韩国进口泡菜来自中国

何炅闻了豆汁后的表情

支付宝回应手机黑产

2020年假期全部结束

16岁女孩担任一日总理

女子景区被蚂蚁咬休克

节后第一天上班

邓超到妇科等体检

大象误食投喂塑料袋

相关推荐

EDC系统临床试验数据管理系统哪家好?_知乎

一、国内外EDC系统的特点 每年国际药物信息大会(DIA)上参展的CRO公司30余家,但是国际一致认可,功能完善,被临床试验行业的一些实力雄厚的制药企业和CRO公司广泛使用的EDC是以下三大系统第一梯队分别是:甲骨文公司的Oracle ...

从医院端切入,斯录欣要做最懂医生的临床试验数据采集系统

在与医生的交流中,赵广发现医生在开展多中心临床试验中的数据分析需求,部分医院虽然配备有国外的EDC系统,但成本高昂,使用不便. “国内的EDC市场更侧重于大型CRO公司和药企,并没有面...

Medidata与南京希麦迪再度强强联手,助力中国临床试验取得新进展_...

Medidata的Rave EDC平台支持整个数据管理生态系统,凭借我们在数据管理方面业界一流的专业技术,我们在临床试验领域独树一帜.Medidata始终以助力我们的中国合作伙伴为己任,帮助它们不断取...

国内外肿瘤大数据公司盘点:谁能解决药企痛点

包括推荐EDC系统与和EHR系统互通、大部分癌症临床试验中可不实用安慰剂对照. 其次随着真实... 数据分析的平台化能力较弱;更多集中在单一方向,多元化数据分析意图的整合较少;价值呈现与价...

真实世界研究火爆,百奥知借力信息化+AI助力药企乘风而上

利用信息化与AI技术一方面可以打通横亘在临床数据

Oracle 函数都有那些?

---------数学函数

1.绝对值

S:select abs(-1) value

O:select abs(-1) value from dual

2.取整(大)

S:select ceiling(-1.001) value

O:select ceil(-1.001) value from dual

3.取整(小)

S:select floor(-1.001) value

O:select floor(-1.001) value from dual

4.取整(截取)

S:select cast(-1.002 as int) value

O:select trunc(-1.002) value from dual

5.四舍五入

S:select round(1.23456,4) value 1.23460

O:select round(1.23456,4) value from dual 1.2346

6.e为底的幂

S:select Exp(1) value 2.7182818284590451

O:select Exp(1) value from dual 2.71828182

7.取e为底的对数

S:select log(2.7182818284590451) value 1

O:select ln(2.7182818284590451) value from dual; 1

8.取10为底对数

S:select log10(10) value 1

O:select log(10,10) value from dual; 1

9.取平方

S:select SQUARE(4) value 16

O:select power(4,2) value from dual 16

10.取平方根

S:select SQRT(4) value 2

O:select SQRT(4) value from dual 2

11.求任意数为底的幂

S:select power(3,4) value 81

O:select power(3,4) value from dual 81

12.取随机数

S:select rand() value

O:select sys.dbms_random.value(0,1) value from dual;

13.取符号

S:select sign(-8) value -1

O:select sign(-8) value from dual -1

----------三角函数相关

14.圆周率

S:SELECT PI() value 3.1415926535897931

O:不知道

15.sin,cos,tan 参数都以弧度为单位

例如:select sin(PI()/2) value 得到1(SQLServer)

16.Asin,Acos,Atan,Atan2 返回弧度

17.弧度角度互换(SQLServer,Oracle不知道)

DEGREES:弧度-〉角度

RADIANS:角度-〉弧度

---------数值间比较

18. 求集合最大值

S:select max(value) value from

(select 1 value

union

select -2 value

union

select 4 value

union

select 3 value)a

O:select greatest(1,-2,4,3) value from dual

19. 求集合最小值

S:select min(value) value from

(select 1 value

union

select -2 value

union

select 4 value

union

select 3 value)a

O:select least(1,-2,4,3) value from dual

20.如何处理null值(F2中的null以10代替)

S:select F1,IsNull(F2,10) value from Tbl

O:select F1,nvl(F2,10) value from Tbl

--------字符串函数

21.求字符序号

S:select ascii('a') value

O:select ascii('a') value from dual

22.从序号求字符

S:select char(97) value

O:select chr(97) value from dual

23.连接

S:select '11'+'22'+'33' value

O:select CONCAT('11','22')||33 value from dual

23.子串位置 --返回3

S:select CHARINDEX('s','sdsq',2) value

O:select INSTR('sdsq','s',2) value from dual

23.模糊子串的位置 --返回2,参数去掉中间%则返回7

// 本文转自 C++Builder 研究 - ;d=dwn1rn

S:select patindex('%d%q%','sdsfasdqe') value

O:oracle没发现,但是instr可以通过第四个参数控制出现次数

select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

24.求子串

S:select substring('abcd',2,2) value

O:select substr('abcd',2,2) value from dual

25.子串代替 返回aijklmnef

S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value

O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

26.子串全部替换

S:Replace

O:select Translate('fasdbfasegas','fa','我' ) value from dual

27.长度

S:len,datalength

O:length

28.大小写转换 lower,upper

29.单词首字母大写

S:没发现

O:select INITCAP('abcd dsaf df') value from dual

30.左补空格(LPAD的第一个参数为空格则同space函数)

S:select space(10)+'abcd' value

O:select LPAD('abcd',14) value from dual

31.右补空格(RPAD的第一个参数为空格则同space函数)

S:select 'abcd'+space(10) value

O:select RPAD('abcd',14) value from dual

32.删除空格

S:ltrim,rtrim

O:ltrim,rtrim,trim

33. 重复字符串

S:select REPLICATE('abcd',2) value

O:没发现

34.发音相似性比较(这两个单词返回值一样,发音相同)

S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')

O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual

SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差

返回0-4,4为同音,1最高

--------------日期函数

35.系统时间

S:select getdate() value

O:select sysdate value from dual

36.前后几日

直接与整数相加减

37.求日期

S:select convert(char(10),getdate(),20) value

O:select trunc(sysdate) value from dual

select to_char(sysdate,'yyyy-mm-dd') value from dual

38.求时间

S:select convert(char(8),getdate(),108) value

O:select to_char(sysdate,'hh24:mm:ss') value from dual

39.取日期时间的其他部分

S:DATEPART 和 DATENAME 函数 (第一个参数决定)

O:to_char函数 第二个参数决定

参数---------------------------------下表需要补充

year yy, yyyy

quarter qq, q (季度)

month mm, m (m O无效)

dayofyear dy, y (O表星期)

day dd, d (d O无效)

week wk, ww (wk O无效)

weekday dw (O不清楚)

Hour hh,hh12,hh24 (hh12,hh24 S无效)

minute mi, n (n O无效)

second ss, s (s O无效)

millisecond ms (O无效)

----------------------------------------------

40.当月最后一天

S:不知道

O:select LAST_DAY(sysdate) value from dual

41.本星期的某一天(比如星期日)

S:不知道

O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

42.字符串转时间

S:可以直接转或者select cast('2004-09-08'as datetime) value

O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

43.求两日期某一部分的差(比如秒)

S:select datediff(ss,getdate(),getdate()+12.3) value

O:直接用两个日期相减(比如d1-d2=12.3)

SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

44.根据差值求新的日期(比如分钟)

S:select dateadd(mi,8,getdate()) value

O:SELECT sysdate+8/60/24 vaule FROM DUAL;

45.求不同时区时间

S:不知道

O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

-----时区参数,北京在东8区应该是Ydt-------

AST ADT 大西洋标准时间

BST BDT 白令海标准时间

CST CDT 中部标准时间

EST EDT 东部标准时间

GMT 格林尼治标准时间

HST HDT 阿拉斯加—夏威夷标准时间

MST MDT 山区标准时间

NST 纽芬兰标准时间

PST PDT 太平洋标准时间

YST YDT YUKON标准时间

Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:

函数 Oracle Microsoft SQL Server

把字符转换为ASCII ASCII ASCII

字串连接 CONCAT (expression + expression)

把ASCII转换为字符 CHR CHAR

返回字符串中的开始字符(左起) INSTR CHARINDEX

把字符转换为小写 LOWER LOWER

把字符转换为大写 UPPER UPPER

填充字符串的左边 LPAD N/A

清除开始的空白 LTRIM LTRIM

清除尾部的空白 RTRIM RTRIM

字符串中的起始模式(pattern) INSTR PATINDEX

多次重复字符串 RPAD REPLICATE

字符串的语音表示 SOUNDEX SOUNDEX

重复空格的字串 RPAD SPACE

从数字数据转换为字符数据 TO_CHAR STR

子串 SUBSTR SUBSTRING

替换字符 REPLACE STUFF

将字串中的每个词首字母大写 INITCAP N/A

翻译字符串 TRANSLATE N/A

字符串长度 LENGTH DATELENGTH or LEN

列表中最大的字符串 GREATEST N/A

列表中最小的字符串 LEAST N/A

如果为NULL则转换字串 NVL ISNULL

日期函数

函数 Oracle Microsoft SQL Server

日期相加 (date column +/- value) or

ADD_MONTHS DATEADD

两个日期的差 (date column +/- value) or

MONTHS_BETWEEN DATEDIFF

当前日期和时间 SYSDATE GETDATE()

一个月的最后一天 LAST_DAY N/A

时区转换 NEW_TIME N/A

日期后的第一个周日 NEXT_DAY N/A

代表日期的字符串 TO_CHAR DATENAME

代表日期的整数 TO_NUMBER

(TO_CHAR)) DATEPART

日期舍入 ROUND CONVERT

日期截断 TRUNC CONVERT

字符串转换为日期 TO_DATE CONVERT

如果为NULL则转换日期 NVL ISNULL

转换函数

函数 Oracle Microsoft SQL Server

数字转换为字符 TO_CHAR CONVERT

字符转换为数字 TO_NUMBER CONVERT

日期转换为字符 TO_CHAR CONVERT

字符转换为日期 TO_DATE CONVERT

16进制转换为2进制 HEX_TO_RAW CONVERT

2进制转换为16进制 RAW_TO_HEX CONVERT

其它行级别的函数

函数 Oracle Microsoft SQL Server

返回第一个非空表达式 DECODE COALESCE

当前序列值 CURRVAL N/A

下一个序列值 NEXTVAL N/A

如果exp1 = exp2, 返回null DECODE NULLIF

用户登录账号ID数字 UID SUSER_ID

用户登录名 USER SUSER_NAME

用户数据库ID数字 UID USER_ID

用户数据库名 USER USER_NAME

当前用户 CURRENT_USER CURRENT_USER

用户环境(audit trail) USERENV N/A

在CONNECT BY子句中的级别 LEVEL N/A

合计函数

函数 Oracle Microsoft SQL Server

Average AVG AVG

Count COUNT COUNT

Maximum MAX MAX

Minimum MIN MIN

Standard deviation STDDEV STDEV or STDEVP

Summation SUM SUM

Variance VARIANCE VAR or VARP

Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:

EXTRACT(YEAR FROM 日期)

关于SQL数据库以及JAVA的一些问题,在线急等

1 付键 也就是FK formary key

程序交流中心,这是专门为新手学习设立的论坛

二、SQL

Structur query language

结构化查询语言,是操作关系型数据库中的对象。

DDL(Data definition language 数据定义语言),用于建表或删表操作,以及对表约束进行修改

create table , alter table , drop table 对表结构的增删操作。

DML(Data manipulation language 数据操作语言),向表中插入纪录,修改纪录

insert , update , delete , merge

transaction ,事务控制语言,由DML语句组成的,commit; ,rollback;

select 查询语句

dcl 授权语句 grant

三、Oracle

DBMS 数据库管理系统

有Oracle提供,还提供AS,应用服务器

DBA 数据库管理员

四、相关操作

1、sqlplus 访问数据库命令(本地访问/远程访问),和数据库建立连接的命令,是数据库操作的环境

sqlplus 用户名/密码

2、show user 显示当前用户的用户名

改变身份可以直接connect 用户名/密码 --- 这个是sqlplus命令

在sqlplus中可以使用 ! 可以在shell和sqlplus间切换,!shell命令 可以在sqlplus中使用shell命令。

实际上是sqlplus开了子进程来执行shell命令。

3、Oracle数据库中的表分两类:用户表(用户使用操作的表),系统表(数据库系统维护的表,也叫数据字典)

对用户表的DDL操作出发了对系统表的DML操作!

五、基本语法

1、select查询语句

select table_name from user_tables;(查询系统表)

以上的查询语句就是查询本用户下所拥有的所有表的表名。

投影操作,只查看选择的字段的信息。

选择操作,查看字段中的特定某些信息。

联接操作,多表查询,通过表间连接,查寻出多表中的信息

(1)select table_name from user_tables;(查询系统表)

以上的查询语句就是查询本用户下所拥有的所有表的表名。

(2)sqlplus的buffer中会缓存最后一条sql语句,可以使用"/"来执行这最后一条sql语句,也可以使用

edit命令来编辑最后一条sql语句。

l命令(list)(sqlplus命令)可以显示buffer中最后一条命令。

sqlplus命令可以缩写

(3)desc [表名]

这是一条sqlplus命令,注意他不是sql语句,这条命令用于查看表的结构。descript的缩写

[字段名] [字段的类型],这是使用完desc命令后显示的表结构。

(4)select [表的字段名1],[表的字段名2], ... from 表名;

select * from 表名; 查寻表中所有字段的信息

(5)关键字不等拆分,sql语句,以及表名,字段名是大小写不敏感的。

sql语句要以";"结尾,来表示sql语句结束,如果不加";"系统不会执行此条sql语句,并提示。

在Oracle中字符显示是左对齐,数值右对齐。

(6)在select 语句中可以使用数学表达式。

select [表达式(必须包含本表字段名)],[...],.... from 表名;

运算的优先级的先乘除后加减,同级自左向右运算,括号改变优先级。

(7)别名

select [字段名或表达式] ["别名"],[...] ["..."],.... from 表名;

可以通过在字段名或表达式后加空格"别名",可以给列,或者表达式结果其别名。

表达别名必须加双引号。

(8)字符串拼接使用||符号

select 目标字段名||" "||目标字段名 from 表名;

注意:在Oracle中的字符串要用'..'包含

别名中需要使用空格,或是大小写敏感时需要用".."包含。

练习:

自己写一条SQL语句,执行的结果是select * from ...;

其中...是每张系统表的表名

即在每张系统表的表名前加“select * from” ,后加“;”

select 'select * from '||table_name||';' from user_tables;

2、处理错误

(1)!oerr ora [错误号] ,系统可以显示错误的原因和如何修改。如果命令错误输入可以使用edit或ed来修改输入错误。

实际上是在编辑缓存文件中的最后一条sql语句。

也可以使用 (change) c /错误字段/正确字段,来进行替换操作进行修改。

只有在Linux平台使用

! 相当于 host ,没有断连接,只是切换了一下,执行shell命令

(2)edit命令来编辑最后一条sql语句。

3、sqlplus设置

set pause on 回车响应,分屏显示,只在本会话中有效

set pause off 关闭分屏显示。

set pause "..." 设置分屏显示的提示信息。

set pause on 先输出提示信息,回车响应,分屏显示

set head off 提头输出关闭

set feed off 结尾输出关闭

set echo off 回写关闭

spool 文件名.sql 写入指定文件

spool off 关闭写入。

4、sql脚本

也就是在文件中写有sql语句的文件,可以在sqlplus中运行。

引入sql脚本

sqlplus 用户名/密码 @sql脚本 (注意:在用户名密码输入结束后一定要加空格然后再写@sql脚本)

在脚本中最后一行写上“exit”,则运行完脚本以后,回到shell上

5、

Oracle中的空值 空值会当无穷大处理,其实空值根本就不会存储,只是看作是无穷大。

Oracle中控制处理函数 NVL(字段名,值),这个字段中的空值替换为指定值,如果不为空,则会返回其原值。

例:select (salary*12)*(NVL(commission_pct,0)/100+1) salary,first_name from s_emp;

distinct关键字,去掉重复行(这个关键字会触发排序操作)

例: select distinct dept_id,title from s_emp;

dept_id与title的联合不唯一

注意:distinct,关键字之后会对from之前的字段进行排重操作。

6、column命令 --- sqlplus命令

column命令 列格式的定义

column 目标列名 查看这个类是否定义了格式

column 目标列名 format a.. 设置列宽。

column last_name heading 'Employee|Name' FORMAT A15

设置题头

这其中的'|'是换行符

column salary justify left format $99,990.00

定义数字显示格式

注意:如果不满足显示的格式,就会把数据显示为"#"

column salary justify left format $00,000.00

会出现$00,928.00 ,用0补齐

column 列名 clear (清除列格式定义)

注意:只有sqlplus命令才有简写,并且在使用sqlplus命令时结尾也不能加分号。

六、选择操作

1、order by

排序子句 ASC(默认,升序) DESC(降序)

order by 目标列名(别名) 排序顺序(不写排序顺序,会默认为升序排序)

例:select first_name from s_emp order by first_name;

select first_name from s_emp order by first_name desc;

注意:升序空值在结果的末尾,降序空值在结果的最前面。

2、where子句

where子句使用在 select ... from ... 后面,用来选择所需(符合条件的)的记录

where后面跟的是表达式 也就是 XXX=XXX, XXX between X and X ,XXX in(X,X,X)

like '...' 通配查询

between ... and ... ,表示结果在这之间,between and是一个闭区间,

也就相当于... = ... and ... = ... 。

!=,,^=,这三个都标识不等于,=,=,=,这些运算符都可以使用。

... in (va1,val2,...) 判断结果是否在这个枚举中存在

like '...' 字符串通配查询,'%'表示多个字符,'_',表示一个字符。

注意:转义的用法:like ‘S\_%’ escape ‘\’

... and ... 表示只有两个条件同时满足

... or ... 表示条件只要满足其中只一就可以

all ... 是要求都满足条件。

not .....,则是可以与以上的条件产生反效果。

空值会对not in造成影响,也就是不等于任何值,但是空值例外。

... is null 使用来判断值是否为空。

注意:Oracle中的字符串是严格区分大小写的。

(1)注意数据类型,数字类型直接写,字符用'......' ,缺省格式的Date可以用'......',只有别名

才用" "包含。

(2)选择合适的运算符

七、单行函数

1.字符函数

字符是大小写敏感的

转小写 lower(字段名) --- 其中的参数可以是一个字符串常量或是一个字段名

转大写 upper(字段名)

首字母大写 initcap(字段名)

字符串拼接 concat(字段1, 字段2)

截取子串 substr(字段名, 起始位置,取字符个数)

dual表,是专门用于函数测试和运算的,他只有一条记录

字符串拼接 concat(...,....)

求指定子串 substr(...,起始位置,取字符个数)

可以使用"-"表示从右向左取,取的时候可以从左往友取。

例:select substr(first_name,-2,2) sub from s_emp;(取后两个)

select substr(first_name,2,2) sub from s_emp;(取前两个)

2,数值函数

四舍五入 round(数据,保留小数点后几位)

可以用负数表示小数点前,0,表示小数点后第一位,也就是保留个位,-1表示个位(保留到十 位)。

例:select round(15.36,1) from dual;

截取数字函数 trunc(数据,保留的位数(小数点后位数)) 截取个位之后补0

例:select trunc(123.456,1) from dual;

3,日期函数

日期格式,

全日期格式 世纪信息,年月日,时分秒。

缺省日期格式,日-月-年 dd-mon-rr

修改当前会话的日期格式,会按照指定的格式输出日期

alter session set nls_date_format='yyyy mm dd hh24:mi:ss';

返回当前日期 sysdate

例:select sysdate from dual;

select sysdate+1 from dual; 获得明天的日期,加1,单位是天

日期是格式敏感的

求两个日期间相隔了多少个月 months_between(date1,date2)

加减指定数量的月份 add_months(date,月数),月数可以为负,负值就是减去相应的月数。

从date日期开始的第一个星期五 next_day(date,FriDay)

返回月末的日期 last_day(date)

截取日期 trunc(date,'年或月或日或时分秒')

例:select next_day(sysdate,2) from dual;

例:select trunc(add_months(sysdate,1),'month') from dual;

ROUND('25-MAY-95','MONTH') 01-JUN-95

ROUND('25-MAY-95 ','YEAR') 01-JAN-95

TRUNC('25-MAY-95 ','MONTH') 01-MAY-95

TRUNC('25-MAY-95 ','YEAR') 01-JAN-95

练习:

返回下个月的第一天的日期

select round(last_day(sysdate),'MONTH') from dual;

select add_months(trunc(sysdate,'MONTH'),1);

4,不同数据类型间转换函数

将日期转成字符 tochar(date,'日期格式')

日期格式要用有效格式,格式大小写敏感 'yyyy mm dd hh24:mi:ss',

'year'(全拼的年),'mm'(数字表示的月) 'month'(全拼的月),'day'(星期的全拼),'ddspth' (日期的全拼) 'yy mm dd'

例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from dual;

将字符转换成数字 to_number('...')

将数字转字符to_char(number,'fmt') fmt是数字格式

将字符串转成日期 to_date('...','日期格式')

例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from dual;

1、等值连接

select [表别名1.字段名1],[表别名2.字段名2],...

from 表1 表别名1 ,表2 表别名2

where 表别名1.字段名3=表别名2.字段名4;

表连接时,当表与表之间有同名字段时,可以加上表名或表的别名,加以区分,使用时要用

表名.字段名或表别名.字段名(列名)。当表的字段名是唯一时,可以不用加上表名或表的别名。

注意:当为表起了别名,就不能再使用表名.字段名。

例:select a.first_name,a.last_name,b.name

from s_emp a,s_dept b

where a.dept_id=b.id;

2、非等值连接

select [表别名1.字段名1],[表别名2.字段名2],...

from 表1 表别名1 ,表2 表别名2

where 表别名1.字段名3 ..... 表别名2.字段名4

....可以使比较运算符,也可以使其他的除了'='的运算符

例:select e.ename, d.grade,e.sal

from emp e,salgrade d

where e.sal between d.losal and d.hisal;

3、自连接

用别名把一张表中的数据分成两部分,然后在使用条件过滤。

select [表别名1.字段名1],[表别名2.字段名2],...

from 表1 表别名1 ,表1 表别名2

where 表别名1.字段名3=表别名2.字段名4;

例:select a.first_name ename,b.first_name cname

from s_emp a,s_emp b

where a.manager_id=b.id;

以上所提到的表连接,都叫做内连接,严格匹配两表的记录。

4、外连接

会使用一方表中的所有记录去和另一格表中的记录按条件匹配,空值也会匹配,这个表中的所有记录都会显示,数据库会模拟出记录去和那些不匹配的记录匹配。

例:select a.first_name enamei,a.id,b.first_name cname,b.id

from s_emp a,s_emp b

where a.manager_id=b.id(+);

即用a表中的数据去匹配b表的,若b表中有null,系统模拟纪录与其匹配

注意:要把那一方的记录全部都显示出来,还有注意条件(+)跟在要全部选出的对端。

外连接的应用:

列出哪个部门没有员工

select e.deptno,d.deptno

from emp e,dept d

where e.deptno(+)=d.deptno

and e.deptno is null;

三、组函数

group 组

group by 分组子句,按指定的分组规则分组 ,这个group by 子句可以跟在 select 语句后或是 having后面。

group by子句也会出发排序操作,会按分组字段排序。

select [组函数或分组的字段名] ,... from 表名 group by [字段名1],[字段名2],.....;

例:select avg(salary) from s_emp group by dept_id;

注意:组函数可以处理一组数据,返回一个值。

组函数会忽略空值。

avg(..),求平均值,sum(..),求和 这两个函数的参数只能是number型的。

以下所提到的函数可以使用任意类型做参数。

count(..),用来统计记录数,可以使用排重命令。count(...)默认使用的是all。

max(..),min(..)求最大值和最小值,

count(*),统计表中记录数。

例:select max(b.name),avg(a.salary), max(c.name)

from s_emp a,s_dept b,s_region c

where a.dept_id=b.id and b.region_id=c.id

group by b.dept_id;

注意:只要写了group by子句,

*** select后就只能用group by后的字段或者是组函数。 ***

where子句只能够过滤记录,放单行函数。

having子句可以过滤组函数结果或是分组的信息,且写在group by子句后。

例:

select max(b.name),avg(a.salary), max(c.name)

from s_emp a,s_dept b,s_region c

where a.dept_id=b.id and b.region_id=c.id

group by b.id

having sum(a.salary)4000;

column 也可以定义有别名的列的格式。

column "别名" 格式定义

注意:要先过滤掉不需要的记录,然后再进行分组操作,提高效率。

四、子查询

子查询,就是可以嵌在任何的sql语句中的select语句。

在select语句中嵌套子查询时,会先执行子查询。一般的会将子查询放在运算符的右边。

注意:在使用子查询时,要注意这个运算符是单行的(也就是只能是单值),还是多行运算符(范围,多值,in)。

配合使用子查询返回的结果必须符合运算符的用法。

例:

select first_name,title

from s_emp

where title=any(select title from s_emp

where last_name='Smith')

and upper(last_name)!='SMITH';

select first_name,title

from s_emp

where title in (select title from s_emp

where last_name='Smith')

and upper(last_name)!='SMITH';

五、将业务需求转换成可操作的表

一: 需求分析

二: 画E-R图

三: 转换成表关系

四: 割接(新老系统交接)

五:

E-R图属性:

* 为强制且非空属性

o 可选属性(可以有值也可以没有)

#* 表示此属性唯一且非空

实体关系:

mastbean maybean

数量关系: 多对一关系

一对多关系

一对一关系

多对多关系

第一范式,所有的属性都必须是单值,也就是属性只表示单一的意义。(记录可以重复,没有任何限制)

第二范式,属性要求唯一且非空,(记录不可重复,但是数据可能会出现冗余)。

第三范式,非主属性只能依赖于主属性,不能依赖于其他非主属性。(解决数据冗余问题)

六、约束

约束是针对表中的字段进行定义的。

primary key (主键约束 PK)保证实体的完整性,保证记录的唯一

主键约束,唯一且非空,并且每一个表中只能有一个主键,有两个字段联合作为主键,只有两个字段放在一起唯一标识记录,叫做联合主键。

foreign key (外建约束 FK)保证引用的完整性,

外键约束,外键的取值是受另外一张表中的主键或唯一值得约束,不能够取其他值,只能够引用主键会唯一键的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想创建子表,就要先创建父表,后创建子表,记录的插入也是如此,先父表后子表,删除记录,要先删除子表记录,后删除父表记录,要修改记录,如果要修改父表的记录要保证没有被子表引用。要删表时,要先删子表,后删除父表。

unuque key(唯一键),值为唯一

index(索引)是数据库特有的一类对象,view(示图)

典型的一对多 class 对应多个学生。

student table class table

______________________________ _________________________

| id | name | address| class_id| | id |class_desc|class_num|

|(PK)|______|________|___(FK)__| |(pk)|__________|_________|

| | | | | | | | |

一对一

student tabel shenfenzheng table

____________________ _________________________________

| id | name | address| | s_id |shenfen_desc|shenfen_num|

|(PK)|______|________| |(PK,FK)|____________|___________|

| | | | | | | |

多对多

student tabel zhongjian table kecheng table

____________________ _________________________________ __________________

| id | name | address| | s_id |shenfen_desc|shenfen_num| | kid | kechengname|

|(PK)|______|________| |(FK,FK)|____________|___________| | (PK)|____________|

| | | | |联合主键| | | | | |

引用对方表的主键,当作本身的主键,所以这个表的主键,既是主键又是外建

建表和其他相关操作

DDL语句

创建表:

create table 表名 ( 字段名1 类型(数据长度)(default ...) 约束条件, 字段名2 类型(数据长度) 约束条件 );

Oracle数据库中的数据类型

varchar(长度),可变长字符串,char(长度) 定长

number(..,..),number 表示浮点数,或者是整数

long 大对象,clog 字符的大对象,相当于文本文件在表中只存放一个相当于只针对值

blog 二进制的大对象,也是以相当于指针的形式存放的。

primary key约束:

主键约束的定义:

第一种定义形式:

create table test(c number primary key ); 列级约束

第二种定义形式:

create table test(c number , primary key(c) ) ; 表级约束

create table test( c1 number constraints pkc1 primary key ); 此约束有名字: pkc1

create table test(c number , c2 number , primary key (c ,c1) ) ; 用表级约束可以实现联合主键

foregin key (fk) 外键约束:

(先定义父表,再定义子表)

carete table parent(c1 number primary key );

create table child (c number primary key , c2 number references parent(c1));

或表级约束定义:

create table child( c number primary key , c2 number , foreign key(c2) references parent(c1));

如果两个字段都为唯一且非空,这时可以定义成UK+NOT NULL

(PK或UK)一对多(FK)

(PK+UK)一对一(FK) 或 (PK)一对一(PK)

多对对多关系,一般都通过一张中间表来分解成两个一对多的表

建立表

create table[schema]table

schema: 一个用户对应一个schema 不同用户下的表不能互相查看

select count(*) from s_dept; === select count(*) from sd0611.s_dept;

一个表中只能存储一个LONG类型

CLOB 存储大的文本对象

BLOB 存储大的二进制对象

create table test(c1 number primary key); 设置主键

create table test(c1 number constraints test_c1 primary key); 定义约束名,默认约束名为SYS_ 在列后面定义约束称为列级约束

create table test(c1 number primary key(c1)); 所有列定义完后再定义约束称为表级约束(能定义联合主键)

cretae table test(c1 number,c2 number,priary key(c1,c2)); 定义联合主键

create table child(c1 number primary key); 先要定义父表

create table child(c1 number primary key, c2 number references parent(c1)); 然后定义子表 references parent定义外键

create table child(c1 number primary key, c2 number references parent(c1) on delete cascate); on delete cascate为级联删除

create table child(c1 number primary key, c2 number references parent(c1) on delete set null); on delete set null删除后将外键置空

create table child (c1 number primary key, c2 number,foreignkey(c2) references parent(c1));

二、约束

1、非空约束(not null)

这是一个列级约束

在建表时,在数据类型的后面加上 not null ,也就是在插入时不允许插入空值。

例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));

2、unique 唯一约束

唯一约束,是会忽略空值的,唯一约束,要求插入的记录中的值是为一的。

例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address));

如果创建一个uk,系统自动建一个唯一索引

3、pk、uk

Oralce支持级联删除,不支持级联更新

4、check约束

检查约束,可以按照指定条件,检查记录的插入。check中不能使用尾列,不能使用函数,不能引用其他字段。

例:create table sal (a1 number , check(a11000));

(责任编辑:IT教学网)

更多

推荐网络创业文章