数据库简介和SQL的DDL,DML,DQL(增删改查)

数据库概念

为什么学习数据库:

1.web中的数据量非常大

2.数据不方便存储和管理

什么是数据库:用于存储和管理数据的仓库

数据库的特点:

  • 数据可以实现持久化存储,其实数据库就是一个文件管理系统
  • 可以很方便的存储和管理数据
  • 数据库定义了统一的方式,才操作数据库。 -SQL Structure Quary Lanaguage 接过话查询语句

常见的数据库软件:

  • Oracle 收费的大型关系型数据库
  • MySQL 开源免费的数据库,中小型关系数据库
  • PSL 免费的数据库
  • DB2 IBM公司 收费 常用在银行系统中
  • redis 免费,非关系型数据库 key-value键值对
  • MongoDB 非关系型数据库 文档类型

SQL:结构化查询语言,Structured Quary Language

数据库管理系统,数据库和表的关系

可以使用数据库管理系统创建多个数据库,比如java31/apartment数据库…,一般一个项目对应的是一个数据库,一个数据库可以创建多张表,一般在项目中,数据库中的表映射Mode类 pojo,model,entry

比如数据库中创建一张用户表user 在后再服务器中一般对应的都有一个model类 User.class

后台中的model类一般用于临时存储从数据库中查询出来对应表中的数据,如从user表中查询出来一条记录,这条记录对应的就是后台服务器中的一个user对象(属性)

SQL操作数据库

概念:

结构化查询语言 Structured Quary Language

作用:
  1. 是一种数据库的查询的标准,对虽有的数据库都支持
  2. 不同的数据库SQL语句可能有不点不同(方言),MySQL Oracle DB2
sql语句分类
  1. DDL:操作数据库,表 。数据库定义语言 :Data Definition Language
  2. DML:增删改表中的记录 。数据库操作语言 :Data Manipulation Language
  3. DQL:查询表中的记录 。数据查询语言 :Data Query Language
  4. DCL:管理用户与授权 。数据控制语言 Data Control Language
数据类型
  • 整数类型 tinyint(微整形)8位
    smallint(小整形)16位
    mediumint(中整形)24位
    int(integer整形)32位

  • 小数类型
    double 8个字节
    float 4个字节

  • 日期类型
    date(年月日)
    time(时分秒)
    datetime(年月日时分秒)
    timestamp(时间戳 年月日时分秒):如果该字段为时间戳类型,没有赋值或该字段位null,会默认使用系统当前的时间自动赋值。一般情况一张表只能有一个字段使用时间戳数据类型

  • 字符串类型
    char(固定长度的字符串)

    varchar(可变长度的字符串) 使用几个字符就占几个

  • 二进制类型
    tinyblob(允许0~255个字节)
    big large
    blob(允许0~65535个字节)
    longblob(非常大)

  • 文本类型
    tinytext(允许长度为0~255个字节)
    text(允许0~65535个字节)
    longtext(非常大)

