Kepton

Knowing is Owning.

   ::  :: 新随笔  ::  ::  :: 管理

最近快速的把数据库浏览的一遍,把很常用的语句写了出来,没有注释,其实都很简单,一看都明白。

1.自定义数据类型

CREATE TYPE PERSON AS OBJECT//自定义数据类型

(NAME VARCHAR (30),

SSN VARCHAR(9));

2.创建数据库

create table person

( NAME varchar(20) not null,

  age int,    

  id varchar(13)  

);

3.修改,删除,添加

alter table person modify name varchar(10) null;

alter TABLE person drop age;

alter TABLE person add age int not null;

4.创建主键在表创建时  

create table person

( NAME varchar(20) not null primary key,

  age int,    

  id varchar(13)  

);

或者

create table person

( NAME varchar(20) not null,

  age int,    

  id varchar(13) 

primary key(name) 

);

5唯一性约束 

create table person

( NAME varchar(20) not null,

  age int,    

  id varchar(13)  unique   

);

6.外键约束:子表中的一个字段,引用父表里的主键,确保表和表之间引用完整性的主要机制。

create table person

( NAME varchar(20) not null,

  age int,    

  id varchar(13)  unique,

  CONSTRAINT EMP_ID_FK FOREIGN KEY (NAME) Reference FATHER_TAB (NAME)//创建一个名为EMP_ID_FK的约束 将name字段和

father_tab里面的name字段关联。

  CONSTRAINT EMP_AGE_CH CHECK( age>18);

);

7.插入

insert into mytable(column1,column2...)

values(v1v2...);

8更新

update mytable

set column2=''

[column3='value']

[where]; 

9.删除

delete from mytable

[where condition];

10.对于数据库大规模的加载或撤销来说,应该多使用COMMIT语句。全部的修改首先是被送到临时退回区域,如果这个临时回退区没有空

间了,就不能保存对数据库所做的修改,数据库就可能挂起,禁止下一步。但过多的COMMIt会产生大量的额外时间。

COMMIT

11.ROLLBACK//撤销回退区里的全部修改。

12.savepoint

SAVEPOINT NAME;

ROLLBACK TO NAME;

RELEASE SAVEPOINT NAME;//删除保存点

12.

SELECT DISTINCT(NAME)

FROM MYTAB;//distinct用去去除重复的数据。

13.

SELECT COUT(*)

FROM MYTAB;//显示数据的数量

14.逻辑判断

WHERE NAME IS NULL

WHERE NAME = NULL

WHERE AGE BETWEEN 18 AND 24

WHERE NAME IN ('KEPTON','LIU')

15.ALL

SELECT COST 

FROM PRODUCTS_TAB

WHERE COST > ALL ( SELECT COST

                   FROM PRODUCTS_TAB

   WHERE COST < 10);//显示cost所有大于10

WHERE SALARY > ANY (SELECT SALARY FROM EMPLOYEE_TAB WHERE CITY ='JINAN')//条件是salary大于所有居住在济南的薪水

16.

WHERE PROID=12 AND PROID=23

WHERE SALARY = 2000 OR SALARY = 3000

17.

WHERE SALARY <> 2000

WHERE SALARY != 2000

WHERE SALARY NOT BETWEEN 2000 AND 3000

WHERE SALARY NOT IN (2000,3000,4000)

WHERE SALARY IS NOT NULL

18汇总函数

SELECT COUT [(*)|(DISTINCT | ALL) (COLUMN NAME)

SELECT SUM(SALARY) FROM EMPLOYEE_TAB

SELECT SUM(DISTINCT SALARY) FROM EMPLOYEE_TAB

SELECT AVG(SALARY) FROM EMPLOYEE_TAB

SELECT AVG(DISTINCT SALARY) FROM EMPLOYEE_TAB

SELECT MAX(SALARY) FROM EMPLOYEE_TAB

SELECT MAX(DISTINCT SALARY) FROM EMPLOYEE_TAB

SELECT MIN(SALARY) FROM EMPLOYEE_TAB

SELECT MIN(DISTINCT SALARY) FROM EMPLOYEE_TAB

19.串连接

select name+' '+address

from person

20.

Translate(city, 'IND', 'ABC')//city里面的美每一个I换成ANBDCmotherfucker

REPLACE(CITY,'i','z')//将一个字符或字符串整体替换成

UPPER(CITY)

LOWER(CITY)

SUBSTRING(COLUMN NAME, STARTING POSTION, LENGTH)

INSTR(COLUMN NAME,'A',1,1)//返回NAME里面A从第一个字符开始第一次出现的位置,若无返回0

21.外结合

WHERE  P.ID=O.ID(+) 

返回第一个表全部,不管0.ID是否存在

22.自结合

同一个表去别名

FROM TABLE A, 

     TABLE B

23.卡迪尔积

24.子查询

1.子查询必须位于()

2.除非主查询里有多个字段让子查询进行比较,否则子查询的SELECT子句中只能有一个字段

3.子查询里面不能有ORDER BY ,可以用GROUP BY 来实现ORDER BY功能。

25.UNION

SELECT EMP_ID FROM EMPLOYEE_TBL

UNION

SELECT EMP_ID FROM EMPLOYEE_PAY_TBL//不会出现重复数据

26.UNION ALL

SELECT EMP_ID FROM EMPLOYEE_TBL

UNION ALL

SELECT EMP_ID FROM EMPLOYEE_PAY_TBL//包括重复的数据

25.INTERSECT

SELECT EMP_ID FROM EMPLOYEE_TBL

INTERSECT

SELECT EMP_ID FROM EMPLOYEE_PAY_TBL//返回两个数据一样的记录

26.EXCEPT

SELECT EMP_ID FROM EMPLOYEE_TBL

EXCEPT

SELECT EMP_ID FROM EMPLOYEE_PAY_TBL//返回第一个有,但第二个没有的记录

27.HAVING

GROUP BY之后,ORDER BY之前,对满足的条件的记录进行分组。

28.INDEX的使用

CREATE  INDEX  INDEX_NAME

ON  TABLE_NAME  (COLUMN  NAME)

DROP  INDEX  INDEX_NAME

数据量庞大并且where子句返回数据量很小或者是某一特定的值的时候,可以考虑索引。

29.性能的优化

1.FROM子句里的表的顺序,较小的表在前面,较大的表在后面。

2.WHERE 子句里面的一般基表在结合操作的右侧,没有基表,就是较大的表在右侧

3.SQL查询里面,最严格的条件放在下面

4.避免使用or操作符,尽量用in来代替

5.避免是用having子句,尽量避免对大规模数据进行排序,如ORDER BY, GROUP  BY,  HAVING.

6.创建存储过程。

30.视图 view

VIEW是一个虚拟表,存放在内存中,和表的用法类似。

CREATE  VIEW  VIEW_NAME AS

SELECT  LASTNAME, FIRSTNAME 

FROM  EMPLOYEE_TAB

WHERE  FIRSTNAME IS NOT NULL

WITH  CHECK  OPTION;//确保FIRSTNAME字段非空。

VIEW不能使用ORDER BY group by 在定义视图的时候 代替orderby

posted on 2011-07-19 21:10  Kepton  阅读(194)  评论(0编辑  收藏  举报