当前位置: 首页 > java >正文

6.5 自学测试 数据库基础 Day5

一、数据库简介

(一)数据库存储阶段发展

1.人工管理阶段:不方便管理和查询

2.文件系统阶段:查询不是很方便

3.数据库阶段:有组织的数据集合,方便维护和管理查询

数据库:是指长期存储在计算机内、有组织的数据集合。简而言之,数据库就是一个存储数据的地方

(二)数据库分类

1.关系型数据库 RDMS:将数据间的关系以数据库表的形式加以表达,并将数据存储在表格中,以便于查询

常用的关系型:Oracle、MySQL、Microsoft、SQLite

2.非关系型数据库 NoSQL

常用的非关系型:Redis、Mongodb、Hbase

(三)关系型数据库核心要素

1.数据行:一条记录

2.数据列:字段

3.数据表:数据行的集合

4.数据库:数据表的集合、一个数据库中能够有n多个数据表

先有库、再有表、再有内容

(四)SQL介绍

SQL:Structured  Query  Language(结构化查询语言),通过SQL语言可以对数据库进行操作。

SQL语言分类:

DQL:数据查询语言,用于对数据进行查询,例如:select

DML:数据操作语言,对数据进行增加、修改、删除,例如:insert、update、delete

注意:主流的关系型数据库都支持SQL语言,在MySql中SQL语言不区分大小写

二、MySql简介

(一)MySQL特点

(二)常用的数据类型

(三)数据约束

数据约束主要是指对数据库中数据进行限制,以确保数据的正确性、有效性、一致性。

常见数据约束有:

  • 主键(primary key):物理上存储的顺序
  • 非空(not null):此字段不允许填写空值
  • 唯一(unique):此字段的值不允许重复
  • 默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准
  • 外键(foreign key):维护两个表之间的关联关系

三、命令操作数据库和表

(一)操作数据库

说明:操作数据库之前要选通过工具连接到数据库。

常见数据库操作命令:

  • 查看所有数据库:show    databases;
  • 使用数据库:use  数据库名;
  • 查看当前使用数据库:select   database();
  • 创建数据库:create  data   base  数据库名  charset=utf8;
  • 删除数据库:drop   database   数据库名;

(二)操作数据表

说明:操作数据表之前要选通过use打开对应的数据库。

常见数据表操作命令:

  • 查看当前数据库所有的表:show  tables;
  • 查看表结构:desc  表名;
  • 查看表的创建语句:show  create table 表名;

四、SQL语言

(一)数据库表操作

1.创建数据库表

create table 表名 (字段名1 类型 约束,字段名2 类型 约束,……….….)

例如:create table  students (name  varchar  (10),age   int  unsigned )

2.删除数据库表

drop   table   表名

drop   table  if exists 表名

例如:drop   table  students

           drop   table   if   exists    students

(二)数据的增删改查操作

1.简单查询

select * from 表名;

例如:select   *    from    students;

2.添加一行数据

insert  into  表名  values(  )

insert  into  students  values ( 0,‘mike’,22,177.34)

insert  into 表名(字段1,字段2) value (值1,值2)

insert  into  students (name)  values  ('坤坤')

3.添加多行数据

方法一:写多条insert 语句,多条用英文分号分隔

方法二:通过一条insert 语句插入多条数据,数据间用英文逗号分隔

insert  into  表名  values  (...) , (...)  ...

insert  into  students  values  (0 ,'亚瑟3 ',23 ,167.56) , (0 ,'亚瑟4' ,23 ,167.56)

4.修改数据

update  表名 set  字段名1 = 值1,字段名2 = 值2 where 条件

例如: update  students  set   name='狄仁杰'  ,age=20  where  id=5 

5.删除数据 

delete  from 表名  where  条件 

例如 :delect  from  students  where id = 6

Truncate  删除数据:  truncate   table  表名

Drop   删除表:drop   table   表名

(三)数据查询操作

1.条件查询

select  字段1,字段2...  from  表名   where   条件;

例如:   select   *  from   students   where   id=1;

2.模糊查询

关键词:like

%:匹配任意多个字符

_:匹配一个任意字符

