JAVA12_01学习总结(MySQL,约束)

news2024/11/23 21:05:03

今日内容

1. MySql基本查询

--ifnull(字段名称,预期值)
    -如果两个int类型数据求和,其中一个为null,那么结果就是null,使用ifnull来解决
-- 需求--查询姓名和成绩和
-- 创建表
CREATE TABLE test(
    id INT , -- 编号
    NAME VARCHAR(20) , -- 姓名
    age INT , -- 年龄
    math INT , -- 数学成绩
    english INT  -- 英语成绩
)
-- 输入数据
INSERT INTO 
    test 
VALUES 
    (1,'钟离',500,80,NULL) ,
    (2,'胡桃',18,90,100) ;
-- 查询姓名以及数学和英语成绩之和
SELECT 
    NAME '姓名', -- 添加说明,AS可省略
    (math+english) '和' 
FROM 
    test;

 

-- 解决方案,使用ifnull
SELECT
    NAME '姓名',
    (math+IFNULL(english,0)) '和'
FROM
    test;

 

查询年龄是500或者年龄是18的所有信息
    --where条件可以使用
        or 或者
        java语言||
        in(值1,值2.....)
-- where条件可以使用 -or 或者 -java语言|| -in(值1,值2.....)
-- or
SELECT
    *
FROM
    test
WHERE
    age=500 OR age=18 ;
-- ||
SELECT
    *
FROM
    test
WHERE
    age=500 || age=18 ;
-- in
SELECT
    *
FROM
    test
WHERE
    age IN(500,18) ;

 

查询某个字段为null的信息
    ---->is null
查询字段不为null的信息
    ---->is not null
-- 需求:查询英语成绩是null的所有信息
SELECT
    *
FROM
    test
WHERE
    english IS NULL ;

 

查询某个字段不等于某个值 
    ---使用!=
    ---mysql的 <>  
-- 需求:查询年龄不是500岁的所有信息
SELECT
    *
FROM
    test
WHERE
    age != 500 ;
SELECT
    *
FROM
    test
WHERE
    age <> 500 ;

 

2. DQL

2.1 DQL之模糊查询

模糊条件查询
    关键字--like
    语法
        select 字段列表 from 表名 where 字段名称 like '%XX%' --xx是查询条件
            %代表任意多个字符--开发中经常使用
            _代表任意一个字符
            'XX%' 或者 '%XX' 都是可以的
-- 需求:查询表中所有名字里带桃的人的信息
SELECT
    *
FROM
    test
WHERE
    NAME LIKE '%桃%' ;

 

-- 查询学生的姓名是两个字符的人的信息
SELECT
    *
FROM
    test
WHERE
    NAME LIKE '__' ; --两个下划线

 

2.2 DQL之聚合查询

DQL之聚合查询 
    ---结果是单行单例的
        COUNT(字段名称) ---使用最多  统计表的记录
            count里面 字段名称:一般是非业务字段
                --如果字段某个值是null,不会统计
    
        max(列名称):求最大值
        min(列名称):求最小值   
        avg(列名称):求当前列的平均值
        sum(列名称):求当前这列的总和
    聚合函数---完成sql语句嵌套 (单表操作/多表都可以)
    SELECT 
        * 
    FROM
        test 
    WHERE 
    math > 
        (SELECT 
            AVG(math) 
        FROM
            test) ;

2.3 DQL之排序查询

DQL语句之排序查询 
    order by
        单独使用order by
            --select 字段列表 from 表名  order by  字段名称 排序规则;
                排序规则
                    默认asc--升序排序
                       desc--降序
                如果有条件where和order by同时存在
                    --先满足where条件,再排序!
SELECT
    *
FROM
    test
WHERE
    math>70
ORDER BY
    math ASC ,
    age DESC ;

 

2.4 DQL之分组查询

DQL语句之分组查询
    group by
        注意
            1)分组查询里面可以select 查询分组字段 
            2)分组group by后面不能使用聚合函数
        单独使用
            --select 字段列表 from 表名 group by 分组字段名称;
        如果分组查询带where条件
            --where条件和group by同时存在,where条件在group by的前面
            --group by的后面不能使用where,先满足where条件,才参与分组!

2.5 筛选

筛选having
    注意
        having的后面可以跟聚合函数
        having在group by后面 
        where是gruop by的前面

2.6 分页查询

分页查询limit
    语法
        select 字段列表 from 表名 limit 起始行数,每页显示的条数;
            起始行数= (当前页码数-1)*每页显示的条数;
    如果复合查询
        有where条件,还有limit,where在limit前面

3. 约束

