oracle 11g 学习笔记

1、Check规则

Check (Agebetween15and30 )把年龄限制在15~30岁之间

2、新SQL语法

在调用某一函数时,可以通过“=>符号来为特定的函数参数指定数据。而在Oracle11g中,在SQL语句中也可以这样的语法,例如:

Select f( x => 6)from dual ;

3、将sequence的值赋给变量

11g之前的赋值方式Select seq_x.next_val intov_x from dual ;

11g赋值方式v_x :=seq_x.next_val ;

4、SQL的功能

Ø4.1数据定义

Create ,Drop ,Alter

Ø4.2数据操纵

Select , insert , update , delete

Ø4.3数据控制

Grant, Revoke

5、Oracle创建语法

Ø1、表空间

createtablespacelq_oradatadatafile'd:\oracle_test\user_data01.dbf'

size32mautoextendonnext32mmaxsize2048mextentmanagementlocaluniformsize16m ;

Ø2、临时表空间

createtablespacelq_oradata_temptempfile

'd:\oracle_test\temp_data01.dbf'

size32mautoextendonnext32mmaxsize2048mextentmanagementlocaluniformsize16m ;

Ø3、创建用户

create user lq identified by lq

default tablespacelq_oradata

temporary tablespace temp;

注:此处的temp为系统临时表空间,也可以自定义临时表空间;

Ø4、给用户授权

grant connect,resource to lq;

Ø5、创建表

createtableit_employees (

employee_idnumber(6)notnullunique,

first_namevarchar2(30) ,

last_namevarchar2(30)notnull,

emailvarchar2(30),

phone_numbervarchar2(15),

job_idvarchar2(10),

salary_numbernumber(8,2),

manager_idnumber(6)

)

添加数据

insertintoit_employees(employee_id,first_name,last_name,email,phone_number,job_id,salary_number,manager_id,birth_date)

values(seq_employee.nextval,'Micheal','Joe','mj_aui01@188.com','13149258943','it_prog',5000.67,seq_employee.nextval,to_date('2011-11-01','yyyy-mm-dd'));

Ø6、创建视图

给用户分配创建视图的权限

A:首先授予查询所有表的权限

grant select any

table tolq;

B:再次授予查询所有字典表的权限

grant select any

dictionary tolq;

C:如果已经分配以上权限,还是权限不足,则可分配管理员权限

grant dba tolq;

createviewprog_employees

as

selectemployee_id,first_name,last_name,email,phone_number,salary_number,manager_id

fromit_employees

wherejob_id='it_prog'

with check option;

注:可加上with check option;

Ø7、创建索引

聚簇索引:指索引向的顺序与表中记录的物理顺序相一致的索引组织。

用户可以在查询频率最高的列上建立聚簇索引,从而提高查询效率。由于,聚簇索引是将索引和表记录放在一起存储,所以在一个基表上只能创建一个聚簇索引;在建立聚簇索引后,由于更新索引列数据时会导致表中物理顺序的变更,系统代价较高,因此对于经常更新的列不宜建立聚簇索引。

Create [unique] [cluster] index [索引名]

On <表名> (<列名>[<次序>],<列名>[<次序>],<列名>[<次序>]……)

其中,unique表示此索引的每一个索引值不能重复,对应唯一的数据记录。Cluster表示要创建的索引为聚簇索引。索引可以建立在对应表的一列或者多列上,如果是多个列,各个列之间需要用逗号分隔。<次序>用于指定索引值的排列次序,ASC表示升序,DESC表示降序,默认为ASC.

Create indexit_lastnameonit_employees(last_name)

描述:执行后会在表it_employees的last_name列上建立一个索引。

而it_employees表中的数据将按照last_name值升序存放。

6、Oracle删除语法Drop

Ø6.1:删除表

Droptable<表名>

删除表时,表中的数据、在该表上建立的索引一并都会被删除。

Ø6.2:删除视图

Drop view <视图名>

Ø6.3:删除索引

Drop index <索引名>

7、Oracle修改语法Alter

