B027-MySQL增强

目录

      • 多表查询
        • 为什么要用多表查询?
        • 笛卡尔积和内连接消除笛卡尔积
        • 外键
        • 数据库内连接练习
        • 左连接查询和右连接查询
        • 等值连接
        • out join
        • 自连接
        • 子查询
      • 数据操作(DML)
        • 数据的插入
        • 数据的删除
        • 数据的修改
      • 数据库的备份与恢复
        • Dos命令行窗口导出
        • Dos命令行窗口导入
        • Navicat导出
        • Navicat导入
      • 函数
      • 查漏补缺
        • 数据库访问控制
        • 视图
        • 三范式

多表查询

为什么要用多表查询?

可以减少单表里面的字段 ,可以很灵活的查询相要的数据。

笛卡尔积和内连接消除笛卡尔积
-- 迪卡尔积就是两张表组合查询时,一张表的一行数据会和另一张表的每一行都组合一下
-- 示例 SELECT * from product,productdir; 
-- 消除迪卡尔积  
-- 内链接SELECT * from product,productdir where product.dir_id =productdir.id  -- 隐式内链接SELECT * from product INNER JOIN productdir ON product.dir_id =productdir.id -- 显示内链接SELECT * from product  JOIN productdir ON product.dir_id =productdir.id -- 显示内链接 写法2
外键

含义:A表中的某一列参考B表中的某一列(id)

外键在程序中的体现:
在这里插入图片描述
CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;
SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;
RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;
NO ACTION:同 RESTRICT,也是首先检查外键;

tips:MyISAM不支持外键,InnoDB才支持外键

数据库内连接练习
  -- 查询货品id,货品名称,货品所属分类名称SELECT product.*,productdir.dirName FROM product  INNER JOIN productdir ON product.dir_id=productdir.id-- 查询零售价大于200的无线鼠标SELECT * FROM product AS p INNER JOIN productdir AS pd  ON p.dir_id=pd.id AND p.salePrice>200 AND pd.dirName='无线鼠标'-- 查询零售价大于200的无线鼠标(使用表的别名)SELECT * FROM product AS p INNER JOIN productdir AS pd  ON p.dir_id=pd.id AND p.salePrice>200 AND pd.dirName='无线鼠标'-- 查询每个货品对应的分类以及对应的库存SELECT p.*, pd.dirName, ps.store_num FROM product p INNER JOIN productdir  pd INNER JOIN product_stock ps ON p.dir_id=pd.id AND p.id=ps.product_id-- 如果库存货品都销售完成,按照利润从高到低查询货品名称,零售价,货品分类(三张表).SELECTp.productName,p.salePrice,pd.dirName,(p.salePrice - p.costPrice) * ps.store_num AS lrFROMproduct pINNER JOIN productdir pdINNER JOIN product_stock ps ON p.dir_id = pd.idAND p.id = ps.product_id ORDER BY lr DESC
左连接查询和右连接查询

在这里插入图片描述
在这里插入图片描述

-- 外链接-- 左连接  LEFT JOINSELECT * FROM employee INNER JOIN department ON employee.deptid=department.id;  -- 内连接SELECT * FROM employee LEFT  JOIN department ON employee.deptid=department.id;  -- 左连接-- 右连接  RIGHT JOIN SELECT * FROM employee right  JOIN department ON employee.deptid=department.id; -- 右链接-- 总结  内连接 左连接 外连接 的区别内连接  多表连表查询时, 只显示他们数据有关联的部分左连接  多表左连接查询时,  按照左表为标准,显示左边所有的数据和右表中与左表有关系的数据右连接  多表右连接查询时,  按照右表为标准,显示右边所有的数据和左表中与右表有关系的数据
等值连接
  -- 等值连接  (A表的外键名 和B表的外键名一致)  USINGSELECT * FROM employee JOIN department ON employee.deptid=department.deptid; -- 原来的写法SELECT * FROM employee JOIN department USING (deptid)
