数据库DBDBMSSQL
目录
数据库——(DB、DBMS、SQL)
前言
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
数据库常见概念
DB
概念:
数据库,保存一组有组织的数据容器。
优点:
- 实现数据持久化。
- 使用完整的管理系统统一管理,易于查询。
特点:
- 将数据放到表中,表再放到库中。
- 一个数据库可以有多个表,每个表都有一个名字,用来标识自己;表名具有唯一性。
- 表具有一些特性,这些特性定义了数据在表中如何存储,类似 java 中“类”的设计
- 表由列组成,我们也称为‘字段’。所以表都是由一个或者多个列组成的,每一列类似于 java 中的“属性”
- 表中的数据是按行存储的,每一行类似于 java 中的“对象”。
DBMS
概念:
数据库管理系统,又称数据库软件(产品),用于管理DB中的数据
常见的数据管理系统:mysql、oracle、db2、sqlserver
SQL
概念:
结构化查询语言,用于和DBMS通信的语言,不是某个数据库软件特有的,而是所有的主流数据库软件通用的语言
连接查询
按年份分类:
sql92:
- 等值连接
- 非等值连接
- 自连接
sql99:
内连接
等值连接
非等值连接
自连接
外连接
-左外连接
-右外连接
交叉连接
子查询
含义 :嵌套在其他语句内部的select语句称为子查询或内查询
外面的语句可以是:insert、update、delete、select等,一般select作为外面语句较多
外面如果为select语句,则此语句称为外查询或主查询
分类
按出现的位置分类:
- select后面:仅仅支持标量子查询
- from后面:表子查询
- where 或 having 后面:标量子查询、列子查询、行子查询
- exists后面:标量子查询、列子查询、行子查询、表子查询
按结果集分类:
- 标量子查询(单行子查询):结果集为一行一列
- 列子查询(多行子查询):结果集为多行一列
- 行子查询:结果集为多行多列
- 表子查询:结果集为多行多列(任意)
案例
这是力扣中的数据库中的一道例题
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。
Department 表包含公司所有部门的信息。
编写一个 SQL 查询,找出每个部门工资最高的员工。对于上述表,您的 SQL 查询应返回以下行(行的顺序无关紧要)。
解题思路:
①求出每个部门对应的最高工资和部门编号
select max(Salary),DepartmentId
from Employee
group by DepartmentId
②内连接两表并进行筛选
# Write your MySQL query statement below
select d.Name Department,e.Name Employee,e.Salary Salary
from Employee e, Department d
where e.DepartmentId=d.Id
and (e.Salary,e.DepartmentId) IN (
select max(Salary),DepartmentId
from Employee
group by DepartmentId
);
运行结果如下: