MySql数据库---单表查询,高级查询,外键约束,多表关系,建表原则

思维导图

模糊查询

select * from 表名 where 列名 like '匹配符';
符号: _ 表示一个任意字符
符号: % 表示0或者多个任意字符
# (1)查询商品名称含有"香"字的所有商品信息;
select * from product where pname like '%香%';
# (2)查询商品名称为三个字的商品信息;
select * from product where pname like '___';
# (3)查询商品名称以"斯"结尾,并且是三个字的商品信息;
select * from product where pname like '__斯';
# (4)思考1:查询以"香"开头,且是三个字的商品信息;
select * from product where pname like '香__';
# (5)思考2:查询以"香"开头的所有商品信息。
select * from product where pname like '香%';

非空查询

# 例如,使用非空查询来完成:
# (1)将商品名称为"香奈儿"的分类category_id修改为null;
update product set category_id = null where pname='香奈儿';
# (2)查询分类为空的商品信息;
# select * from product where category_id = null; -- 错误写法
select * from product where category_id is null; -- 正确写法
# (3)查询分类不为空的所有商品信息。
select * from product where category_id is not null; -- 

排序查询

(1)asc从小到大排列,即升序;
(2)desc从排序,即降序;
(3)默认按照列值从小到大进行排序(即asc升序)。
select * from product order by price asc;
select * from product order by price ;-- 如果是升序可以省略asc
# (2)按价格进行降序排序查询所有的商品信息;
select * from product order by price desc;
# (3)按照价格升序排序查询名称中有"想"字的所有商品信息。
select * from product where pname like '%想%' order by price;
# 扩展 : (4) 先按照价格排序,如果价格一样按照id降序
select * from product order by price desc,pid desc;

聚合查询[纵向计算]

-- max,min,avg,sum,count
# 例如,使用命令完成:
# (1)查询商品的总条数;
select count(pid) from product; -- 推荐
select count(1) from product;-- 推荐--但是所有列都为空也算一条记录.
select count(*) from product;-- 不推荐--效率低
select count(category_id) from product;-- 可以为空的列-- 不推荐
# (2)查询商品价格的最大值;
select max(price) from product;
# (3)查询商品价格的最小值;
select min(product.price) from product;
# (4)加入where条件后,查询价格大于200的商品总条数;
select count(pid) from product where price > 200;
# (5)查询分类c001中所有商品的总和;
select count(1) from product where category_id = 'c001';
# (6)查询分类为c002所有商品的平均价格。
select avg(price) from product where category_id = 'c002';

分页查询

(1)limit是分页查询的关键字;
(2)M为整数,表示从第几条索引开始,默认值是0;
(3)N为整数,表示查询多少条数据。
-- todo -----分页查询------------
# 例如,使用命令完成:
# (1)从商品信息中开始处查询5条数据;
select * from  product limit 0,5;
select * from  product limit 5;-- m可以省略,默认是0
# (2)从商品信息中索引值为5开始,共查询10条数据;
select * from product limit 5,10;
# (3)获取当前商品中价格最低的2件商品;
select * from product order by price limit 0,2;
# (4)思考:每页显示5条数据,要显示第3页的所有数据,该怎么做?
-- 计算: m = (3-1)*n = 10  n=5
select * from product limit 10,5;

分组查询

(1)分组字段名:表示按照指定字段的值进行分组;
(2)group by的作用是实现分组,默认可以实现去重操作;
(3)having分组条件是用来过滤分组后的数据。(4) 分组查询的结果只能显示分组字段和聚合函数.
-- todo 分组+聚合函数
# 例如,使用命令完成:
# (1)计算平均年龄值;
select avg(age) from person;
# (2)计算总人物个数;
select count(1) from person;
# (3)请统计出不同性别的人平均年龄值;
select gender,avg(age) from person group by gender;
# (4)请统计出不同性别的人总个数。
select gender,count(1) from person group by gender;

图解分组过程:

分组后过滤

# (3)请统计各个性别下人物的总个数,且只显示总个数大于3的信息。
selectgender,count(1)
from person group by gender having count(1)>3 ;
-----------------------------------------------
selectgender,count(1) ct
from person group by gender having ct > 3 ;-- ct 是别名,方便使用

where 和 having的区别

where: 是对表中的列进行条件过滤的.
having:可以对select后边计算后的列进行过滤的.注意:having不能单独使用.必须搭配group by
总结: where 和 having 不能互换.
建议: 能放在where中过滤的进行放在where中.如果有计算列的值则必须放在having中进行过滤.