out join

在这里插入图片描述

自连接

业务场景:
在这里插入图片描述

  -- 自连接SELECT p2.*, p.dirName FROM productdir AS p JOIN productdir AS p2 ON  p.id=p2.parent_id ;

在这里插入图片描述

子查询
  -- 查询零售价比罗技MX1100更高的所有商品信息。SELECT * from product  where  salePrice > (SELECT salePrice FROM product WHERE productName='罗技MX1100')-- 单行多列子查询需求: 查询分类编号和折扣与罗技M100相同的所有商品信息。SELECT * FROM productWHERE (dir_id,cutoff)=(SELECT dir_id,cutoff FROM product WHERE productName = '罗技M100')-- 我们真实开发中要避免过多连表查询

数据操作(DML)

数据的插入
-- 增加 INSERT into 表名(列名1,列名2...) values(1,2,.....) -- 写法一INSERT INTO employee(id,name,deptid) VALUES(6,'明锋',3); INSERT INTO employee VALUES(7,'明锋',3); -- 写法二  如果我里面每一个字段都有值表后面可以省略字段 INSERT INTO employee(name,deptid) VALUES('明锋',3);  -- 写法三  如果列满可以省略前面的列名
-- 批量增加 INSERT INTO employee(name,deptid) VALUES('明锋',3),('xxx',4),('xxx2',5); INSERT INTO employee (SELECT * FROM employee)  -- 把当前表的数据查询出来再插入进当前表INSERT INTO employee(name,deptid) (SELECT name,deptid FROM employee)  -- 把当前表的数据查询出来再插入进当前表
数据的删除
-- 删除数据DELETE FROM 表名  WHERE id = ?  -- 删除一条数据DELETE FROM 表名   -- 删除全部数据-- 删除多条数据DELETE from employee WHERE id in(2,3); -- 这种写法DELETE from employee where id BETWEEN 4 AND 9DELETE from employee where id <= 12
数据的修改
   UPDATE 表名 SET 列名=, 列名2=-- 修改全部UPDATE 表名  SET 列名=, 列名2=where id=-- 按id来修改UPDATE employee SET name='小困困',deptid=3 WHERE id=8180UPDATE employee SET name='阮经天',deptid=3-- 指定id批量修改  -- 自己去研究(难)UPDATE employee SET name='小困困',deptid=3 WHERE id in (8180,8181,8182) -- 修改指定的id的内容-- 这里你们要求研究一下   扩展  -- 特难 

数据库的备份与恢复

Dos命令行窗口导出

在dos命令行窗口进行,若操作系统版本高,则使用管理员模式 --> 检索栏输入cmd - 右键以管理员身份运行

mysqldump -u账户 -p密码 数据库名称>脚本文件存储地
mysqldump -uroot -proot test1> D:\data\test.sql
Dos命令行窗口导入

速度最快(用的批量插入),导入前可先清空数据库中的表

mysql -u账户 -p密码 数据库名称< 脚本文件存储地址
mysql -uroot -proot test1< D:\data\test.sql
Navicat导出

Navicat中右键数据库 - 转储sql文件

Navicat导入

拖拽SQL文件到navicat数据库里,速度慢(一行一行插入)

函数

  -- castSELECT CAST('1234.8678' AS SIGNED) --转 整型,不会四舍五入SELECT  CAST(deptid AS SIGNED) AS id,deptName FROM department  -- 把字符串转成整形(deptid在这里的数据库中类型定义为varchar)SELECT CAST('1234.8678' AS decimal)  -- 装decimal,会四舍五入SELECT CAST('1234.8678' AS decimal(6,2))  -- 装decimal  第一个数字:保留数字长度,第二个数字:保留小数长度--  ifnullSELECT id,productName,dir_id,IFNULL(salePrice,0) AS salePrice FROM product	-- 如果salePrice为null,赋值0 ,防止部分不能接受null值得类型收到null报错

