最近快速的把数据库浏览的一遍,把很常用的语句写了出来,没有注释,其实都很简单,一看都明白。
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(v1,v2,...);
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换成A,N换B,D换C,motherfucker
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。