Java学习(数据库的基本概念,MySQL数据库软件,SQL结构化查询语言,SQL分类(DDL,DML,DQL)

2022/2/24  2/25

一、数据库
1.数据库的基本概念
        1.数据库的英文单词:DataBase 简称 DB
        2.什么是数据库?:用于存储和管理数据的仓库。
        3.数据库的特点:
                1)持久化存储数据的,其实数据库就是一个文件系统
                2)方法存储和管理数据
                3)使用了统一的方式操作数据库  -----SQL

2.MySQL数据库软件
(cmd窗口下)
        1.登录:
                1.mysql -uroot -p密码
                2.mysql -h连接目标的ip -uroot -p连接目标的密码
                3.mysql --host=连接目标的ip --user=root --password=连接目标的密码
        2.退出
                1.exit
                2.quit
数据库:文件夹
表:文件
数据:文件中的数据

3.SQL(结构化查询语言)
        1.什么是SQL:其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式都存
           在不一样的地方,称为“方言”。
        2.SQL的通用语法:
                1)SQL语句可以单行或多行书写,以分号结尾
                2)可使用空格和缩进来增强语句的可读性
                3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
                4)3种注释:单行注释(-- 注释内容 或 # 注释内容),多行注释(/* 注释内容*/)
        3.SQL分类
                1)DDL:数据定义语言:用来定义数据库对象(数据库,表)
                2)DML:数据操作语言:用来对数据库中表的数据进行增删改。
                3)DQL:数据查询语言:用来查询数据库中表的记录。
                4)DCL:数据控制语言:用来定义数据库的访问权限和安全级别,及创建用户。

DDL:操作数据库、表
    1.操作数据库:CRUD
        1.C(Create):创建
                创建数据库:create database 数据库名称;
                创建数据库,判断不存在,再创建:create database if not exists 数据库名称;
                创建数据库,并指定字符集:create databse 数据库名称 character set 字符集名;
                练习:创建db4数据库,判断是否存在,并指定字符集为gbk
                        create database if not exists db4 character set gbk;
        2.R(Retrieve):查询
                查询所有数据库名称:show databases;
                查询某个数据库的字符集:查询某个数据库的创建语句
                        show create database 数据库名称;
        3.U(Updata):修改
                修改数据库的字符集:alter database 数据库名称 character set 字符集名称;
        4.D(Delete):删除
                删除数据库: drop database 数据库名称;
                判断数据库是否存在,存在则删除: drop database if exists 数据库名称;
        5.使用数据库
                查询当前正在使用的数据库名称:select database();
                使用数据库:use 数据库名称;

    2.操作表
        1.C(Create):创建
                1.语法e:
                  1)create table 表名(
                                列名1  数据类型1,
                                列名2  数据类型2,
                                列名3  数据类型3,
                                ............
                                列名n  数据类型n
                                );
                   2)注意:最后一列,不需要加逗号(,)
                   3)数据类型:
                      1.1 int 整数类型 (age int)
                      1.2 double 小数类型(score double(5,2))(这个小数一共有5位,保留2位小数)
                      1.3 date 日期,只包含年月日,yyyy-MM-dd
                      1.4 datetime 日期,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
                      1.5 timestamp 时间戳类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss
注意:若字段为时间戳类型,却不给字段赋值或赋值为null,则默认使用当前系统时间自动赋值.
                      1.6 varchar  字符串(name varchar(20))(姓名最大20个字符)
                                        注意:zhangsan 8个字符   张三 2个字符
               2.创建表(创建表之前,要先查询目前正在使用的表(select database();),如果不是我们需要的那个数据库,则使用我们需要的数据库(use 我们需要的数据库名))
                        create table student(
                                id int,
                                name varchar(32),
                                age int,
                                score double(5,3),
                                birthday date,
                                insert_time timestamp
                         );
               3.复制表:create table 表名 like 被复制的表名;
        2.R(Retrieve):查询
                1)查询某个数据库中所有的表名称:show tables;
                2)查询表结构:desc 表名;
        3.U(Update):修改
                1)修改表名:alter table 表名 rename to 新的表名;
                2)修改表的字符集:alter table 表名 character set 字符集名称;
                        注意:字符集utf-8,在数据库操作中写成utf8
                3)添加一列:alter table 表名 add 列名 数据类型;
                4)修改列名称 类型
                        1.1修改列所有:alter table 表名 change 列名 新列名 新数据类型;
                        1.2修改列数据类型:alter table 表名 modify 列名 新数据类型;
                5)删除列:alter table 表名 drop 列名;
        4.D(Delete):删除
                1)删除一个表:drop 表名;
                2)判断是否有这个表再删除:drop table if exists 表名;