查漏补缺

数据库访问控制

在这里插入图片描述

视图

即由sql构成的临时表,用sql来创建视图

SELECT salePrice FROM product WHERE productName='罗技MX1100'
SELECT * from product  where  salePrice > (SELECT * from haha)
三范式

1.列的原子性:列不可分割
数据库表中的所有字段值都应该是不可分解的原子值
在这里插入图片描述
2.主键相关:表中的每列都和主键相关

如订单商品用联合主键做一张表应该换成分开的两张表

3.主键直接相关,不是间接相关:

我的表不应该有别的表的数据,别的表的数据应该通过外键来关联
A表里面的字段不能拥有B表里面的数据,数据不能够重复
如下面右表虽然希望展示deptName信息,但不该有deptName字段数据,应该通过关联查询推导出来。
在这里插入图片描述

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

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

相关文章

if与switch语句的运用—输出成绩

1.给出一个百分制成绩&#xff0c;要求输出成绩等级A、B、C、D、E。90分以上为A&#xff0c;81-89分为B&#xff0c;70-79分为C&#xff0c;60&#xff0d;69分为D&#xff0c;60分以下为E。 if语句实现 #include <stdio.h> int main() { int score; printf(&qu…

基于SSM的图书馆管理系统运行部署教程

基于SSM的图书馆管理系统运行部署教程 1、下载2、数据准备-导入sql文件3、项目导入idea4、项目运行5、测试6、日志乱码问题 1、下载 源码下载地址&#xff1a; https://download.csdn.net/download/weixin_44796239/85072348下载之后&#xff0c;会得到一个压缩包&#xff1a; …

LeetCode-470. 用 Rand7() 实现 Rand10()【数学 拒绝采样 概率与统计 随机化】

LeetCode-470. 用 Rand7 实现 Rand10【数学 拒绝采样 概率与统计 随机化】 题目描述&#xff1a;解题思路一&#xff1a;首先说一个结论就是(rand_X() - 1) Y rand_Y() > [1,X*Y]&#xff0c;即可以等概率的生成[1, X * Y]范围的随机数&#xff0c;其实就像军训的时候报数…

抖店怎么对接达人带货?达人渠道整理,实操详解!

我是电商珠珠 很多人在抖店开通后&#xff0c;按照流程去正常的跑自然流量&#xff0c;再去找达人带货让自己店铺的流量增多&#xff0c;得到相应的曝光。 但是一些新手小白并不知道从哪去找达人&#xff0c;或者说不知道怎么去筛选达人。 一开始所有人都想着去找头部主播&a…

ubuntu启动kafka报错Could not create the Java Virtual Machine.

网上有两种方式&#xff0c;但是需要具体看自己的错误信息&#xff0c;我的错误信息如下: 这里大概是说要写入日志无权限&#xff0c;所以执行的时候&#xff0c;前面加一下sudo 执行成功。

阿里云语雀频繁崩溃,有什么文档管理工具是比较稳定的?

10月23 日14:00左右&#xff0c;蚂蚁集团旗下的在线文档编辑与协同工具语雀发生服务器故障&#xff0c;在线文档和官网都无法打开。直到当天晚上22:24&#xff0c;语雀服务才全部恢复正常。从故障发生到完全恢复正常&#xff0c;语雀整个宕机时间将近 8 小时&#xff0c;如此长…

【SpringCloud篇】Eureka服务的基本配置和操作

文章目录 &#x1f339;简述Eureka&#x1f6f8;搭建Eureka服务⭐操作步骤⭐服务注册⭐服务发现 &#x1f339;简述Eureka Eureka是Netflix开源的一个基于REST的服务治理框架&#xff0c;主要用于实现微服务架构中的服务注册与发现。它由Eureka服务器和Eureka客户端组成&#…

机器学习与 S3 相集成 :释放数据的力量

