SQL语句总结

目录

一、DDL语句(操作表结构)

1. 创建数据库、表

2. 增加表中属性:ALTER

3. 对性别的约束(枚举):CHECK()、IN

4. 属性的初始值预设:DEFAULT

5. 显示整张表

6. 外键:references(需要先创建主表)

8. 修改列名、列的数据类型

9. 增加、删除表中行数据

10. 检查字段:LIKE

二、DML语句(操作表数据)

insert插入语句

update更新语句

delete删除语句

4. 选择语句:SELECT + 表字段名 + FROM +数据表名+ WHERE + 筛选条件

三、存储过程

1. 创建存储过程

2. 调用/删除存储过程


一、DDL语句(操作表结构)

1. 创建数据库、表

CREATE DATABASE mybase;

--查看所存在的所有数据库
postgres=# \l
--进入所创建的数据库
\c mybase
--在mybase数据库中创建表student
CREATE TABLE student;

2. 增加表中属性:ALTER

ALTER TABLE student ADD ssex varchar(2);

3. 对性别的约束(枚举):CHECK()、IN

ALTER TABLE student ADD ssex varchar(2) CHECK(ssex IN('男', '女'));

4. 属性的初始值预设:DEFAULT

ALTER TABLE student ADD Totalcredit smallint DEFAULT 0;

5. 显示整张表

\\\\d student

6. 外键:references(需要先创建主表)

postgres=# ALTER TABLE STUDENT ADD classno varchar(6) references CLASS(classno);

8. 修改列名、列的数据类型

--RENAME COLUMN __ TO
ALTER TABLE student RENAME COLUMN sname TO name;
--ALTER COLUMN __ TYPE __
ALTER TABLE STUDENT ALTER COLUMN addr TYPE varchar(25);

9. 增加、删除表中行数据

INSERT INTO STUDENT VALUES({values1},{values2},···);
DELETE FROM STUDENT WHERE {column}={value};

10. 检查字段:LIKE

--'李%' 筛选以'李'开头的数据
--'%李%' 筛选包含'李'的数据

二、DML语句(操作表数据)

1. insert插入语句

--插入一行值
insert into table(sno,sname,ssex)
values('18301001','czm','male')

--从其他表赋值多行
insert into table
(select ...)

2. update更新语句

update tablename
set columnName = newValue
(where {condition}) --指定行更新

--使用子查询更新(STAFF、Branch两个表不能并列写在更新列,只能用子查询)
update STAFF
set salary = salary*1.03
where branchNo in (select branchNo from Branch)

3. delete删除语句

delete from tablename
(where ...) --加where:删除指定行

4. 选择语句:SELECT + 表字段名 + FROM +数据表名+ WHERE + 筛选条件

SELECT ssex,sno,sname,sbirthday FROM STUDENT WHERE ssex = '男';

三、存储过程

事先编译好、储存在数据库中的程序,用这些程序完成对数据库的操作

1. 创建存储过程

--1. 函数头、形参
CREATE OR REPLACE PROCEDURE transfer
	(inAccount INT, outAccount INT, amount FLOAT)
	--定义存储过程transfer(函数名),其参数为:(转入账户、转出账户、转账金额),类似形参
--2. 定义变量
IS (AS DECLARE)
	balance Float; -- 存放金额的局部变量,类似函数的局部变量
--3. 函数主体
BEGIN
	--3.1 检查账户合法性
	SELECT Total INTO balance -- 把余额转出赋值balance
	FROM Account
	WHERE accountnum=outAccount;

	IF balance IS NULL THEN
		ROLLBACK; -- 回滚事务
		RETURN;
    ENDIF;

    IF balance < amount THEN
    	ROLLBACK;
    	RETURN;
    END IF;

2. 调用/删除存储过程

格式:CALL/PROFORM PROCEDURE 存储过程名([参数1, 参数2,...]);

--例如:从账户01003813828转10000元到另一个账户01003815868中
CALL PROCEDURE transfer(01003813828, 01003815868, 10000);
/EXEC transfer(01003813828, 01003815868, 10000);

--删除存储过程
DROP PROCEDURE transfer();
--plsql

declare
	v_cname VARCHAR(10);
	v_cno in student.cno%TYPE;
begin
	select cname, cno into v_cname, v_cno
	from student;
end;
	--1.if语句
	if v_came="aaaa"
	then
		--blabal;
	elsif
		--blabla;
    end if;

    --2. 循环
    --2.0 基本循环
    loop
    	exit when count > 0; --退出循环标志
    	if a > 3
    	then exit;
    	end if;
    end loop;
    --2.1 for循环
    for a in 1..50 loop
    end loop;
    --2.2 while循环
    while a > 4 loop
    end loop;
    --2.3 go to块
    go to this;

    <<this>>

    --异常处理
    declare
    	my_error exception;--自定义异常
    begin
    	if ... then
    	raise my_error;--自定义抛出异常

    	--捕获系统异常
    	when no_data_found then
    		...;
    	when ...then
    		...;

    	--捕获自定义异常
    	when my_error then
    		...;

    --"游标"
declare
	cursor c1 is select a, b from student;
begin
	open c1;
	loop
		fetch c1 into v1,v2;
		exit when c1%notfound;
		insert into table() values();
	end loop;

--存储过程
    create or replace procedure p1(
        --形参
        v1 in student.cno%TYPE;
        v2 in...;
    )
    is
    	local FLOAT;--局部变量
    begin
    	...
    end;

--调用存储过程
exec p1(a,b);

四、触发器

create or replace TRIGGER t1
before insert or update or delete on table1
for each row
when (new.job = 'salman')
declare
	a in student.sno%TYPE:=4;
begin
	a:= :old.sno;

end;

alter table a alter column sno type char
alter table a rename column sno to s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值