Oracle的SQL语法

SQL基本语法

一、   基本语句

//DDL 数据定义语言

--1.创建表的语法

  create table tb_dengji(

    did number primary key,

    dname varchar2(20) not null,

    usex varchar2(2) not null check(usex='男' or usex='女'),

    dfid number not null,

    dyj float not null,

    drz date default sysdate not null,

    dtf date null

);

--2.修改表的语法

Alter table tbname

--3.删除表

Drop tabletbname

//DML 数据操作语言

--4.插入数据的语法

insert into tbname(sid,sname,sex)

values(2,'李飞','女')

重点:1).插入日期类型的值 (日期数据类型的默认格式为“DD-MON-RR” )

1.使用日期的默认格式 :

INSERT INTOorder_master  VALUES('o001', '12-5月-05', 'V002', 'c', '25-5月-05');

2.使用TO_DATE函数转换 :

INSERT INTOmy_table (date_col) VALUES (TO_DATE('2005-10-18', 'YYYY-MM-DD'));

3.或写为   date’2013-2-22’

2). 插入来自其它表中的记录

INSERT INTO<table_name> [(cloumn_list)]

           SELECT column_names FROM<other_table_name>;

--5.查询语法

select * from tbname

注意:尽量不使用*,要什么取什么,它会降低性能,占用多余内存。

--利用现有的表创建表

CREATE TABLE <new_table_name> AS

          SELECTcolumn_names FROM <old_table_name>;

CREATE TABLE newitemfile2  AS SELECT * FROM itemfile WHERE 1 = 2;

--6.修改语法

update tbname set sex='男' where sname='张扬'

update tbnameset sid=3, sex='女' where sname='张扬'

--7.删除语法

delete from tbname where sname='李飞'

二、   模糊查询

--查询姓名里面含有'S'的雇员信息

select * from emp where enamelike '%S%'

SELECT SName AS 学员姓名,SAddress As 地址 FROM Students WHERE SAddressIN ('北京','广州','上海')

三、排序

--按薪水的高低进行排序

select * from emp order bysal desc;--降序排列

select * from emp order by sal asc;--升序排列

四、伪表(dual)、伪列(rownum每行的唯一标号,rowid物理地址)

--伪表dual的概念

select 'a' from dual

注意:rownum不能单独使用‘=’、‘>=‘、‘>’比较符,且rownum>6 and rownum<9与rownum>=6这都是不允许的,但rownum>=6 and rownum<9这是可行的。

Select * from(

Select a.*,rownum rn from emp a

)x where x.rn>3 and x.rn<8;//此时x表里的rn列不再是伪劣;

五、连接

1.union

select 'a' from dual

union

select 'b' from dual;--行合并

2.inner joinleftjoinright joinfulljoin

SELECTS.SName AS 姓名, CS.CourseNameAS 课程, C.Score AS 成绩

FROMStudents  S

INNER JOIN Score C ON (S.SCode = C.StudentID)

INNERJOIN Course  CS ON (CS.CourseID =C.CourseID)

六、聚合函数

Count()sum()max()min()avg()

--||oracle中是连接字符的意思    a’||’b’  =>  ‘ab’

、nvl()

nvl(condition,value);此方法:若condition为空,则值用value的值来填充。

八、子查询

--查询Student表中最大和最小的Sbirthday日期值。

select a.sbirthday from(            --floor(sysdate-sbirthday)用来求两个日期间相差的天数

  select floor(sysdate-sbirthday) tdate,sbirthday fromstudent)a

join(select max(floor(sysdate-sbirthday))mindate,min(floor(sysdate-sbirthday)) maxdate from student)b

 on a.tdatein(b.mindate,b.maxdate);

--以班号和年龄从大到小的顺序查询Student表中的全部记录。

select * from(

select a.*,to_number(to_char(sysdate,'yyyy'))-to_number(to_char(sbirthday,'yyyy'))as age from student a

) b order by b.class desc,b.age desc;

 

猜你喜欢

转载自blog.csdn.net/u013254241/article/details/26626087