约束
    约束用户操作数据库的非法行为

3.1 默认约束

-- 默认约束default
-- 没有插入字段的值默认值null,为了防止这种数据出现,可以在创建表的时候加入默认约束default,当没有插入这个字段,默认约束起作用!
CREATE TABLE testdefault(
    id INT ,
    NAME VARCHAR(20) ,
    sex VARCHAR(3) DEFAULT '女'  -- 性别不填写的话默认女
) ;
INSERT INTO testdefault (id , NAME) VALUES (1 , '钟离') ;
SELECT * FROM testdefault ;

 

3.2 非空约束

-- 非空约束 not null
-- 当前这个值不能为null,不能直接添加数据给一个null
CREATE TABLE testnotnull(
    id INT NOT NULL , -- 序号不能是空,写入值的时候必须赋值
    NAME VARCHAR(20) ,
    sex VARCHAR(3)
);
-- INSERT INTO testnotnull (NAME,sex) VALUES ('钟离','男') ;
-- Field 'id' doesn't have a default value
INSERT INTO testnotnull VALUES (1,'钟离','男') ;
SELECT * FROM testnotnull ;

 

3.3 唯一约束

-- 唯一约束 unique (当前这个值不能重复)
-- 限制id字段/有效身份信息(邮箱/手机号/身份证...)
CREATE TABLE testunique(
    id INT ,
    NAME VARCHAR(20) ,
    number INT UNIQUE -- 这个值输入时不能有重复!
);
-- insert into testunique values (1,'钟离',100773429),(2,'离',100773429) ;
-- Duplicate entry '100773429' for key 'number'
INSERT INTO testunique VALUES (1,'钟离',100773429),(2,'离',100773430) ;
SELECT * FROM testunique ;

 

3.4 主键约束

-- 主键约束primary key 
-- 特点非空且唯一
CREATE TABLE testprimarykey(
    id INT PRIMARY KEY , -- 主键,非空且唯一
    NAME VARCHAR(20) ,
    age INT
);
INSERT INTO testprimarykey VALUES (1,'钟离',15) ;
-- INSERT INTO testprimarykey VALUES (1,'钟',15) ;
-- Duplicate entry '1' for key 'PRIMARY'
-- INSERT INTO testprimarykey VALUES (null,'钟离',15) ;
-- Column 'id' cannot be null

 

3.5 自增长约束

-- 自增长约束 auto_increment
-- 一般自增长约束都是在主键字段上,保证唯一
-- 指定插入数据的值,下次在之前的值上继续自增1
CREATE TABLE testauto_increment(
    id INT PRIMARY KEY AUTO_INCREMENT , -- 一般主键和自增连用
    NAME VARCHAR(20) 
);
INSERT INTO testauto_increment (NAME) VALUES ('钟离');
INSERT INTO testauto_increment (NAME) VALUES ('钟离');
INSERT INTO testauto_increment (NAME) VALUES ('胡桃');
SELECT * FROM testauto_increment ;
​
-- mysql自带函数---查找数据库表中最后一次自增主键的值是多少
SELECT LAST_INSERT_ID();

 

3.6 外键约束

-- foreign key
/*问题:
        1)查询员工的所有信息---部门名称字段 冗余度大(重复度高)
        2)一张表描述了两个事情(员工信息,又有部门信息!)
        
        解决方案
            将这张表拆分两张表
            一张表员工信息
            一张表描述部门信息
*/
-- 创建一张部门表
CREATE TABLE dept(
    id INT PRIMARY KEY AUTO_INCREMENT, -- 部门编号
    NAME VARCHAR(10) -- 部门名称
);
INSERT INTO dept(NAME) VALUES('往生堂'),('屋漏茶室'),('烟花店');
-- 创建一个员工表
CREATE TABLE employee(
    id INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号
    NAME VARCHAR(10) , -- 员工姓名
    gender VARCHAR(3) , -- 性别
    dept_id INT -- 部门编号
);
INSERT INTO employee(NAME,gender,dept_id)
VALUES
('钟离','男',1),
('胡桃','女',1),
('夜阑','女',2),
('申鹤','女',2),
('宵宫','女',3) ;
-- 插入了一个条数据:没有4号部门,但是依然能插入进去!
-- 防止出现问题,添加外键约束---让两个产生关联关系
-- 创建员工表的时候,同时添加外键约束!
/*
    外键作用的表---从表
    另一张表---主表
    创建表的时候添加外键
        constraint (声明)
                外键名
        foriegn key 
                (从表的字段名称)
        references -- (关联)
                主表名(主键字段的名称)
*/
CREATE TABLE employee(
    id INT PRIMARY KEY AUTO_INCREMENT, -- 编号
    NAME VARCHAR(10),  -- 姓名
    gender VARCHAR(3), -- 性别
    dept_id INT ,-- 部门编号
    CONSTRAINT -- 声明
            dept_emp_fk -- 外键名称
    FOREIGN KEY
            (dept_id) -- 作用在指定外键字段上
    REFERENCES -- 关联
            dept(id) -- 主表的主键字段
    
);
-- 有了外键之后,直接修改或者删除主表数据,前提需要让从表的数据跟主表没有关联
-- 这个时候才能修改和删除主表数据!
​
-- 所以我们引出了!!!
​
-- 级联操作cascade
-- 级联删除/级联修改 on delete cascade /on update casade
-- 当修改/删除主表的数据,从表数据随之改动 
​
​
-- 将上面这个语句放在外键的后面
-- 添加外键的同时---添加级联修改和级联删除
ALTER TABLE employee 
ADD CONSTRAINT dept_emp_fk 
FOREIGN KEY (dept_id) 
REFERENCES dept(id) 
ON UPDATE CASCADE 
ON DELETE CASCADE ;
​
-- 直接修改主表数据,
-- 将1号部门改成2号部门,这个时候1号部门的员工,它部门编号变成2
UPDATE dept SET id = 2 WHERE id =1 ;
-- 直接删除主表数据,从表随之变化
-- 将3号部门解散
DELETE FROM dept WHERE id = 3 ;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