外键约束

-- todo 验证 外键关联效果-----一对多表关系------一个分类下有多个商品
create table tb_category(cid int primary key auto_increment,cname varchar(20)
);
​
create table tb_product(id int primary key auto_increment,name varchar(29),price int,cid int,foreign key (cid) references tb_category(cid)
);
​
insert into tb_category values (1,'手机'),(2,'电脑');
insert into tb_product values  (1,'iphone16','5999',1);
insert into tb_product values  (2,'拯救者','9999',2);
​
-- todo 商品表不可以随意添加商品.--必须是符合分类的商品才行
insert into tb_product values  (3,'格力','2999',3); -- 添加失败...
-- todo 分类表不可以随意删除分类.只能删除没有产品的分类.
delete  from tb_category where cid = 1; -- 删除失败

多表建表原则

一对一

1:主键对应
2:在任意一张表中创建一个外键执行另一张表的主键.但是外键要加一个唯一约束.
-- todo 1.主键对应
create table user(id int primary key auto_increment,name varchar(20)
);
create table user_detail(id int primary key auto_increment,addr varchar(29),hobby varchar(20),foreign key(id) references user(id)
);
​
-- todo 2.在任意一张表中创建一个外键执行另一张表的主键.但是外键要加一个唯一约束.
create table user2(id int primary key auto_increment,name varchar(20)
);
create table user_detail2(id int primary key auto_increment,addr varchar(29),hobby varchar(20),uid int unique ,-- 必须唯一foreign key (uid) references user(id)
);

一对多

在多的一方建立外键列,指向1的一方的主键列
-- 场景: 一个分类下有多个商品.
create table tb_category( -- 分类表 --- 一 cid int primary key auto_increment,cname varchar(20)
);
​
create table tb_product( -- 商品表--- 多id int primary key auto_increment,name varchar(29),price int,cid int,foreign key (cid) references tb_category(cid)
);

多对多

创建第三张表.该表至少有两个外键列,分别指向两张表的主键.
-- 场景: 一个订单包含多个商品.多个商品可以存在于不同的订单中. -- 多对多场景.
create table goods(  -- 商品表goodsid int primary key auto_increment,gname varchar(20),gbrand varchar(20),gprice double
);
create table orders( -- 订单表orderid int primary key auto_increment,money varchar(20)
);
​
-- todo 中间表至少有两个外键列,分别指向两张表的主键.
create table orderitem(-- 订单条目表-- 用于记录订单和商品的关系.id int primary key auto_increment,item_goodsid int,-- 外键列指向商品表item_orderid int,-- 外键列指向订单表foreign key (item_goodsid) references goods(goodsid),foreign key (item_orderid) references orders(orderid)
);

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

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

相关文章

【车联网安全】车端知识调研

一、CAN总线: 1、定义: CAN 总线相当于汽车的神经网络,连接车内各控制系统,其通信采用广播机制,各连接部件均可收发控制消息,通信效率高,可确保通信实时性。当前市场上的汽车至少拥有一个CAN网络&#xff0…

Thinkphp(TP)

1.远程命令执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami 2.远程代码执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]…

多模态文档编辑器flowmix/docx,9月更新复盘!

嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践,也陆陆续续设计并开发了多款可视化搭建产品,比如: H5-Dooring(页面可视化搭建平台)V6.Dooring(可视化大屏搭建平台)橙…

js发送邮件至指定邮箱功能实现方式和技巧?

js发送邮件至指定邮箱的教程?怎么使用Node.js发信? 无论是用户反馈、订单确认还是密码重置,js发送邮件至指定邮箱的需求无处不在。AokSend将深入探讨js发送邮件至指定邮箱的实现方式和技巧,帮助开发者更好地理解和应用这一功能。…

html TAB、table生成