Alter table <表名>

[add <新列><数据类型>[完整性约束]]

新增birth_date列

Altertableit_employeesaddbirth_date date;

[Drop<完整性约束>]

删除employee_id字段的unique约束

Altertableit_employeesDrop unique(employee_id);

[Modify <列名> [数据类型]]

将manager_id字段改为8位

Altertableit_employeesmodifymanager_id number(8)

8、Oracle查询select

Ø8.1:简单查询

8.1.1使用from子句指定表

select * from hr.countries ;

select * from hr.countries,hr.departments;

8.1.2使用select指定列

Selectcolumn name_1, ……

column name_n

Fromtable_name_1 , table_name_2 .

8.1.3算术表达式

Selectem.first_name,em.last_name,

em.salary_number*(1+0.2) "new_salar y"

fromit_employees em;

查询出员工薪资上调10%之后的结果,为了提高刻度性,可以为列重新制定显示标题"new_salar y";

注:如何列标题中包含一些特殊字符,例如空格等,则必须使用双引号将列标题扩起来。

8.1.3distinct关键字

Select distinct job_id from it_employees;

Ø8.2:where子句

8.2.1条件表达式

selectem.employee_id, em.first_name,em.last_namefromit_employees emwhereem.first_namelike'B%';

判断first_name以“B”开头的雇员;

8.2.2连接运算and / or

selectem.employee_id, em.first_name,em.last_namefromit_employees em

whereem.phone_number='15321981677'

andem.salary_number >6000;

用and做连接符,电话号码和薪酬为判断条件;

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

selectem.employee_id, em.first_name,em.last_namefromit_employees em

whereem.first_name='Britney'

orem.salary_number <6000;

8.2.3 NULL值

首先插入一条记录,此处Email只为NULL

insertintoit_employees(employee_id,first_name,last_name,email,phone_number,job_id,salary_number,manager_id,birth_date)

values(seq_employee.nextval,'Britney','Joe',NULL,'15321981677','it_prog',10000.67,seq_employee.nextval,to_date('2011-11-01','yyyy-mm-dd'));

查询值为null的语句:

select*fromit_employees emwhereem.emailisnull;

select*fromit_employees emwhereem.emailisnotnull;

Ø8.3:order by子句

selectem.last_name, em.job_id , em.salary_number

fromit_employees em

whereem.salary_number >5000

orderbyem.job_id,em.salary_numberdesc;

order by子句后边可指定多个列名,首先根据第一列排序,当第一列值相同时,再对第二列进行比较排序,以此类推;

Ø8.4:groupby子句

通过Group By进行的查询:

selectem.job_id,avg(em.salary_number),sum(em.salary_number),max(em.salary_number),count(em.job_id)

fromit_employees emgroupbyem.job_id ;

可以在group by后使用rollup或者cube进行汇总,在查询结果中都会附加一条汇总信息,sql如下:

selectem.job_id,avg(em.salary_number),sum(em.salary_number),max(em.salary_number),count(em.job_id)

fromit_employees emgroupbyrollup(em.job_id) ;

Ø8.5:Having子句

selectjob_id ,avg(SALARY_NUMBER) ,sum(SALARY_NUMBER),max(SALARY_NUMBER),count(*)

fromIT_EMPLOYEESgroupbyJOB_IDhavingavg(SALARY_NUMBER) >5500

通常与Group by子句一起使用,在完成对分组统计后,可以使用Having子句对分组的结果做进一步筛选;

Ø8.6:多表连接查询

8.6.1基本形式

将表employees和表departments相连接,从而生成一个笛卡积:

Selectemployee_id, last_name , department_name fromemployees , departments ;

8.6.2条件限定

selectit.employee_id,it.last_name, dm.department_name

fromit_employees it , departments dm

whereit.department_id = dm.department_id;

selectit.employee_id,it.last_name, dm.department_name

fromit_employees it , departments dm

whereit.department_id = dm.department_id

anddm.department_name ='Shipping';

8.6.3表别名

