软件构成之数据库篇1

软件的构成?

应用部分(前端+服务器) + 数据存储(数据库)

数据库

SQL语句(Structured Query Language)结构化查询语言

​ 数据库:MySQL、Oracle、SQLServer、PostgreSQL

  1. 数据定义语言(DDL):create 、 drop
  2. 数据操作语言(DML):insert 、 update 、 delete
  3. 数据查询语言(DQL):select 、 where【重点】
  4. 数据控制语言(DCL):grant (赋权)
  5. 事务控制语言(TCL):commit 、 rollback

重点关键词

select \ where

and \ or \ in

between and

inner join \ left right join

group by \ order by

limit

as

聚合函数 sum 、 avg 、 count

1.select

  • and
select * from sys_dept where dept_id = 100 and status = 0;
  • or
select * from sys_dept where dept_id = 100 or status = 0 or leader = "若依";
  • in
select * from sys_dept where dept_id in (101,102,103);
  • between and
select * from sys_dept where dept_id between 100 and 105;
select * from sys_dept where create_time between '2023-11-11 00:00:00' and '2023-11-11 23:59:59';

数据类型的隐式转换:'2023-11-11 00:00:00’字符串转时间

  • group by 分组查询
select dept_name , count(*) from sys_dept group by dept_name;
select dept_name , dept_id  ,count(*) from sys_dept group by dept_name ,dept_id;

​ count(*)<==>count(dept_name),其对象为dept_name

查询结果不同,第二条是将dept_name , dept_id两个字段同时相同的行进行合并

​ 如果你使用了 GROUP BY 子句,那么 SELECT 中的字段必须是聚合函数(如 COUNT、SUM、AVG 等)或者在 GROUP BY 子句中列出的字段

select count(*) from sys_dept;

select count(1) from sys_dept;

分别对sys_dept表的所有列和主键进行统计

  • having 对分组结果进一步筛选
select dept_name , count(1) from sys_dept group by dept_name having count(1)>1;
  • order by 排序(倒/默认升)
select * from sys_dept order by dept_id asc;
select * from sys_dept order by dept_id desc;
  • limit 获取指定条数
select * from sys_dept limit 3;
select * from sys_dept limit 3,5;

获取前三条数据

从第四条开始查5条

  • like 模糊查询
select * from sys_dept where dept_name like '%科技';
select * from sys_dept where dept_name like '_科技';

以‘科技‘结尾,%占未知位置

第二三个字为’科技’,_占一个字位

  • 去除重复数据
select distinct * from sys_dept
  • as 取别名
select * from sys_dept as dept limit 2;

2.DQL高级查询

查询所用到的三个表

在这里插入图片描述

2.1连接查询

(数据多、少查询,可创建视图、存储过程)

2.1.1内连接

定义:内连接查询是一种查询操作,用于在关系型数据库中将两个或多个表中满足连接条件的行组合在一起,返回满足连接条件的行,并且只返回那些在两个表中都存在匹配行的数据。

SELECT 列名
FROM1
INNER JOIN2 ON1.字段 =2.字段
INNER JOIN3 ON1.字段 =3.字段;
select * from a,b,c where a.id1=b.id2 and b.id2=c.id3;

注意:不带on后的条件,查询结果为笛卡尔积

在这里插入图片描述

注意:第一个表数据冗余,无法单表实现一个人两个身份

在这里插入图片描述

解决方法:通过第三表(关系表)实现,更好做扩展,表独立

在这里插入图片描述

2.1.2外连接

左外连接:一种数据连接方式,用于将左边表中的所有行右边表中满足连接条件的行组合在一起。如果右表中没有匹配的行,则在结果集中显示为NULL值。

select * from tuser a left join trole b
on a.rid=b.rid;

在这里插入图片描述

右外连接:同上理

select * from tuser a  right join trole b
on a.rid=b.rid;

在这里插入图片描述

2.2合并查询

合并查询指在关系型数据库中使用联合(Union)操作符将两个或多个查询的结果集合并在一起

2.2.1单表合并
函数使用说明
union出现相同行时,不保留重复行,进行去重处理
union all出现相同行时,保留重复行,不进行去重
select rid from tuser  
union
select rid from trole;

在这里插入图片描述

2.2.2多表合并
  • 列的数量和关系保持一致
2.3子查询
  • 以查询结果作为筛选条件加入其他查询
  • 位置:where后面、from后面、having的条件

角色为董事长的人的数据:

​ 内连接实现:

select a.* , b.rname from tuser a 
    inner join trole b
    on a.rid=b.rid and b.rname="董事长";

在这里插入图片描述

子查询实现:

select a.* from tuser a 
    where a.rid=(
    select rid from trole where rname="董事长"
    );

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值