例1:查询姓孙的学生  select  *  from   students  where   name  like' 孙%'

例2:查询姓孙且名字是一个字的学生  select * from  students  where  name  like '孙_'

3.范围查询

in 表示在一个非连续的范围内

select  *  from  students  where  hometown  in('北京','上海','广东')

between...and...表示在一个连续的范围内例

select  *  from  students  where  age between 18  and  20

4.排序

select  *  from   表名   order   by   字段名1  asc|desc,字段名2   asc|desc

asc:升序(默认)

desc:降序

5.聚合函数

6.分组查询

select  字段1,字段2, 聚合函数...  from   表名   groupby  字段1,字段2...

查询各种性别的人数    select   sex,count(*)   from   students   group   by  sex

7.分组后的筛选

select   字段1,字段2, 聚合...  from  表名   group   by  字段1,字段2,字段3...  having   条件

select  sex,count(*)  from   students   group   by  sex   having   sex='男'

8.having与where对比

  • where是对from后面指定的表进行数据筛选,属于对原始数据的筛选。
  • having是对groupby的结果进行筛选。
  • having后面的条件中可以用聚合函数,where后面不可以。

9.获取部分数据

select  *  from  表名  limit  start , count

例如: 查询前3行学生信息   select  *  from   students   limit 0, 3

10.连接查询——内连接

方法一:select  *   from   表1   inner   join   表2    on   表1.列 = 表2.列

方法二:select  *   from  表1,表2   where   表1.列  =  表2.列

查询学生信息及学生的成绩

方法一:select *  from  students stu inner  join  scores sc  on  stu.studentNo  =  sc.studentNo

方法二:select *  from  students stu, scores sc where  stu.studentNo  =  sc.studentNo

11.连接查询——左连接(左表特有的数据,右边不存在为null)

select   *   from   表1   left   join   表2   on   表1.列=表2.列

12.连接查询——左连接(右边特有数据,左边不存在为null)

select   *   from   表1   right   join   表2   on   表1.列=表2.列

13.自关联

inner  join 关联同一个表,不同的字段,自关联要用别名

查询河南省所有的市

Select  *   from   areas   as   a1  inner  join   areas    as   a2   on   a1.aid  =  a2.pid   where   a1.atitle  ='河南省'; 

http://www.xdnf.cn/news/12719.html

相关文章:

  • 利用frp和腾讯云服务器将内网暴露至外网(内网穿透)
  • 【MATLAB代码】基于MCC(最大相关熵)的EKF,一维滤波,用于解决观测噪声的异常|附完整代码,订阅专栏后可直接查看
  • 模拟法解题的思路与算法分享
  • [GitHub] 优秀开源项目
  • python训练营打卡第47天
  • 27、基于map实现的简易kv数据库
  • AIGC的产品设计演进:从工具到协作者
  • 黑马Sting四道练习题
  • 《Progressive Transformers for End-to-End Sign Language Production》复现报告
  • windows使用脚本杀死python进程
  • STM32学习之I2C(理论篇)
  • Addressable-配置相关
  • 操作系统:分页存储管理方式(精简版、含例题)
  • 源码级拆解:如何搭建高并发「数字药店+医保购药」一体化平台?
  • 6.7 打卡
  • AtCoder Beginner Contest 408 D-F 题解
  • JDK8安装与配置
  • 探索Python融合地学:斗之气七段(运算符)
  • 冰箱智能化升级方案:WT3000A离在线AI语音模组赋能AI在线对话功能
  • Cline核心说明文档
  • 基于Java的离散数学题库系统设计与实现:附完整源码与论文
  • mysql整体架构
  • 在 Windows 11 或 10 上将 Visual Studio Code 添加到系统路径
  • C++学习-入门到精通【15】异常处理深入剖析
  • (附实例代码及图示)混合策略实现 doc-doc 对称检索
  • FreeRTOS任务调度过程vTaskStartScheduler()任务设计和划分
  • redis分布式锁
  • Python训练营打卡DAY47
  • 4G物联网模块提升智慧农业的自动化生产效率
  • 【CSS-5】深入理解CSS复合选择器:提升样式表的精确性与效率