8.6.4 Join连接

Fromjoin_table1join_typejoin_table2

[ON(join_Condition)]

8.6.4.1内连接

select em.employee_id, em.last_name,dep.department_name

from it_employees eminnerjoindepartments dep

on em.department_id = dep.department_id

where em.job_id='it_prog';

8.6.4.2自然连接

Selectem.employee_id, em.first_name, em.last_name, dep.department_name fromit_employees emnatural

joindepartmentsdepwhere dep.department_name=’Sales’

8.6.4.3外连接

左外连接:

selectem.employee_id, em.last_name, dep.department_name

fromit_employees emleftouterjoindepartments dep

onem.department_id = dep.department_id

whereem.job_id='it_prog';

右外连接:

selectem.employee_id, em.last_name, dep.department_name

fromit_employees emrightouterjoindepartments dep

onem.department_id = dep.department_id

wheredep.location_id =1700;

完全外连接:

selectem.employee_id, em.last_name, dep.department_name

fromit_employees emfullouterjoindepartments dep

onem.department_id = dep.department_id

wheredep.location_id =1700or em.job_id=’it_prog’;

8.6.4.4自连接

selectem1.last_name "manager" , em2.last_name "employee"

fromit_employees em1leftjoinit_employees em2

onem1.employee_id = em2.manager_id

orderbyem1.employee_id;

Ø8.7:集合操作

Union (并运算)UNION ALLInTerSect(交运算)Minus (差运算)

8.7.1Union

/*** < unionall>***/形成的结果集中包含有两个结果集中重复的行。

selectit.employee_id, it.last_namefromit_employeesit

whereit.last_namelike'%e'orit.last_namelike'j%'

union

selectem.employee_id , em.last_namefromit_employees em

whereem.last_namelike'j%'orem.last_namelike'%o%';

8.7.2Intersect

Intersect查询结果保留Last_name以j开头的雇员

selectit.employee_id, it.last_namefromit_employeesit

whereit.last_namelike'%e'orit.last_namelike'j%'

intersect

selectem.employee_id , em.last_namefromit_employees em

whereem.last_namelike'j%'orem.last_namelike'%o%';

8.7.3Minus

例:返回Last_name以e结尾的集合

selectit.employee_id, it.last_namefromit_employeesit

whereit.last_namelike'%e'orit.last_namelike'j%'

minus

selectem.employee_id , em.last_namefromit_employees em

whereem.last_namelike'j%'orem.last_namelike'%o%';

Ø8.8:子查询

8.7.1in关键字

selectemployee_id, last_name , department_id

from it_employees

where department_idIn

(

selectdepartment_id fromdepartments

wherelocation_id=1700

)

8.7.2Exists关键字

selectemployee_id, last_name , department_id

from it_employeesem

whereexists

(

select * fromdepartmentsdep

where em.department_id= dep.department_id

andlocation_id=1700

)

8.7.3比较运算符

selectemployee_id , last_name , job_id , SALARY_NUMBER

fromit_employees

whereJOB_ID ='it_prog'

andSALARY_NUMBER >= (selectavg(SALARY_NUMBER)fromit_employeeswherejob_id='it_prog')

9、数据操纵

Ø9.1:Insert

9.1.1一般Insert

Insertinto[user.]table[@db_link] [([column1, column2… culumnx])]

Values([express1],[ express2]……)

insertintojobs (job_id,job_title,min_salary,max_salary)

values('it_test','测试员',3500.00,8000.00);

/***注:以下Desc… insert未测试成功***/

descjobs

insertintojobsvalues('it_dba','管理员',5000.00,15000.00)

9.1.2批量Insert

insertintoemployees(employee_id,first_name,last_name,email,phone_number,job_id,salary_number,manager_id)

selectem.employee_id,

em.first_name,

em.last_name,

em.email,

em.phone_number,

em.job_id,

em.salary_number,

em.manager_id

fromit_employees em , departments dep

whereem.department_id = dep.department_id

anddep.department_name='Shipping';

