sql注入原理与实战(二)数据库原理

简介: sql注入原理与实战(二)数据库原理

image.png

数据库架构

数据库结构是指数据库系统中数据的组织方式和存储方式。常见的数据库结构有单用户结构、主从式结构、分布式结构、客户-服务器结构、浏览器-应用服务器/数据库服务器结构等。数据库结构包括三个层次:外模式、概念模式和内模式。其中,外模式是用户看到的视图,概念模式是数据库的逻辑结构,内模式是数据库在存储介质上的物理结构。保证数据的物理独立性是数据库设计的一个重要目标,即当数据库的存储结构改变时,只需要修改模式/内模式映像,而不需要修改应用程序,从而保证了数据与程序的物理独立性。

image.png



数据库的存储特点

数据存放到表中,然后表再放到库中

一个库中可以有多张表,每张表具有唯一的表名用来标识自己

表中有一个或多个列,列又称为“字段”,相当于Java中“属性”

表中的每一行数据,相当于Java中“对象”

完整语法

一、语法

select [TOP|DISTINCT] [选择列表]|[*]

from 数据源

[where 查询条件]

[group by 分组条件]

[having 过滤条件]

[order by 排序条件 asc|desc nulls first|last];

二、执行顺序

(5)select [(5-3)TOP|(5-2)DISTINCT] (5-1)[选择列表]|[*]
(1)from 数据源
(2)[where 查询条件]
(3)[group by 分组条件]
(4)[having 过滤条件]
(6)[order by asc|desc nulls first|last];

简单查询

--查询所有员工的信息

select * from emp;

别名查询

--查询所有员工的姓名

select e.ename from emp e;

去重查询

--查询所有部门的编号

select distinct e.deptno from emp e;

条件查询

一、运算符

条件运算符:>、>=、<、<=、=、<=>、!=、<>

逻辑运算符:and、or、not

模糊运算符:

like:%任意多个字符、_任意单个字符、如果有特殊字符,需要使用escape转义

between and

not between and

in

is null

is not null

二、演示

--查询工资>3000的员工信息

select * from emp where sal > 3000;

3.6、分组查询

--统计每个部门有多少个人

select deptno as "部门",count(*) as "人数" from emp group by deptno;

3.7、分组过滤

--统计部门人数>5人的部门的编号
select deptno as "部门", count(*) as "人数"from emp
group by deptno
having count(*) > 5;

3.8、排序查询

--按照员工主管编号由高到低进行排序,NULL值放到最后边

select * from emp order by mgr desc nulls last;

3.9、分页查询

--查询前10条员工的信息
--注意:Oracle中不支持limit,需要在原始表加上一列:行号,然后使用子查询来实现分页
select *  
from (select rownum hanghao,e.* from emp e) t
where t.hanghao >=1 and t.hanghao <= 10;

3.10、多表查询

内连接

隐式内连接:select * from emp e1, dept d1 where e1.deptno = d1.deptno;

显示内连接:select * from emp e1 inner join dept d1 on e1.deptno = d1.deptno;

外连接

左外连接

隐式左外连接:select * from emp e1,dept d1 where e1.deptno = d1.deptno(+);

显示左外连接:select * from emp e1 left outer join dept d1 on e1.deptno = d1.deptno;

右外连接

隐式右外连接:select * from emp e1,dept d1 where e1.deptno(+) = d1.deptno;

显示右外连接:select * from emp e1 right outer join dept d1 on e1.deptno = d1.deptno;

全外连接:select * from emp e1 full outer join dept d1 on e1.deptno = d1.deptno;

交叉连接

隐式交叉连接:select * from emp, dept;

显示交叉连接:select * from emp e1 cross join dept d1;

3.11、联合查询

并集运算:将两个查询结果进行合并
/*
  union   : 它会去除重复的,并且排序
  union all  : 不会去除重复的,不会排序
*/
--工资大于1500或者20号部门下的员工
select * from emp where sal > 1500
union
select * from emp where deptno = 20;
--工资大于1500或者20号部门下的员工
select * from emp where sal > 1500
union all
select * from emp where deptno = 20;

交集运算:找两个查询结果的交集

--工资大于1500并且20号部门下的员工
select * from emp where sal > 1500
intersect
select * from emp where deptno = 20;

差集运算:找两个查询结果的差集

--1981年入职员工(不包括总裁和经理)
select * from emp where to_char(hiredate,'yyyy') = '1981'
minus
select * from emp where job = 'PRESIDENT' or job = 'MANAGER';

注意事项:

列的类型要一致

列的顺序要一致

列的数量要一致,如果不够,可以使用null填充


































相关文章
|
1天前
|
SQL 数据库
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
LangChain-09 Query SQL DB With RUN GPT 查询数据库 并 执行SQL 返回结果
10 2
|
1天前
|
SQL 监控 安全
SQL注入公鸡分类及原理
SQL注入公鸡分类及原理
|
1天前
|
存储 SQL 关系型数据库
MySQL查询数据库锁表的SQL语句
MySQL查询数据库锁表的SQL语句
10 1
|
1天前
|
SQL 数据可视化 关系型数据库
【数据库工具】DBeaver:一款免费的通用数据库工具和 SQL 客户端
【数据库工具】DBeaver:一款免费的通用数据库工具和 SQL 客户端
10 1
|
1天前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
1天前
|
SQL 数据库
SQL-serve数据库不能连接本地服务器的解决方案
SQL-serve数据库不能连接本地服务器的解决方案
22 0
|
1天前
|
SQL 关系型数据库 Serverless
sql注入原理与实战(四)数据表操作
sql注入原理与实战(四)数据表操作
|
15天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
3月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
71 13
|
3月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。

热门文章

最新文章