【数据库入门】关系型数据库入门及SQL语句的编写

1.数据库的类型:

数据库分为网状数据库,层次数据库,关系型数据库和非关系型数据库四种。
目前市场上比较主流的是:关系型数据库非关系型数据库
关系型数据库使用结构化查询语句(SQL)对关系型数据库进行操作。

2.关系型数据库

数据以二维表的形式进行存储,表和表之间可以建立关联关系(1VS1, 1VSN , NVSN ,通过主外键关系建立的:添加,修改,删除,都是有约束的)

3.mysql

mysql是一种开放源码的,轻量级的关系型数据库。
优点:体积小,成本低,速度快,开放源码等优点。

4.一款操作关系型数据库的语言---SQL(结构化查询语言)

SQL的组成
SQL=DQL+DML+TCL+DCL+DDL

5.DDL(数据的定义语言)+DML(数据的操纵语言)

5.1创建一张表(了解)

create table t_student(sno int(6) primary key auto_increment,    sname varchar(5) not null, sex char(1) default '男' check(sex='男' || sex='女'),age int(3) check(age>=18 and age<=50),enterdate date,classname varchar(10),email varchar(15) unique
);

5.2约束:限制字段的

【以保证数据库中数据的准确性和一致性,这种机制就是完整性约束】

  • 主键约束:非空+唯一
  • 非空约束:
  • 唯一约束:
  • 检查约束:
  • 默认值约束:
  • 自增约束:
  • 外键约束:

根据约束的位置,可以分为表级约束和行级约束
行级约束:直接写在字段名的后面
表级约束:脱离建表语句:写在建表语句的最下方