html转pdf(总结五种方法Java)

html转pdf&#xff08;总结五种方法Java&#xff09; Java 实现html转pdf&#xff0c;总结五种方法。 推荐使用wkhtmltopdf,Itext 方法一&#xff1a;使用wkhtmltopdf 1、下载插件wkhtmltopdf https://wkhtmltopdf.org/downloads.html 2、本机测试 本目录下cmd进入 输入命…

解读数仓中的数据对象及相关关系

摘要&#xff1a;为实现不同的功能&#xff0c;GaussDB&#xff08;DWS&#xff09;提供了不同的数据对象类型&#xff0c;包括索引、行存表、列存表及其辅助表等。这些数据对象在特定的条件下实现不同的功能&#xff0c;为数据库的快速高效提供了保证&#xff0c;本文对部分数…

深聊性能测试,从入门到放弃之: Windows系统性能监控(一) 性能监视器介绍及使用。

性能监视器介绍及使用1、引言2、性能监视器2.1 打开方式2.2 基本介绍2.3 计数器介绍2.3.1 处理器性能计数器2.3.2 内存性能计数器2.3.3 网络性能计数器2.4 创建及使用2.4.1 用户自定义创建2.4.2 直接添加计数器3、总结1、引言 小屌丝&#xff1a;鱼哥&#xff0c;你有没有监控…

G1D28-hinge loss fuction-RAGA pre总结-DeBERTa-杂七杂八visiomathtypeexcel

一、hinge loss和交叉熵对比 (一 )hinge loss主要思想 让正确分类和错误分类的距离达到λ。λ用于控制两种分类样本之间的距离。 &#xff08;二&#xff09;对比学习 自监督学习的一种&#xff0c;不依赖标注数据进行学习。蛮有意思的&#xff0c;但是今天没时间了&#x…

逻辑学三大定律是什么?

逻辑思维三大定律: 同一律&#xff0c;矛盾律&#xff0c; 排中律。 同一律&#xff1a;A 是 A。 前后思维中&#xff0c;概念要同一。白马非马论违反同一律。商家的买一赠一&#xff0c;前后两个一不是同一个概念。违反同一律。矛盾律&#xff1a;A 是 B&#xff0c; A 不是B,…