Ø9.2:Update

updateemployeessetsalary_number = salary_number*1.15

wherejob_id ='it_prog'

updateit_employeessetsalary_number=

(

select avg(salary_number) fromit_employees

where job_id='it_prog'

)

whereemployee_id=11;

Ø9.3:Delete

deletefromit_employeeswhereemployee_id=31;

Ø9.4: Truncate

truncatetableemployees;

10、数据控制

Ø10.1 Grant语句

Grantselect on table it_employees to User1 ;

Grantallprivileges on table it_employees , jobs toUser2 ;

Grant selecton table department to public ;

Grant update(employee_id), select on tableit_employees to User4;

Grant insert on table departmentto user5 with grant option ;

Grant createtab on database db_employees toUser8 ;

Ø10.2Revoke语句

Revokeupdate(employee_id)on tableit_employees from user4 ;

Revokeselect on table departmentfrompublic;

Revokeinsert on table department from User5 ;

11、Oracle常用函数

Ø11.1字符类函数

11.1.1 ASCII()

Selectascii('A')big_a,ascii('a') small_afromdual ;

11.1.2CHR()

Selectchr(65) ,chr(97),chr(100)fromdual ;

11.1.3Concat( c1,c2 )

selectconcat('oracle','11g')fromdual ;

返回的是

11.1.4initcap(C1)

selectinitcap('oracleuniversal installer')fromdual ;

返回的结果:

11.1.5 instr(c1,[c2,,[j]])

select instr('Moisossoppo','o',3,3) from dual;

返回的结果:

select instr('Moisossoppo','o',-2,3) fromdual ;

返回的结果:

11.1.6length(C1)

