主要记录工作中常见的Sql语句。
1. 操作数据库
创建 /修改 / 删除
create database database_name
alter database database_name modify name = new_name
drop database database_name --- 别人在用时,不能删除
2. 操作表
- primary key;
- foreign key
可以导入CSV文件,插入数据。
create table table_name
{
column_1 data_type allow_null primary_key,
column_2 data_type allow_null,
...
}
alter table table_name modify
Add column_name data_type --- 增加列
drop table table_name --- 别人在用时,不能删除
3. insert
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
4. where
5. update
UPDATE Websites SET alexa\='5000', country\='USA' WHERE name\='菜鸟教程';
6.select
7~8
9. constraint
用于约束限制加入表的数据类型。
### 1. SQL CREATE TABLE + CONSTRAINT 语法
CREATE TABLE _table\_name_
(
_column\_name1 data\_type_(_size_) _constraint\_name_,
_column\_name2 data\_type_(_size_) _constraint\_name_,
_column\_name3 data\_type_(_size_) _constraint\_name_,
....
);
### 2. 在 SQL 中,我们有如下约束:
**NOT_NULL** : 指示某列不能存储 NULL 值。
**UNIQUE** : 保证某列的每行必须有唯一的值。
**PRIMARY KEY** : NOT NULL 和 UNIQUE 的结合(或两个列多个列的结合)。
**FOREIGN KEY** : 指向另一个表的primary key。
**CHECK** : 保证列中的值符合指定的条件。
**DEFAULT** : 规定没有给列赋值时的默认值。
10. data type
- 数字型 numeric int / numerical / decimal
- 字符型 string vchar / nvachar / char
- 时间型 data/time data / time / datatime
- 二元性 bool true / false
- 杂型 xml/Json
11. Group by
根据一个或多个列结果进行分组。
可以和where 一起使用; 也可以单独使用。
select genderid ,sum(genderid), id from employee where genderid > 1 GROUP by genderid,id ;
select genderid from employee GROUP by genderid;
select a.LotId, min(a.Unitid), a.PanelId, A.carrierid from TwUnitInfo A
WHERE A.panelid = 'HA187601160B14' group by a.panelid, a.LotId, A.carrierid order by a.panelid ;
12. Aggregate Function 合计函数
队列 加总 / 取最大值 / 最小值
count() 包含空值(不一定,需要验证)。
13. having
有条件的从表中选取数据,类似于where。
通常用在Aggr Func 和 Group by 中;having 需要在group by 之后。
select genderid from employee GROUP by genderid having genderid > 1;
where 和 having 区别(运行时机):
where : 先运行 where ,然后再group by 和 aggr func;
having : 先group by 和 aggr func 再运行having;
14. string function
upper / low / len
left / right(string, number)
charIndex (string_to_search, string, start)
substring (string, start, len)
15. data time - func
day / month / year
dataAdd(data_type, number, data)
dataDiff(data_type, start_data, ens_data)
16. cast & convert
对数据类型改变(比如:数字和时间转化)
- cast : 对数据类型进行转化 ;
- convert : (通常用于时间转化)一般先用cast;
cast (express as data_type)
convert (data_type, express, style[])
17~18. join
19. union
20. Stored procedures
一组为了完成特定功能的SQL语句。
select column into New_table from Old_table;
注意:如果在sql/plus或者PL/SQL执行这条语句,会报"ORA-00905:缺失关键字"错误,原因是PL/Sql与T-SQL的区别。
T-SQL中该句正常,但PL/SQL中解释是:
select..into is part of PL/SQL language which means you have to use it inside a PL/SQL block. You can not use it in a SQL statement outside of PL/SQL.
即不能单独作为一条sql语句执行,一般在PL/SQL程序块(block)中使用。如果想在PL/SQL中实现该功能,可使用create table NewTable as select column from ATable;
21. Functions
- stored Procedures 可以使用Func;
- Func 不可以使用stored Procedures ;
22. trigger
当满足某种预设条件时,自动执行。
23. View
可视化的表,更好的安全性。
24. Temporary table
'#'表示临时表
create table #table_name(column1, datetype, ...)
select column from #table_name
drop table #table_name
25. CTE
- (Common Table Expression) 公共表 表达式;
- 临时的结果集,可以为后面紧接的select 使用(与临时表的区别)
26. case when
返回的可能结果。
select case ..
when condition_1 then result_1
...
else return_n
end
27. windows_function(窗体函数)
用来处理over子预计定义的行集。
- row_number() over (partion by username order by column) : 相当于group by ,相同值不同序号 1234;
- rank() : 相同值有相同序号,无影响 1224;
- dense_rank() : 相同值有相同序号,有影响 1223;
28. Package(包)
包是一种数据库对象,相当于一个容器。将逻辑上相关的过程、函数、变量、常量和游标组合成一个更大的单位。用户可以从其他 PL/SQL 块中对其进行引用。
相当于C++ 里类一样,有点面向对象的设计思路;
--规范
create or replace package test_pkg is --test_pkg为包名
procedure showMessage; --声明一个过程
function myAdd(x in number,y in number) return number; --声明函数
end test_pkg;
--主体
create or replace package body test_pkg is --包名必须一致
procedure showMessage is --实现规范中的过程
begin
dbms_output.put_line('创建一个简单的包!'); --打印字符串用单引号括起来
end showMessage;
function myAdd(x in number,y in number) --实现函数
return number is
mySum number:=1;
begin
mySum:=x+y;
return mySum;
end myAdd;
end test_pkg;
--调用包,这个仅测试用
set serveroutput on
declare
testSum number:=1;
begin
test_pkg.showMessage;
testSum:=test_pkg.myAdd(10,11);
dbms_output.put_line(testSum);
end;
29. 自治事务
PRAGMA AUTONOMOUS_TRANSACTION
- 第一,这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。
- 第二,在自治事务中,commit或者rollback只会提交或回滚当前自治事务中的DML,不会影响到Main程序中的DML。
RObject twRule::autoCommitToDB(const RString& tmpSql)
{
RString sSql;
sSql.sprintf("DECLARE \
PRAGMA AUTONOMOUS_TRANSACTION; \
BEGIN \
%s; \
COMMIT; \
END; ", tmpSql.data());
RObject obj = cuSelectRawSql(sSql);
RTraceInfo(sSql);
TRACEROBJ(obj);
return obj;
}
< center> ---END--- < /center>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。