文章作者&#xff1a;Libai 引言 在当今数据驱动的世界中&#xff0c;企业不断寻求如何高效利用企业自身所产生的数据的解决方案。机器学习已经成为一种提取有价值的见解和做出数据驱动决策的强大工具。然而&#xff0c;机器学习模型的成功在很大程度上依赖于高质量数据的可用…

算能技术资料地址、Demo github地址

技术资料地址&#xff1a; https://developer.sophgo.com/site/index/material/38/all.html Demo github地址&#xff1a;https://github.com/sophgo/sophon-demo

人工智能在警务工作中的运用

AI 能否帮助警察打击犯罪&#xff1f; 执法部门负责维护公共安全&#xff0c;他们必须处理随之而来的所有挑战。幸运的是&#xff0c;警察可以依靠技术来处理很多工作。近几年来&#xff0c;尤其是人工智能技术在全球变成了警务工作中的一个重要部分。 随着基于 AI 的警务技术…

c++搭建http服务器

HTTP请求协议格式如下&#xff1a; HTTP响应协议格式如下&#xff1a; #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <string>#pragma comment(lib, "ws2_32.lib")//std::string generateResponse(const st…

企业级SQL开发:如何审核发布到生产环境的SQL性能

自从上世纪 70 年代数据库开始普及以来&#xff0c;DBA 们就不停地遭遇各种各样的数据库管理难题&#xff0c;其中最为显著的&#xff0c;可能就是日常的开发任务中&#xff0c;研发人员们对于核心库进行变更带来的一系列风险。由于针对数据库的数据变更是一项非常常见的任务&a…

Linux修改时区失败,手动修改localtime无效

有时候改了这个也不行&#xff0c;用命令行修改也不行 解决办法 &#xff1a;cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 或者想改其他时区的直接 ll /usr/share/zoneinfo/ 查看

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接

DTCC2023大会-基于eBPF观测数据库-附所有PPT下载链接 8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。聚好看在大会上首次发布基于eBPF观测数据库性能的产品DBdoctor&#xff0c;受到了业界广泛的关注。近期几位业内同仁过来要大会的PPT&#xff…

python爬虫-某公开数据网站实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;分析页面和请求方式 此网站没有技巧的加密&#xff0c;仅是需要携带cookie和请求…

【AntDB 数据库】国产数据库发展之信创政策的加持

由于我国在信息技术领域起步较晚&#xff0c;国内大量的市场份额被国际IT巨头占据&#xff0c;甚至长期处于被垄断的地位&#xff0c;这也给了某些国家妄图通过挑起科技、贸易摩擦制衡我国发展的机会。为了解决可能存在的安全风险&#xff0c;在重要信息系统、关键基础设施中使…

什么牌子的开放式耳机好?开放式耳机选购指南来了!

在当今音频科技不断演进的时代&#xff0c;开放式耳机作为一种受欢迎的音频设备&#xff0c;吸引着越来越多的消费者&#xff0c;与封闭式耳机相比&#xff0c;开放式耳机在音质表现和舒适度上都具有独特的优势&#xff0c;在众多品牌和型号中选择一款满足个人需求的开放式耳机…

L1-022:奇偶分家

题目描述 给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输出格式&#xff1a; 在一行中先后输出奇数的个数、偶数…

劲松中西医结合医院回应:选择HPV医院标准及注意事项

随着目前我国HPV感染人群不断增多&#xff0c;其健康形势不容乐观&#xff0c;因此选择一家好的HPV医院对于恢复健康至关重要。HPV感染人群在选择HPV医院时&#xff0c;往往需要关注多个方面的因素。以下是一些具体建议&#xff0c;在难以抉择时可作为参考&#xff1a; 一、考…

L1-024:后天

题目描述 如果今天是星期三&#xff0c;后天就是星期五&#xff1b;如果今天是星期六&#xff0c;后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天&#xff0c;请你输出那天的“后天”是星期几。 输入格式&#xff1a; 输入第一行给出一个正整数D&#xff08;1 …