selectlength('oracle

11g') lgfromdual ;

结果:

11.1.7 lower(C1)

select*fromjobs;

结果:

selectlower(job_id)fromjobswherelower(job_id)like'it%'

结果:

11.1.8Ltrim(c1,c2)

selectltrim('Moisossoppo','Mois')fromdual ;

结果:

11.1.9replace(c1,c2,[c3])

selectreplace('feelblue','blue','yellow')fromdual ;

结果:

11.1.10substr(c1,,[j])

selectsubstr('Message',1,4)fromdual ;

Result :

Ø11.2数字类函数

Ø11.3日期类函数

Ø11.4转换类函数

Ø11.5聚集类函数

第四章:Oracle PL/SQL语言及编程

Ø4.1 PL/SQL简介

4.1.1pl/sql的基本结构

4.1.2pl/sql注释

A:单行注释

createtableclasses (

class_idnumber(6)primarykey,

departmentchar(3)

)

altertableclassesaddcoursenumber ;

createsequenceseq_class_id

incrementby1--每次增加1

startwith100--100开始

nomaxvalue--不设置最大值

nocycle--一直累加不循环

cache10;

declare--单行注释声明

v_departmentchar(3);--保存3个字符的变量

--系统代码

v_Coursenumber;--保存课程号的变量

begin

v_department:='tes';

v_Course :=19;

insertintoclasses(class_id,department , course)

values(seq_class_id.nextval,v_department,v_Course);

end;

commit;

B:多行注释

/**

多行注释

**/

declare

v_departmentchar(3);

v_Coursenumber;

begin

v_department :='duo';

v_Course :=99;

insertintoclasses(class_id,department ,course)

values(seq_class_id.nextval,v_department,v_Course);

end

;

commit;

4.1.3pl/sql字符集

A:合法字符集

B:分界符(delimiter)

4.1.4pl/sql数据类型

A:数字类型

B:字符类型

C:日期类型

D:布尔类型

E:type定义的数据类型(rowtype)

例:

/**

pl/sql数据类型使用type定义teacher_record记录变量

**/

typeteacher_recordisRecord--record定义之后,在以后的使用中就可以定义基于teacher_record的记录变量

(

tidnumber(5)notnull:=0,

namevarchar2(50),

titlevarchar2(50),

sexchar(1)

)

--定义一个teacher_record类型的记录变量

ateacher

teacher_record ;

4.1.5pl/sql变量和常量

A:定义常量

Pass_Scoreconstantinteger:=60;

B:定义变量

C:变量初始化

4.1.6pl/sql语句控制结构

A:选择结构

(1)If语句

(2)Case语句

declare

v_gradevarchar2(20) :='及格';

v_scorevarchar2(50);

begin

v_score:=Casev_grade

when'不及格'then'成绩< 60'

when'及格'then'60<=成绩< 70 '

when'中等'then'70<=成绩< 80 '

when'良好'then'80<=成绩< 90 '

when'优秀'then'9 0<=成绩< 100 '

else'输入有误'

end;

dbms_output.put_line(v_score);

end;

运行结果如下:

B:NULL结构

/**

null结构(添加变量是否为null的判断)

**/

declare

v_number1number;

v_number2number;

v_resultvarchar2(7);

begin

ifv_number1isnullorv_number2isnullthen

v_result ='Unknown';

elsifv_number1

v_result ='yes'

elsev_result ='no'

end;

end;

C:循环结构

(1)Loop…exit … end语句

declare

control_valnumber:=0;--初始化control_val值为0

begin

loop--开始循环

dbms_output.put_line(control_val);--打印测试

ifcontrol_val >5then--如果control_val的值大于5则退出循环

exit;

endif;

control_val :=control_val+1;--否则改变control_val的值

endloop;--结束循环

end;

(2)Loop… exitwhen …end语句

declare

control_valnumber:=0;--初始化control_val值为0

begin

loop--开始循环

dbms_output.put_line(control_val);--打印测试

exitwhencontrol_val >6;--如果control_val的值大于6则退出循环

control_val:=control_val+1;

endloop;

end;

(3)While…loop…end;

(4)declare

(5)control_valnumber:=0;

(6)begin

(7)whilecontrol_val <=5--如果变量小于或等于5就循环

(8)loopcontrol_val:=control_val+1;

(9)dbms_output.put_line(control_val);--打印测试

(10)endloop;

(11)end;

(4)for… in … loop …end

这是个预知循环次数的循环控制语句:

declare

control_valnumber:=0;

begin

forcontrol_valin0.. .9loop

dbms_output.put_line(control_val);

null;

endloop;

end;

null为空操作语句,它表示什么也不做,在程序中用来标识此处可以加执行语句,起到一种记号的作用;

(5)GOTO语句示例

4.1.7pl/sql表达式

A:字符表达式

declare

hnvarchar2(20) :='hello';

wnvarchar2(20) :='world!';

rtnvarchar2(20) ;

begin

ifhisnotnullandwisnotnull

thenrt:=h||w;

dbms_output.put_line(rt);

endif;

end;

运行结果:

B:布尔表达式

begin

if 'Scott' not in ('Mike','John','Mary')

then dbms_output.put_line('false');

end if ;

end;

运行结果:

Ø4.2 PL/SQL的游标

4.2.1基本原理

4.2.2显示游标

显示游标的处理包括:声明游标、打开游标、提取游标、关闭游标4个步骤;其操作过程如下图:

注:声明游标需要在块的声明部分进行,其他3步骤都在执行部分或异常处理中进行。

A:声明游标

B:打开游标

Open <游标名>;

1)检查联偏变量的取值;

2)根据联偏变量的取值,确定活动集;

3)活动集指针指向第一行;

C:提取游标

D:关闭游标

Close <游标名>;

查出employees表中的所有数据:

执行下边定义的sql:

--1,游标的声明

declare

FIRST_NAMEVARCHAR2(30);--定义四个变量来存放employees表中的内容

LAST_NAMEVARCHAR2(30);

EMAILVARCHAR2(30);

phone_numvarchar2(30);

cursoremployee_curis

selecte.first_name,e.last_name,e.email,e.phone_number

fromemployeese

wheree.employee_id<10;--选出编号大于5的所有雇员

--2,游标的开启

begin

openemployee_cur;