1. 代码 <!DOCTYPE html> <head> <meta charset"UTF-8"> <title>Dynamic Tabs with Table Data</title> <style> /* 简单的样式 */ .tab-content { display: none; border: 10px solid #ccc; padding: 30px; mar…

道路车辆功能安全 ISO 26262标准(3)—概念阶段

写在前面 本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解功能安全标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 1. 道路车辆功能安全ISO 26262标准 3. ISO 26262-3 概念阶段 我们来…

浙江欧瑞雅装饰材料有限公司:全屋定制,为爱家增添无限温馨!

浙江欧瑞雅装饰材料有限公司&#xff1a;全屋定制&#xff0c;为爱家增添无限温馨&#xff01;在追求生活品质与个性化的今天&#xff0c;家已不仅仅是一个居住的空间&#xff0c;更是情感的寄托和个性的展现。浙江欧瑞雅装饰材料有限公司&#xff0c;以其专业的全屋定制服务&a…

论文阅读 - SWATTING Spambots: Real-time Detection of Malicious Bots on X

https://web.archive.org/web/20240523035749id_/https://dl.acm.org/doi/pdf/10.1145/3589335.3651564 目录 ABSTRACT INTRODUCTION METHODOLOGY 3 RESULTS ABSTRACT 在 X&#xff08;前身为 Twitter&#xff09;等社交网络平台上&#xff0c;垃圾邮件机器人的活动日益…

html中为div添加展开与收起功能(div折叠)

1、添加样式 <style type"text/css">.mask {position: absolute;bottom: -5px;color: #4b83f0;font-weight: 700;font-size: 14px;text-align: center;height: 80px;left: 0;right: 0;background-image: -webkit-gradient(linear, left top, left bottom, from…

机械零件检测系统源码分享

机械零件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

零基础入门AI大模型应用开发——第三天:使用python实现问答机器人

一、简介 问答机器人是一种能够理解用户提问并提供相关答案的程序。它可以用于各种场景&#xff0c;如客户支持、在线教育、信息检索等。用户通过自然语言输入问题&#xff0c;机器人则通过分析问题并检索相关信息来提供回答。 使用什么技术实现的&#xff1f; 自然语言处理&…

电源设计的艺术:从底层逻辑到工程实践

在电子工程的世界里&#xff0c;电源设计是核心中的核心。它不仅是电子设备的能量源泉&#xff0c;更是整个系统稳定运行的基石。随着科技的不断进步&#xff0c;电源设计的要求也越来越高&#xff0c;从效率、稳定性到体积、成本&#xff0c;每一个维度都是工程师们不断追求的…

Github 2024-09-21Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-09-21统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Move项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型:MIT Lic…

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置 开机&#xff0c;BIOS自检&#xff0c;可以看到设备硬盘信息&#xff0c;以及提示CtrlR进入Raid卡配置界面。 按CtrlR进入Raid卡配置界面&#xff0c;一般来说使用CtrlR进入Raid卡配置界面的Raid卡配置都通用。 …

ant design vue实现表格序号递增展示~

1、代码实例 //current当前页数 //pageSize每页记录数 const columns [{title: 序号,width: 100,customRender: ({ index }) > ${index (current.value - 1) * pageSize.value 1},align: center,fixed: left,} ] 2、效果图

9.24今日错题解析(软考)

前言 这是用来记录我每天备考软考设计师的错题的&#xff0c;今天知识点为操作系统和数据结构&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的思考&#xff0c;为了复习&#xff1a;&#xff09;&#xff0c;最后希望各位报考软考的…

【第十九章:Sentosa_DSML社区版-机器学习之模型评估】

目录 19.1 评估 19.2 混淆矩阵 19.3 ROC-AUC 19.4 时间序列模型评估 【第十九章&#xff1a;Sentosa_DSML社区版-机器学习之模型评估】 19.1 评估 1.算子介绍 评估算子(EvaluationNode) 用于评估用当前数据训练出来的模型的正确性&#xff0c;显示对模型各个评价指标的具…

从零预训练一个tiny-llama#Datawhale组队学习Task2

完整的教程请参考&#xff1a;datawhalechina/tiny-universe: 《大模型白盒子构建指南》&#xff1a;一个全手搓的Tiny-Universe (github.com) 这是Task2的学习任务 目录 Qwen-blog Tokenizer&#xff08;分词器&#xff09; Embedding&#xff08;嵌入&#xff09; RMS …

个人行政复议在线预约系统开发+ssm论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;JSP&#xff08;java server pages…

武汉正向科技 格雷母线定位系统生产厂家

为了适应机车无人化项目对地址高精度的要求&#xff0c;我们推出了高精度格雷母线&#xff0c;根据地址的检测原理&#xff0c;地址精度取决于格雷母线最小交叉环的精度&#xff0c;传统的格雷母线内胆采用柔性泡沫内胆&#xff08;图片1&#xff09;&#xff0c;格雷母线最小交…