2021-11-06数据库

一、表的创建
create table 表名(
列名1 数据类型 [primary key],
列名2 数据类型 [unique],
列名3 数据类型[not null]
);

create table student(
id number,
name varchar2(50),
sex char(10),
birthday date
);

删除表 drop table 表名
表改名 rename 表名 to新表名

列操作
增加列alter table 表名 add(字段名 字段类型)
alter table student add(score number)
删除列 alter table 表名 drop列名
alter table student drop score
修改列 alter table 表名 modify 列名 数据类型
alter table student modify name not null
修改列名 alter table 表名 rename 列名 to新列名
alter table student rename score to score1

二、数据类型
数字型 字符串 日期

三、六大约束
主键 唯一 非空 检查 默认值 外键

四、事物
原子性 一致性 持久性 隔离性
结束事物两种方式 提交 回滚。

五、复制表
create table student1 as select * from student;
插入数据
insert into student (name,id) values (“张三”,10);
删除数据
delete from student where name=“张三”;
修改数据
update from student set name=“李四” where id=10;
查询数据
select 列名1,列名2 from student;
条件查询 where
所有列查询 星号
去重复行 distinct
多条件过滤 and or not != <> not in in between and

六、模糊查询like
%表示匹配任意长度字符串
%test% 表示中间为test任意长度字符串
_表示一个字符
O_a表示长度为三 O开头a结尾的字符串

七、排序
order by desc是降序
select * from student where id>10 order by id desc;

八、分组查询
分组函数
count
avg
max
min
sum
用到每个 group by

分组列的一定要在选择的列名上。

带条件的查询:
执行过程的顺序。
select 列名 from 表名 where 条件 group by 列 having 条件 order by 列名

九、多表连查
内链接:
1.等值查询
select 列名 from 表名1,表名2 where 表1.列=表2.列;
等价于: select 列名 from 表1 inner join 表2 on 表1.列=表2.列;

2.不等值查询
select 列名 from 表名1,表名2 where 表1.列>表2.列;

3.自链接查询
select 列名 from 表名 别名1,表名 别名2 where 别名1.列=别名2.列;
使用自链接时,必须使用表别名。

外链接:
左外链接 左表所有数据都显示,右表显示出符合条件的,不符合条件显示null。
select * from 表1 left join 表2 on表1.列=表2.列;

右外链接 右表所有数据都显示,左边显示出符合条件的,不符合条件的显示null。
select * from 表1 right join 表2 on 表1.列=表2.列;

子查询:
select 列名 from (select 列名 from 表名 where 条件) where 条件;
分为单值子查询和多值子查询。
多值子查询 用 in not in

10、扩展篇
1.列伪 rownum
Oracle 用limit进行查询多少行。

2.视图
封装的SQL语句,不能插入修改删除数据。只能查询。

索引
书的目录,提高查询效率。包括唯一索引和普通索引。

3.并集运算
select * from 表 union select * from 表;
union结果会去重复行
union all结果不会去重复行

4.查询表
select * from all_tables; 系统里有权限的表;
select * from dba_tables;系统表;
select * from user_tables;当前用户下的表;

5.PLSQL
在SQL的基础上添加一些过程化的控制语句,包括循环判断等。只能使用DML,不能直接使用DDL。

结构:
declare
变量申明;
begin
DML操作;
end;

declare
mysum number(3)
begin
mysum:=10+100
dms_output.put_line('结果是:'||mysum)

储存过程:
为了完成特定功能的PLSQL语句。
结构
create [or replace] procedure 过程名(参数名 in/out 数据类型)
AS或者is
begin
PLSQL子程序体;
End;

create or replace hello
as
begin
dbms.output.put_line(‘helloword’);
end;

调用
begin
hello;
end;

储存函数:
和系统内函数差不多
结构
create or replace function 函数名(name in type)
return 数据类型 is
结果变量 数据类型;
begin
SQL语句;
return(结果变量);
end 函数名;

create or replace function salf (pno in emp.empno%type) return number is
result number;
begin
select t.sal * 12+nvl(t.comm,0)
into result
from emp t
where t.empno=pno;
return (result);
end salf;

调用
declare
income number;
begin
empincomep(7369,income);
dbms_output.put_line(income);

十、DML DDL DCL
DDL create drop alter 不会对具体数据进行操作。
DML insert delete update 对具体数据。
DCL grant revoke 权限。

十一、执行顺序
from where group by having order by

十二、delete truncate drop区别
相同点:都会把表内数据进行删除。
delete:
1.DML语句,可以回滚。
2.不会改变表所占用的空间。
3.可以删除表和视图。
4.删除表数据。
5.速度慢。
truncate:
1.删除表中所有数据,执行速度快。
2.删除后,表和索引所占用的空间,回到原始大小。
3.只能删除表。
4.删除表数据。
5.DDL语句,不能回滚。
6.速度中。
drop:
1.删除后,释放所有空间。
2.可以删除表和视图。
3.会删除整个表结构。
4.DDL语句。不能回滚。
5.速度快。

十三、常用函数
length replace substr 聚合函数 to_char to_date

十四、count(1)和count()的区别
几乎一样,速度的区别。
count(
)和count(列) 后者不会统计为null的行。

十五、游标 触发器
触发器:对表进行插入更新删除会自动触发存储过程。
游标:一行一行的去处理SQL返回的结果。允许对返回的结果每一行执行不同的操作,而不是对所有返回结果执行同一操作。
五个阶段:申明游标、打开游标、读取游标数据、关闭游标、释放游标。

十六、存储过程 函数的区别
1.函数可以有返回值,而过程和函数都可以通过out制定输出参数。
2.存储过程的参数有 in out inout 三种,函数只有in。
3.函数可以嵌入SQL语句中使用,存储过程不行。

十七、MySQL 和Oracle区别
1.MySQL默认自动提交,而Oracle需要commit。
2.分页查询 MySQL 用limit,Oracle用rownum。
3.MySQL是轻量数据库,Oracle是重量型数据库。
4.Oracle只能用单引号包涵字符,MySQL可以用双引号。

使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值