客户端图形化工具:SQLYog

DML:增删改表中数据
1.添加数据:
        语法:insert into 表名(列名1,列名2,...,列名n)   values(值1,值2,...,值n);
        注意:1.列名和值要一一对应
                   2.如果表名后,不定义列名,则默认给所有列添加值
                        insert into 表名 values(值1,值2,...,值n);
                   3.除了数字类型,其他类型需要使用引号(单双都可以)引起来

​
USE db1;
INSERT INTO student(id,namee,sorce) VALUES(1,'卢楠',90);
DESC student;
SELECT * FROM student;
ALTER TABLE student MODIFY sorce INT;
ALTER TABLE student MODIFY namee VARCHAR(32);
ALTER TABLE student CHANGE name1 namee VARCHAR(20);
INSERT INTO student VALUES(2,"易烊千玺",22);
ALTER TABLE student ADD sex VARCHAR(20);

2.删除数据
        语法:delete from 表名 [where 条件]
        注意:1.如果不加条件,则删除表中所有记录
                   2.如果要删除所有记录
                         1)delete from 表名;  (不推荐使用,因为会一条条记录删,操作复杂)
                         2)truncate table 表名;(推荐使用,它是先删除表,再创建一张一样的空                                 表,效率更高)   

DELETE FROM student WHERE id=1;
DELETE FROM student;
TRUNCATE TABLE student;


3.修改数据
        语法:update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件];
        注意:如果不加任何条件,则会将表中所有记录全部修改。

UPDATE student SET sex="女" WHERE id=1;
UPDATE student SET sorce=100;

DQL:查询语句
查询表中的记录
 1.select * from 表名;
1.语法:
        select            字段列表
        from              表名列表
        where            条件列表
        group by        分组字段
        having            分组之后的条件
        order by         排序
        limit                分页限定
2.基础查询
        1.多个字段的查询
                select 字段名1,字段名2...from 表名;
                注意:如果查询所有字段,则可以使用*来替代字段列表。
        2.去除重复:distinct
        3.计算列
                1.一般可以使用四则运算计算一些列的值(一般只会进行数值型计算)
                2.ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
                        表达式1:哪个字段需要判断是否为null
                        表达式2:如果该字段为null后的替换值
        4.起别名:as:as也可以省略

-- 查询
-- 查询姓名和成绩
SELECT namee,sorce FROM student;
-- 查询性别
SELECT sex FROM student;

-- 去除重复结果
-- 去除姓名为重复的只保留一条
SELECT DISTINCT namee FROM student;
-- 去除姓名和成绩都一样的重复的只保留一条
SELECT DISTINCT namee,sorce FROM student;

-- 计算
-- 计算两倍的成绩
SELECT sorce,sorce+sorce FROM student;
-- 如果有null参与的运算,计算结果都为null
-- 可以用ifnull替换null值
SELECT sorce,IFNULL(sorce,0)+IFNULL(sorce,0) FROM student; 

-- 起别名
-- 加as
SELECT namee AS 姓名,sorce AS 成绩 FROM student;
-- 不加as
SELECT sorce 成绩,IFNULL(sorce,0)+IFNULL(sorce,0) 双成绩 FROM student; 

3.条件查询
        1.where子句后跟条件
        2.运算符
                1)> , < , >= , <= , = , <>
                2)BETWEEN   A    AND  B:数据在A和B之间
                3)IN(集合):数据在这个集合中
                4)LIKE:模糊查询
                        占位符:_(单个字符),%(0到多个字符)
                5)IS NULL (为空)IS NOT NULL (不为空)
                6)and 或  &&
                7)or 或  ||
                8)not  或 !

-- 查询年龄大于20岁
SELECT * FROM student WHERE age > 20 ;
SELECT * FROM student WHERE age >= 20 ;

-- 查询年龄等于20岁
SELECT * FROM student WHERE age = 20;

-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;

