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填充


































相关文章
|
18天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
4天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
29天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
96 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
19天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
36 4
|
18天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
19天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
27天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
150 1
|
28天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
52 2
|
29天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
19 2
|
2月前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。