【Android App】发送BLE广播及通过主从BLE实现聊天应用讲解及实战(附源码和演示 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、发送BLE广播 调用蓝牙适配器的getBluetoothLeAdvertiser方法&#xff0c;获得BluetoothLeAdvertiser广播器对象。 广播器的主要方法说明如下&#xff1a; startAdvertising方法表示开始发送BLE广播&#xff0c; stopAdvertis…

springBoot开源MES生产制造执行系统源码带文字搭建教程

源码分享&#xff01;需要源码学习参考可私信。 技术框架&#xff1a;springBoot mybatis-plus shiro hutool layui swagger freemarker mysql8 echarts 运行环境&#xff1a;IntelliJ IDEA 2022 maven nginx 宝塔面板 系统功能 用户管理&#xff1a;用户是系统操…

用VS开发一款“飞机大战“单机游戏<C++>

显示界面如上图所示 自己找的背景和飞机素材,先将素材奉上. 接下来我先简单分析一下这个单机游戏的运行逻辑: 就像显示界面所显示的那样,我们想要实现的是自己的飞机在发射子弹(子弹在上图没显示),然后当子弹射到敌方飞机,这里设置了两种类型的飞机,如果读者想定义更多类型的…

基于51单片机农业大棚温控系统

资料编号&#xff1a;197 大棚种植温控系统概述&#xff1a; 本文介绍的是一个由单片机构成的温度控制系统&#xff0c;主要用来提供测温的解决方案&#xff0c;同时还能实时监控温度变化趋势&#xff0c;以及报警功能。它利用STC89C52RC单片机&#xff0c;DS18B20&#xff0c…

概率图模型:HMM(隐马),MEMM(最大熵),CRF(条件随机场)

1.概率图模型&#xff1a;HMM&#xff08;隐马&#xff09;,MEMM&#xff08;最大熵&#xff09;,CRF&#xff08;条件随机场&#xff09;概率&#xff1a;既然是一个图那么就是一个有圈有边的结构&#xff0c;圈代表随机向量&#xff0c;随机变量之间有边&#xff0c;边上有概…

数字验证学习笔记——UVM学习2 覆盖方法

一、覆盖方法 覆盖机制可以将原来所属的类型替换为另外一个新的类型。 在覆盖之后&#xff0c;原本用来创建原属类型的请求&#xff0c;将由工厂来创建新的替换类型。 无需再修改原始代码&#xff0c;继而保证了原有代码的封装性。新的替换类型必须与被替换类型兼容&#xff…

OpenStack 学习之 OVN : L2网络 ( Logical switches 逻辑交换机)

OVN Manual install & Configuration Open vSwitch 官网 参考 OVN学习&#xff08;一&#xff09; OVN实战一之GNS3操作指南及OVN入门 简单理解和知识 按照 OVN Manual install & Configuration 分别叫做 Controller 节点和 Compute 节点 &#xff0c;其他一般叫做…

Android Studio 打一个正式签名的Apk

如何打一个带正式签名文件的app (给自己的劳动成果冠名) 1. 选择build -> generate signed bundle/apk 2. 这里有两个选择, bundle or apk, 我们选择apk 于是勾选 apk, 并点下一步 3. 来到选择证书文件的地方, 但是我们这是第一次做, 还没有证书文件, 所以选择新建一个证…

【Docker学习系列】Docker学习2-docker设置阿里云镜像加速器

在上一篇中&#xff0c;我们学会了在centos中安装docer。我们知道&#xff0c;镜像都是外网的&#xff0c;镜像一般都是比较大的&#xff0c;因为种种原因&#xff0c;我们知道&#xff0c;从外网下载比较慢的。所以&#xff0c;本文&#xff0c;凯哥就介绍怎么将docker的镜像拉…

keil5打开keil4工程无法编译的情况解决办法!!!!!!

目录 1.情况 1.keil5使用&#xff08;打开&#xff09;keil4文件工程的时候报错 2.解决办法 如果是kei5打开kei4工程文件出现 步骤1&#xff1a; 步骤2&#xff1a; 步骤3&#xff1a; 1.情况 1.keil5使用&#xff08;打开&#xff09;keil4文件工程的时候报错 --- Erro…

vscode插件开发

作为一个前端开发相信&#xff0c;大家对于vscode非常熟悉。vscode是微软开源的一款基于 Electron 开发的代码编辑器。并且vscode支持通过插件来扩展编辑器的功能&#xff0c;比如Prettier插件帮助我们快速格式化代码&#xff0c;ES7 React/Redux/React-Native snippets插件帮助…

Kotlin高仿微信-第31篇-支付-服务

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

hadoop集群中存在配置较低的数据节点应用如何应对磁盘数据溢满的问题之rebalance

现象 登录hdfs web ui发现集群中一个节点的负载远高于另外的节点 分析 一般情况下集群在数据盘配置一样&#xff0c;几乎使用不到rebalance&#xff0c;但是我们的集群中有一个比较小的数据节点&#xff0c;因此我们需要关注各节点数据分布情况&#xff0c;及时进行rebalan…

手撕一个图片色卡提取器,可自定义提取色卡数量!

在一些特殊的业务场景中&#xff0c;我们需要一次性提取一张图片中的色卡信息&#xff0c;并且需要使用十六进制的颜色表示方法进行展示。 今天得空做了一个小工具&#xff0c;用来自定义的提取某一张图片中的色卡信息&#xff0c;需要提取某张图片中的色卡可以自行选择。 实现…