-- 查询年龄大于等于20岁 小于等于30
SELECT * FROM student WHERE age >+ 20 && age <= 30;
SELECT * FROM student WHERE age >+ 20 AND age <= 30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;

-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25;
SELECT * FROM student WHERE age IN(22,18,25);

-- 查询性别为null的信息
SELECT * FROM student WHERE sex = NULL;-- 这是不对的,null值不能使用=(!=)判断
SELECT * FROM student WHERE sex IS NULL;

-- 查询性别不为null的信息
SELECT * FROM student WHERE sex IS NOT NULL;

-- 查询姓王的人
SELECT * FROM student WHERE namee LIKE "王%";

-- 查询姓名第二字是楠的人
SELECT * FROM student WHERE namee LIKE "_楠%";

-- 查询姓名是三个字的人
SELECT * FROM student WHERE namee LIKE "___";

-- 查询姓名中包含尔的人
SELECT * FROM student WHERE namee LIKE "%尔%";

DQL:查询语句
1.排序查询
        语法:order by 子句
                order by 排序字段1 排序方法1,排序字段2 排序方法2...
        排序方式:
                ASC(升序,默认的),DESC(降序)
        注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

-- 按照降序给id号排序
SELECT * FROM student ORDER BY id DESC;

-- 按照成绩排名,如果成绩一样,则按照年龄排名
SELECT * FROM student ORDER BY sorce ASC,age DESC;

2.聚合函数:将一列数据作为一个整体,进行纵向的计算。
        1)count:计算个数
                1.1一般选择非空的列:主键
                1.2 count(*)
        2)max:计算最大值
        3)min:计算最小值
        4)sum:计算和
        5)avg:计算平均值
        注意:聚合函数的计算,排除null值。
                解决方法:1.选择不包含非空的列进行计算
                                  2.IFNULL函数

-- 计算id列有几个id
SELECT COUNT(IFNULL(id,0)) FROM student;

-- 计算age列有几个(由于age的其他列都为空,所以count最好用主键
SELECT COUNT(age) FROM student;

-- 计算所有
SELECT COUNT(*) FROM student;

-- 计算sorce最大值
SELECT MAX(IFNULL(sorce,0)) FROM student;

-- 计算sorce最小值
SELECT MIN(IFNULL(sorce,0)) FROM student;

-- 计算sorce和
SELECT SUM(IFNULL(sorce,0)) FROM student;

-- 计算sorce平均值
SELECT AVG(IFNULL(sorce,0)) FROM student;

3.分组查询
        1. 语法:group by 分组字段;
        2. 注意:
                1.1 分组之后查询的字段:分组字段,聚合函数
                1.2 where 和 having 的区别?
                        1)where在分组之前进行限定,如果不满足条件,则不参与分组。
                              having在分组之后进行限定,如果不满足结果,则不会被查询出来。
                        2)where后不可以跟聚合函数,having可以进行聚合函数的判断。

-- 按照性别分组,分别查询男女同学的平均分
SELECT sex,AVG(sorce) FROM student GROUP BY sex;

-- 按照性别分组,分别查询男女同学的平均分,人数
SELECT sex,AVG(sorce),COUNT(id) FROM student GROUP BY sex;

-- 按照性别分组,分别查询男女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex,AVG(sorce),COUNT(id) FROM student WHERE sorce > 70 GROUP BY sex;

-- 按照性别分组,分别查询男女同学的平均分,人数 要求:分数低于70分的人,不参与分组,,人数要大于2个人
SELECT sex,AVG(sorce),COUNT(id) FROM student WHERE sorce > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex,AVG(sorce),COUNT(id) 人数 FROM student WHERE sorce > 70 GROUP BY sex HAVING 人数 > 2;

4.分页查询
        1.语法:limit开始的索引,每页查询的条数;
        2.公式:开始的索引 = (当前的页码 -1)* 每页显示的条数
        3.分页操作时一个”方言“

-- 每页显示2条记录
SELECT * FROM student LIMIT 0,2;-- 从第0条开始,每页两条记录  (第一页)
SELECT * FROM student LIMIT 2,2;-- (第二页)
-- select * from student limit (3-1)*2,2; (第三页)
SELECT * FROM student LIMIT 4,2;
-- 公式:开始的索引 = (当前的页码 -1)* 每页显示的条数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值