--3,提取游标(fetch语句每执行一次,游标向后移动一行,直到结束;游标只能逐个向后移动,而不能跳跃移动或者向前移动)

fetchemployee_curintoFIRST_NAME,LAST_NAME,EMAIL,phone_num;

--4,关闭游标

loop

exitwhennotemployee_cur%found;--如果游标到尾则结束

ifFIRST_NAME='lq'then

dbms_output.put_line('名称为:lq');

else

dbms_output.put_line('没有合法用户');

endif;

fetchemployee_curintoFIRST_NAME,LAST_NAME,EMAIL,phone_num;

endloop;

closeemployee_cur;

end;

得出的结果为:

注:使用显式游标时,需要注意以下事项:

4.2.3隐式游标

4.2.4游标属性

A:是否找到游标(%found)

B:是否没找到游标(%found)

C:游标行数(%RowCount)

--1,游标的声明

declare

FIRST_NAMEVARCHAR2(30);--定义四个变量来存放employees表中的内容

LAST_NAMEVARCHAR2(30);

EMAILVARCHAR2(30);

phone_numvarchar2(30);

cursoremployee_curis

selecte.first_name,e.last_name,e.email,e.phone_number

fromemployeese

wheree.employee_id<10;--选出编号大于5的所有雇员

--2,游标的开启

begin

openemployee_cur;

--3,提取游标(fetch语句每执行一次,游标向后移动一行,直到结束;游标只能逐个向后移动,而不能跳跃移动或者向前移动)

fetchemployee_curintoFIRST_NAME,LAST_NAME,EMAIL,phone_num;

--4,关闭游标

loop--如果游标到尾则结束(判断游标当前行数,即当前只抽取3条记录)

exitwhennotemployee_cur%foundoremployee_cur%rowcount=3;

ifFIRST_NAME='lq'then

dbms_output.put_line('名称为:lq');

else

dbms_output.put_line('没有合法用户');

endif;

fetchemployee_curintoFIRST_NAME,LAST_NAME,EMAIL,phone_num;

endloop;

closeemployee_cur;

end;

D:游标是否打开(%IsOpen)

E:参数化游标

--敲回车后会弹出输入对话框,输入即可。

--ACCEPT my_tid prompt 'please input the tid';

ACCEPTmy_tidprompt'please input the tid';

declare

my_tid

number:=10;--定义的参数或者直接用以上prompt输入参数

FIRST_NAMEVARCHAR2(30);--定义四个变量来存放employees表中的内容

LAST_NAMEVARCHAR2(30);

EMAILVARCHAR2(30);

phone_numvarchar2(30);

cursoremployee_cur(cursor_idnumber)is--定义游标时带上参数

selecte.first_name,e.last_name,e.email,e.phone_number

fromemployeese

wheree.employee_id

begin

ifemployee_cur%isopenthen

loop

fetchemployee_cur

intoFIRST_NAME,LAST_NAME,EMAIL,phone_num;

exitwhenemployee_cur%notfound;

endloop;

else

openemployee_cur(my_tid);--带上实参数

loop

fetchemployee_cur

intoFIRST_NAME,LAST_NAME,EMAIL,phone_num;

exitwhenemployee_cur%notfound;

endloop;

endif;

closeemployee_cur;

end;

4.2.5游标变量

Oracle 11 G从入门到精通阅读至126页,文档未完待续。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 一、select语句 日期和数值型字段可以进行加减乘除 关于NULLNULL表示不可用,未赋值,不知道,不适用,所...
    比轩阅读 3,084评论 2 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 数据操纵语言 DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执...
    MPPC阅读 446评论 0 3
  • SQL语言基础 本章,我们将会重点探讨SQL语言基础,学习用SQL进行数据库的基本数据查询操作。另外请注意本章的S...
    厲铆兄阅读 5,318评论 2 46
  • 1、组函数:组函数作用于一组数据,并对一组数据返回一个值。 AVG 平均值COUNT计数MAX最大值MIN最小值S...
    Shaw_Chen阅读 497评论 0 2