1. 程式人生 > >Oracle的SQL語法

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;