DDL语言
操作数据库
  1. 创建数据库 方式有很多种:
    • create database 数据库名;
    • create database if not exists 数据库名; (创建的时候先判断数据库是否存在
    • create database 数据库名 character set 编码字符集; (创建数据库的时候指定编码字符集
    • 三者组合到一起表达
      create database if not exists college character set utf8;
  2. 查询 r -->retrieve
    • 查询当前数据库服务器:
      show databases;
    • 查询某个数据库的编码字符集:
      showcreate database college;
  3. 修改 u—>update
    • 修改数据库的编码字符集
      alter database 数据库名称 character set 编码字符集;
  4. 删除 d—>delete drop
    • 删除数据库
      drop database 数据库名称;
    • 判断数据库是否存在,存在删除掉
      drop database if exists 数据库名称;
操作表
  1. 创建表 C—>create

    • 语法:

      create table 表名(

      列名1 数据类型,

      列名2 数据类型,

      ......

      )

  2. 查看表

    • 查看当前使用的数据库所有的表
      show table;
    • 描述该表的结果
      desc 表命;
    • 查看创建的表
      show create table 表名;
    • 快速创建一个表结构相同的表(复制表)
      create table 新表名 like 旧表名;
  3. 修改 update

    • 修改表名
      alter table 旧表名 rename to 新表名;
    • 修改表的编码字符集
      alter table 表名character set 编码字符集;
    • 添加一列字段 add
      add table 表名 add 列名 数据类型;
    • 删除一列 drop
      alter table 表名 drop 类名;
    • 修改列名 数据类型
      • change: alter table 表名 change 旧列名 新列名 新数据类型;
      • modify:alter table 表名 modify 列名 新数据类型;
  4. 删除 delete

    • 删除表
      drop table 表名;
    • 删除判断表是否存在:
      drop table if exists 表名

大多数情况下我们是借助于图形化管理工具Naviget来操作


DML 增删该数据库中的表的数据
1.添加数据:
  • 语法:insert into 表名(列名1,列名2,......列名n) values(值1,值2,......值n);
  • 注意事项:
    • 列名和后面的值的类型要保持一致
    • 如果表名后面没有指定列名,默认为该该表中的所有的列添加对应的值。注意依然是有顺序的
    • insert into 表名 values(值1,值2,…值n);
    • 除了数字类型外 (int double),其他类型一律要使用引号(单引号或双引号)引起来。
2.删除数据:
  • 语法:delete
    delete from 表名 [where 条件];
  • 注意事项
    • 如果后面不跟条件,则删除整张表中的数据
    • 删除表的所有记录:delete from 表名 / truncate table 表名;(底层是先把表删了,然后创建一张一摸一样的表)
    • 如果条件中的字段值有重复的,凡是符合条件的都删除
3.修改数据:
  • 语法:
    update 表名 set 列名1 = 替换值1,列名2 = 替换值2,......列名n = 替换值n [where 条件];
  • 注意:
    • 如果不带条件,会修改表中的所有记录

DQL查询表中的记录 select from

语法:

select 需要查询的信息(列名1,列名2,......列名n)/ * from 表名 [where 条件];

  • ifnull表达式:ifnull(表达式1,表达式2)
    表达式1:代表那个字段需要判断是否为null
    表达式2:如果该字段值为null 后面的可以进行替换
查询表中的所有的行和列的数据

select * from 表名;

查询指定列的数据:如果有多个列,中间用逗号隔开。

select 列名,列名2,列名3,...... from 表名;

查询时指定列的别名进行查询
  • ​ 使用关键字as

  • ​ 使用别名的好处:显示的时候可以指定新的名字,并不修改表的原有结构。

  • 对指定列进行别名操作:select 列名1 as 新名字,列名2 as 新名字, ...... from 表名 as 新表名;

    如:对学生表进行操作:查询学生表的姓名和年龄

    select 
    	s.age as 年龄,
    	s.name as 姓名
    from 
    	student as s;
    -- as关键字可以省略不写。
    
去除重复查询

​ 使用关键字 distinct 去掉重复的记录

​ 语法格式:select distinct 字段名 from 表名;

​ 例如:查询本班同学都来自那个地方

select distinct address from student;
查询的结果值可以参与数学运算

查询出来的列和其他列可以进行数学运算

语法:select 列名1+、-、*、/ 列名2,..... from 表名;

注意:能够参与数学运算的前提是列的数据类型是数值型,整数和小数

例如:查询学生的成绩

select s.english+s.mathematics as 综合成绩 from sudent as s;
查询条件

查询的时候,有时候只想获取符合条件的结果值,不是获取表中的所有记录

语法:select 字段列表 from 表名 where 条件表达式;

结果值:符合条件的记录就会被返回,条件不符合就不返回(过滤掉)

比较运算符:
>、<、>=、<=、!=(不等于)、=、<>(不等于),没有"=="在sql当中,不等于有两种表示方式:!=、<>
between…and表示的是一个区间范围 如:between A and B :[A,B]
in(具体的取值)in里面放的是一个个数值,如果有多个,中间用逗号隔开
like模糊查询,根据关键字查询,一般搭配"%"
is null查询某一列为null的值,注意在sql中 不能这样表达: 字段名=null
is not null查询某列不为null的值

​ 操作:

-- 比较运算符的操作
select * from sudent as s where s.math > 60;
-- between and
-- 查询数学成绩在70-100 之间的
select * from sudent as s where s.math between 70 and 100;
-- in
-- 查询英语在80和100 的同学
select * from sudent as s where s.english in(80,100);
-- 模糊查询
-- 查询地址中含有阳的同学
select * from sudent as s where s.address like '%阳%';
-- 查询本班同学中含有刘的同学
select * from sudent as s where s.username like '%刘%';
-- 查询生日不为空的同学
select * from sudent as s where s.birthday is not null;

备注:在进行模糊查询时,通配符有两种表示方式:% _

%匹配任意多个字符

_匹配单个字符

两者都需要注意书写的位置:

一般我们使用%作为模糊查询的通配符

逻辑运算符 与、或、非

与:&& —> and

或:|| —> or

非:!

在sql中建议使用单词来表示逻辑运算**“and or”**

操作:

-- or
select * from student as s where s.english = 85 or s.english = 100;
-- 查询本班同学全部成绩在70分以上的 and
select * from student as s where s.math > 70 and s.english > 70;
-- 取非
select * from student as s where !(s.math > 70 and s.english > 70);
排序
单列排序

通过order by 语句类实现排序,只是将查询出来的结果值进行排序,并不影响查询的结果,不进行条件过滤,影响的是显示的方式(从大到小还是从小到大)

​ 升序:asc 默认就是升序

​ 降序:desc

单列排序:根据表中的某个字段,某列进行排序

语法:select 字段列表 from 表名 where 条件 order by 字段名 asc/desc;

如:对查询出来的同学的英语成绩进行降序排序

select * from student as s order by s.english desc;
组合排序

同时对表中的多个字段进行排序,如果前面的字段值相同,再根据后面的字段再次排序

语法:select 字段列表 from 表名 where 条件 order by 字段1 desc/asc,字段名2 desc/asc;

操作:先根据数学成绩进行升序排序,如果相同,根据英语进行降序排序

select * from student as s order by s.math asc,s.english desc;
聚合函数

常用的聚合函数

  • 求最大值 max

  • 求最小值 min

  • 求平均数 avg

  • 求总和 sum

  • 统计查询结果的记录数 count

使用count统计记录数的是时候,如果count中填写的是表中的某个字段,如果某条记录中字段为null,则该记录会被过滤掉。

ifnull(表达式1,表达式2),如果前面的字段为null后面的表达式2可以替换掉前面的字段为null的值。这是就可以统计带null的值。

分组查询 group by
select 
	字段列表
from
	表名列表
where
	分组之前的条件条件
group by
	分组字段
having
	分组之后的条件
limit
	分页限定条件

概念:使用group by 对查询的结果信息进行分组,相同的数据分成一组。

语法:select 字段列表 from 表名 group by 分组字段 having 分组之后的条件;

如:将查询出来的结果值内容,按照性别进行分组,分为2组。每个组的文综和是多少 年龄大于18岁

select 
	s.gender,SUM(s.history+s.geography+s.politics) as 文综和 -- 查询的结果展示出来
from 
	student as s
WHERE
	s.age > 18
group BY
	s.gender;
	
-- 统计成年人男女个多少个 只显示个数小于3的那一组成员
select 
	s.gender,COUNT(s.gender) as 个数
from 
	student as s
where 
	s.age >= 18
group by 
	s.gender;
having
	count(s.gender) < 3;
having和where的区别
  • where语句:将查询结果分组前的符合条件返回数据,不符合条件的过滤掉。先过滤再分组。where后面不能使用聚合函数。
  • having语句:再分组之后过滤数据,即先分组再过滤。having后面可以使用聚合函数。
分页查询 limit

使用关键字limit,它是Mysql中的方言操作

作用:对查询的结果值进行分页展示,一次性显示多少条记录

语法:select 字段列表 from 表名 where 条件 group by 分组字段 having 分组之后条件 order by 升降序 limit 分页条件;

分页限定条件 —> 起始值 展示的记录数 limit offset,length

-- 查询学生表中的数据,从第一条开始,每页显示两条,第一次只能看到前两条
select 
	* 
from 
	student as s
limit 
	0,2;
-- 查询学生表数据从第四条开始 展示3条
SELECT
	* 
from 
	student
limit 
	3,3;
-- 分页 转换非农业查询的起始值和页码数,每页展示的个数确定的
-- 如果查询的记录值是从第一条开始的,这个0可以省略不写
select 
	*
from 
	student 
limit 
	5;
-- 如果查询的是最后几条,有几条显示几条,不会报分页错误
-- 查询从第三条开始,查询5条
select 
	*
from 
	student 
limit 
	2,5;

备注:如果查询从第一条开始,起始值可以省略,如果查询最后几条,有几条显示几条,不会报分页错误

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值