6.DML(数据的操作语言

6.1添加语句

给表里的所有字段赋值,表名后面可以不写字段名

insert into t_student values(null,"张三",default,50,'2023-12-12','定制14班','asd@qq.com');
insert into t_student 
values(null,"李四",'女',22,now(),'dz14b','aaa@qq.com');

now()表示的是当前时间,可以用SYSDATE()来代替,这个是系统时间,代表电脑上的当前时间

建表后,添加外键约束
加一个班级表

create table t_class(cno int(4) primary key auto_increment,cname varchar(10) not null,room char(4)
)

在学生表里加一个cno
在这里插入图片描述

然后增加一个外键约束

alter table t_student add constraint fk_student_cno foreign key(cno) references t_class(cno);
delete from t_class where cno=3;

执行上面的句子是不行的,因为班级内还有学生

在这里插入图片描述

但是一般我们并不会在数据库增添各种约束,一般压力不会给到数据库,而是会把这些操作给到前端或其他部分

6.2删除语句:

delete from 表名 where 主键=值;

6.3修改语句

update 表 set 列名1=新值,列名2=新值,列名3=值 where 主键=值

删除数据操作 :清空数据

delete from t_student;
truncate table t_student;

#delete #truncate #drop

面试题重点:delete、truncate和drop的区别:

drop全部删除掉:表结构+约束+数据 都删掉

delete 只删除数据(一行一行删除数据)--效率低
truncate 删除数据(删除整张表,重新创建表)--效率高

delete属于DML语句;truncate属于DDL语句
delete 继续延续下标;truncate下标从1重新开始
delete 属于DML语句 可以拥有事务,可以回滚
truncate 属于DDL语句 自动提交事务,没办法回滚

7.DQL数据的查询语言:

查询语句的结构:
select 字段名,字段名,字段名,字段名(如果是表里所有的字段,可以换成*)
from 表名1,表名2,表名3,
where 字段=值 and/or &&|| 字段=值
group by 字段名
having 分组后 数据的筛选条件
order by 字段名,字段名

介绍select部分:

  • a.给字段设置别名
select empno,ename,job,deptno depno from emp;

给deptno起个别名depno,这样如果类的创建的时候名字没有与数据库的对应,可以通过这种方式避免使用反射时修改类里的属性和方法

select concat(empno,'_',ename) '员工基本信息',hiredate '入职时间' from emp;

在这里插入图片描述

  • b.简单的运算:
    --显示所有员工的年薪:
select ename,sal*12+ifnull(comm,0) 年薪 from emp;

由于有的员工的奖金comm为null,无法进行算术运算,导致总年薪无法得到,因此使用ifnull函数,如果为空,赋值为0

--去重:

select distinct deptno from emp;

--显示经理的编号

select distinct mgr from emp order by mgr desc;  //按经理编号倒序排

介绍where部分

等值查询:
--例子:查询部门编号为30,同时mgr编号为7361或者7788的员工信息

select * from emp where deptno=30 and (mgr=7361 or mgr=7781)

其余写法:

select * from emp where deptno=30 and mgr in (7361,7788)

范围查询:
如果是范围查询则用以下两种方法:

select * from emp where deptno=30 and mgr>=7361 and mgr<=7788
select * from emp where deptno=30 and mgr between 7361 and 7788

查询员工姓名,工资和工资等级

select ename,sal,grade,LOSAL,HISAL 
from emp inner join salgrade
on emp.sal>=salgrade.LOSAL and emp.sal<=salgrade.HISAL;

模糊查询:like+% _ --->替换=
%代表0位或者多位
_代表1位

例子:查询员工名字里,或者部门名字里带“发”的所有员工信息

select * from emp inner join dept on emp.deptno=dept.deptno where dname like '%发%' or ename like '%发%';

例子:查询没有奖金的员工信息

select * from emp where comm=0 or comm is null;

空不能用等值,只能用is

不为空的

select * from emp where comm is not null;

介绍from部分:
后面跟表名 别名

介绍sql里的函数:
单行函数:n条数据,得到n个结果
多行函数:多条数据 ,只得到一个结果
count():求总个数
sum():求总和
avg():求平均
max():求最大值
min():求最小值
---求员工的总个数,使用列的别名:工资总和,最大工资,最小工资,平均工资

select count(empno) 员工总个数,sum(sal) 工资总和,max(sal) 最大工资,min(sal) 最小工资,avg(sal) 平均工资 from emp;

---查询1981年最晚入职的员工

select max(hiredate)
from emp
where hiredate between '1981-01-01' and '1981-12-31';

也可以用这种方法:

select * 
from emp 
where hiredate between '1981-01-01' and '1981-12-31' order by hiredate desc 
limit 1;

查询入职时间3个月后的时间

select DATE_ADD(hiredate,INTERVAL 3 MONTH) from emp;

介绍group by分组查询

---显示每个部门最晚的入职时间

select max(hiredate) from emp group by deptno;

---查询每个部门的最晚入职时间,只显示2023以前的(最晚入职时间不可晚于2023-1-1)

select max(hiredate)
from emp
group by deptno
having max(hiredate)<'2023-01-01';

显示各部门的平均工资,按照平均工资倒序排列

select deptno,avg(sal)
from emp
group by deptno
order by avg(sal) desc;

刨除低于2000的员工,统计各部门的平均工资

select deptno,avg(sal)
from emp
where sal>=2000
group by deptno;

刨除低于2000的员工,统计各部门的平均工资,只显示高于3200的平均工资,对显示的数据做正序排列

select deptno,avg(sal)
from emp
where sal>=2000
group by deptno
having avg(sal)>3200;
order by svg(sal)

如果select出现了多行函数,那么剩余的字段必须要出现在group by子句里

介绍多表查询

a.普通多表查询

select e.*,d.dname
from emp e,dept d
where e.deptno=d.deptno and dname='SALES'

b.内连接多表查询

内连接的两张表,没有主次之分,数据根据关联字段进行判断显示
【等上的才显示,没等上的都不显示】

select e.*,d.dname
from emp e
inner join dept d on e.deptno=d.deptno
where dname='sales'

在这里插入图片描述

inner join …on

c.外连接多表查询

外连接的两张表,有主次之分,主表里的数据,一定会都显示出来,而次表的数据,只显示值相当的
【等上显示,没等不显示】
外连接分为左外连接和右外连接
在查询语句里,出现的第一个表为左表,第二个表为右表
如果使用左外连接进行查询,左表就是主表,那么左表里的数据就会全部显示出来
右表只显示值相等的数据

select e.*,d.dname
from emp e
left join dept d on e.deptno=d.deptno
where dname='sales'
select e.*,d.dname
from emp e
right join dept d on e.deptno=d.deptno

在这里插入图片描述

d.关联表中,关联列的名相同:

select e.*,d.dname
from emp e
inner join dept d using (deptno)    --on e.deptno=d.deptno
where dname='sales'

e.关联表中,关联列的名相同,类型相同

select e.*,d.dname
from emp e
natural join dept d   --inner join dept on e.deptno=d.deptno
where dname='sales'  --自然连接

这个是自然连接

扩展:模糊查询

select* from emp where ename like '%M%' and hiredate>='1981-1-03' and hiredate<='1981-12-31'

结果:
在这里插入图片描述

子查询:

例子:查询所有员工中,最低工资是多少,同时显示是哪位员工

select ename,min(sal) from emp 

查询跟上题那个人是同一个部门的所有员工信息
--不相关子查询

select *
from emp
where deptno=(select deptnofrom emp where ename='SMITH123'
)

在这里插入图片描述

查询和最低工资的人在同一个部门的所有员工信息

select *
from emp
where deptno=(select deptnofrom empwhere sal=(select min(sal)from emp	)
)

查询和张发处于同一个工资等级的所有员工的信息

select *
from emp
inner join salgrade s on emp.sal>=s.losal and emp.sal<=s.hisal
where s.grade=(select gradefrom salgradeinner join emp on emp.sal>=salgrade.losal and emp.sal<=salgrade.hisalwhere ename='张发'
)

查询跟SCOTT同一年入职所有员工信息

select *
from emp
where YEAR(hiredate)=(select year(hiredate) from emp where ename='scott')

year(hiredate)表示的是hiredate的年的信息

数据库对象:事务,视图,索引

视图:~表
学习视图的原因?

保证查看者在权限范围内,查看对应的字段。
可以帮忙简化复杂的查询语句

创建一个视图:

create view v_empnoAndSalasselect empno,salfrom emp;

创建视图连接3个表:

create view v_infoasselect e.*,d.dname,d.loc,s.*from emp e inner join dept d on e.deptno=d.deptnoinner join salgrade s on e.sal>=s.LOSAL and e.sal<=s.HISAL

事务:

  • 使用场合:事务应用在 业务层,在业务层做功能的整合
    京东下单---控制层调用业务层的付款方法---17个各个dao层里的方法。

  • 作用:让多个DML语句作为一个整体,这些DML语句要么同时成功,要么同时失败

  • 事务的特征:【重要!要背!】ACID
    一致性、隔离性、持久性、原子性

  • 事务的并发问题:
    (1)读了别人事务中没提交的数据叫脏读(Dirty read)【不可接受】
    (2)读到了别人事务提交后的数据(修改操作)
    不可重复读【可以接受】
    (3)读到了别的事务提交后的数据(添加/删除操作),幻读【可以接受】==>针对以上三种事务的并发问题,mysql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024亚太杯亚太赛APMCM C题】数学建模竞赛|宠物行业及相关产业的发展分析与策略|建模过程+完整代码论文全解全析

第一个问题是&#xff1a;请基于附件 1 中的数据以及你的团队收集的额外数据&#xff0c;分析过去五年中国宠物行业按宠物类型的发展情况。并分析中国宠物行业发展的因素&#xff0c;预测未来三年中国宠物行业的发展。 第一个问题&#xff1a;分析中国宠物行业按宠物类型的发展…

合法三元数量计算

问题描述 小C、小U 和小R 三个好朋友喜欢做一些数字谜题。这次他们遇到一个问题&#xff0c;给定一个长度为n的数组a&#xff0c;他们想要找出符合特定条件的三元组 (i, j, k)。具体来说&#xff0c;三元组要满足 0 < i < j < k < n&#xff0c;并且 max(a[i], a[…

wsl虚拟机中的dockers容器访问不了物理主机

1 首先保证wsl虚拟机能够访问宿主机IP地址&#xff0c;wsl虚拟机通过vEthernet (WSL)的地址访问&#xff0c;着意味着容器也要通过此IP地址访问物理主机。 2 遇到的问题&#xff1a;wsl虚拟机中安装了docker&#xff0c;用在用到docker容器内的开发环境&#xff0c;但是虚拟机…

深入了解 Linux htop 命令:功能、用法与示例

文章目录 深入了解 Linux htop 命令&#xff1a;功能、用法与示例什么是 htop&#xff1f;htop 的安装htop的基本功能A区&#xff1a;系统资源使用情况B区&#xff1a;系统概览信息C区&#xff1a;进程列表D区&#xff1a;功能键快捷方式 与 top 的对比常见用法与示例实际场景应…

如何删除Kafka中的数据以及删除topic

如何删除Kafka数据已经以及删除topic呢&#xff1f; 1、删除数据 先启动Kafka实例 docker exec -it kafka-0 /bin/bash #进去容器 rm -rf /bitnami/kafka/data/* #删除数据 exit #退出如果删除失败&#xff0c;可能是数据不存在于/bitnami/kafka/data&#xff0c;使用 cd /o…

Easyexcel(4-模板文件)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09; 文件导出 获取 resources 目录下的文件&#xff0c;使用 withTemplate 获…

【2024最新】基于springboot+vue的疫情网课管理系统lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

贴代码框架PasteForm特性介绍之image

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…

从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望

作者&#xff1a;金峰&#xff08;项良&#xff09;、朱永林、赵世振&#xff08;寰奕&#xff09; 公司简介 杭州热联集团股份有限公司成立于 1997 年 10 月&#xff0c;是隶属杭州市实业投资集团的国有控股公司。公司专业从事国际、国内钢铁贸易黑色大宗商品及产业服务&…

Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画

Python Turtle召唤童年&#xff1a;喜羊羊与灰太狼之懒羊羊绘画 &#x1f438; 前言 &#x1f438;&#x1f41e;往期绘画&#x1f41e;&#x1f40b; 效果图 &#x1f40b;&#x1f409; 代码 &#x1f409; &#x1f438; 前言 &#x1f438; 小时候&#xff0c;每次打开电视…

SpringBoot学习记录(四)之分页查询

SpringBoot学习记录&#xff08;四&#xff09;之分页查询 一、业务需求1、基本信息2、请求参数3、相应数据 二、传统方式分页三、使用PageHelper分页插件 一、业务需求 根据条件进行员工数据的条件分页查询 1、基本信息 请求路径&#xff1a; /emps 请求方式&#xff1a; …

6. Spring Cloud Gateway网关超详细内容配置解析说明

6. Spring Cloud Gateway网关超详细内容配置解析说明 文章目录 6. Spring Cloud Gateway网关超详细内容配置解析说明前言1 Spring Cloud Gateway 概述1.1 Spring Cloud Gateway网关 的核心功能1.2 Spring Cloud Gateway VS Zuul 的区别1.3 Spring Cloud Gateway 的基本原理1.4 …

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言&#xff1a;大家好&#xff01;今天我要教你们如何在树莓派5上安装Raspberry Pi OS&#xff0c;并配置SSH和VNC权限。通过这些步骤&#xff0c;你将能够在Windows电脑上使用VNC Viewer&#xff0c;结合Cpolar内网穿透工具&#xff0c;实现长期的公网远程访问管理本地树莓派…

Centos 8, add repo

Centos repo前言 Centos 8更换在线阿里云创建一键更换repo 自动化脚本 华为Centos 源 , 阿里云Centos 源 华为epel 源 , 阿里云epel 源vim /centos8_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author: make.han

【机器学习】回归模型(线性回归+逻辑回归)原理详解

线性回归 Linear Regression 1 概述 线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合&#xff08;加减乘除&#xff09;起来&#xff0c;得到的结果和目标接近。 线性回归分为一元线性回归和多元线性回归。 2 一元线…

2024年亚太地区数学建模大赛D题-探索量子加速人工智能的前沿领域

量子计算在解决复杂问题和处理大规模数据集方面具有巨大的潜力&#xff0c;远远超过了经典计算机的能力。当与人工智能&#xff08;AI&#xff09;集成时&#xff0c;量子计算可以带来革命性的突破。它的并行处理能力能够在更短的时间内解决更复杂的问题&#xff0c;这对优化和…

STM32F103 GPIO和串口实战

本节我们将会对STM32F103的硬件资源GPIO和串口进行介绍。 一、GPIO 1.1 电路原理图 LED电路原理图如下图所示&#xff1a; 其中&#xff1a; LED1连接到PA8引脚&#xff0c;低电平点亮&#xff1b;LED2连接到PD2引脚&#xff0c;低电平点亮&#xff1b; 1.2 GPIO引脚介绍 STM32…

FileProvider高版本使用,跨进程传输文件

高版本的android对文件权限的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider去实现,这篇博客来一起了解下它的实现原理。 首先我们要明确一点,FileProvider就是一个ContentProvider,所以需要在AndroidManifest.xml里面对它进行声明: <provideran…

国产linux系统(银河麒麟,统信uos)使用 PageOffice 动态生成word文件

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;LoogArch&#xff09;芯片架构。 数据区域填充文本 数…

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果&#xff1a; – 使用Pygame模拟粒子运动&#xff0c;粒子会以爱心的轨迹分布并运动。爱心公式&#xff1a; 爱心的数学公式&#xff1a; x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果&#xff1a; 粒子…