首页 > 数据库 >2024/10/17日 日志 --》关于MySQL中的 约束、多表查询的初步学习笔记与整理

2024/10/17日 日志 --》关于MySQL中的 约束、多表查询的初步学习笔记与整理

时间:2024-10-17 16:31:52浏览次数:7  
标签:10 多表 17 -- 查询 dept emp 约束 SELECT

今天推进了关于约束以及多表查询的内容,下一步是事务以及关于连接数据库JDBC的学习。

点击查看代码
-- -- 约束
-- 1.概念:
-- ·约束是作用于列上的规则用于限制加入表的数据
-- ·约束的存在保证了数据库中数据的正确性、有效性和完整性
-- 2.约束的分类
-- 非空约束 NOT NULL :保证列中所有数据不能有null值
-- 唯一约束 UNIQUE   :保证列中所有数据各不相同
-- 主键约束 PRIMARY KEY :主键是一行数据的唯一标识,要求非空且唯一
-- 检查约束 CHECK    :保证列中的数值满足某一条件
-- 默认约束 DEFAULT  :保存数据时,未指定值则采用默认值
-- 外键约束 FOREIGN KEY :外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
-- MySQL不支持检查约束	
--
-- 示例:
-- CREATE TABLE emp(
-- 	id INT PRIMARY KEY auto_increment, 员工id 主键且自增长
-- 	--自动增长: auto_increment :当列是数字类型并且唯一约束	
-- 	ename VARCHAR(50) NOT NULL UNIQUE, 员工姓名,非空且唯一
-- 	joindate DATE NOT NULL ,	入职日期,非空
-- 	salary DOUBLE(7,2) NOT NULL, 	工资,非空
--  bonus DOUBLE(7,2) DEFAULT 0		奖金,如果没有奖金默认为 0
-- );
-- 此外也可以建表后添加
-- 非空约束
-- ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
-- 删除非空约束
-- ALTER TABLE 表名 MODIFY 字段名 数据类型;
-- 唯一约束
-- ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
-- 删除唯一约束
-- ALTER TABLE 表名 DROP INDEX 字段名;
-- 主键约束
-- ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
-- 删除主键约束
-- ALTER TABLE 表名 DROP PRIMARY KEY;	
-- 默认约束
-- ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;
-- 删除默认约束
-- ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

-- 外键约束	
-- 1.概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
-- 	添加约束
-- CREATE TABLE 表名(
-- 列名 数据类型,
-- ...
-- [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列	名)
-- );
-- 或
-- ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主列表名);
-- 	删除约束
-- ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
--
-- 需要注意的是如过添加了外键约束应该先创建主表且应该先添加主表数据
--
--
-- 多表查询
-- 如果 SELECT * from emp,dept;其中emp和dept是两个表名,那么将会进行笛卡尔积,即A,B集合所有组合。
-- 所以,需要消除无效数据。
-- 如 连接查询示例(内连接) :SELECT * FROM emp,dept WHERE emp.	dep_id = dept.did;
--  多表查询即从多张表查询数据
--  包括:
-- 连接查询:
-- · 内连接:相当于查询A,B交集数据
-- · 外连接:
-- --------· 左外连接:相当于查询A表所有数据和交集部分数据
-- --------· 右外连接:相当于查询B表所有数据和交集部分数据
-- 
-- 内连接查询语法:
-- 隐式内连接:SELECT 字段列表 FROM 表一,表二...WHERE 条件;
-- 显示内连接:SELECT 字段列表 FROM 表1 [INNER] JOIN表2 on 条件;
-- 隐式内连接示例:查询emp的name,gender和dept表的dname
-- SELECT emp.name,emp.gender,dept.dname from emp,dept where emp.	dep_id = dept.did;
-- 给表可以起别名:
-- SELECT t1.name,t1.gender,t2.dname from emp t1,dept t2 where emp.	t1_id = t2.did;
-- 显示内连接示例:
-- SELECT *from emp inner join dept on emp.dep_id = dept.did;
-- 
-- 外连接查询语法:
-- 左外连接:SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接:SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
-- 左外连接示例:查询emp表所有数据和对应的部门信息
-- SELECT *from emp LEFT join dept on emp.dep_id = dept.did;
-- 右外连接示例: 查询dept表所有数据和对应的员工信息
-- SELECT *from emp RIGHT join dept on emp.dep_id = dept.did;
-- 
-- 子查询;查询中会嵌套查询,称嵌套查询为子查询
-- 子查询根据查询结果不同,作用不同:
-- ·单行单列:作为条件值,使用 = != > < 等进行条件判断
-- SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);
-- ·多行单列:作为条件值,使用 in 等关键字进行条件判断
-- SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);     
-- ·多行多列:作为虚拟表 
-- SELECT 字段列表 FROM (子查询) WHERE 条件;
--
-- 简单示例: 
-- 1.查询工资高于猪八戒的员工信息-->单行单列
-- SELECT *FROM emp where salary > (SELECT salary from emp where name = '猪八戒'); //嵌套
-- 2.查询 '财务部'和'市场部'所有的员工信息-->多行多列
-- SELECT * FROM emp where dep_id in (SELECT did from dept WHERE dname = '财务部 ' OR '市场部');
-- 3.查询入职日期是'2011-11-11'之后的员工信息和部门信息
-- SELECT * from (SELECT *from emp where join_date > '2011-11-11') t1 ,dept where t1.dep_id = dept.did;
--

标签:10,多表,17,--,查询,dept,emp,约束,SELECT
From: https://www.cnblogs.com/MoonbeamsC/p/18472602

相关文章

  • 【进阶OpenCV】 (17)-- Dlib库 --实现人脸检测
    文章目录Dlib库一、Dlib库安装二、实现人脸检测1.生成人脸检测器2.检测人脸3.显示人脸总结Dlib库Dlib提供了丰富的图像处理和计算机视觉工具,如面部特征检测、物体检测、图像变换等,这些工具使得开发者能够轻松地进行各种图像处理任务。一、Dlib库安装pipinst......
  • 2024.10.08星期二
    今天配置了vue环境,学习了基础的vue语法,在这个过程中遇到了如下问题1.安装完node.js和vuecli后,创建项目的时候出现了问题我无法通过yarnserve启动项目,但由于默认下载设置的是yarn,导致也无法使用npmrunserve启动在这里卡了很久,解决办法是在C盘的user目录下有一个文件,其实后面......
  • 2024.010.10
    今天主要是记录一些问题,主要是在使用vue通过axios发送请求的时候,起初我认为需要把vue和springboot整合到一块但是在听完课之后发现并不需要,因为vue的目的是实现前后端分离的开发,因此两个项目可以同时运行,调整vue项目就是改前端代码,调整springboot就是改后端代码,前端只负责发送请......
  • 2024.10.09 星期三
    算作是之前的Springboot+Echarts的进阶版因为引入了更多前端的知识,主体是Vue,今天学习了Vue的部分语法,但是说实话,我认为对我来说意义不是特别大因为多数情况下我们所做的都是把后端数据库内容传输到前端,而在老师的Vue语法部分讲解的大部分是纯前端写死的一些知识因此我把重心放......
  • 2024.10.11
    今天研究了一下如何把Springboot+Mybatis和Vue+Element结合起来使用详细写一篇博客来记录一下流程吧,因为途中发现了很多的问题首先,创建Springboot项目,惯例添加依赖 <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="......
  • 《华企盾网络安全必修课:保护个人信息从这10个习惯开始》
    在数字化时代,个人信息的安全性问题日益凸显。网络攻击和数据泄露事件频发,使得个人信息保护成为每位网络用户的必修课程。以下是从专业角度出发,推荐的10个保护个人信息的习惯,帮助您构建坚实的网络安全防线。1.采用强密码策略专业的网络安全建议使用强密码,即包含大小写字母、数......
  • 2024.10.17总结
    本文于github博客同步更新。远古题,放现在强度不高。A:处理出每日融化积雪的前缀和,设第\(i\)天,则向二分查找的数组中添加\(sum[i-1]+a[i]\),之后查找第\(j\)天的\(sum[j]>=sum[i-1]+a[i]\),进行差分,\(ans[j]+=sum[i-1]+a[i]-sum[j-1]\),来处理不完全部分,最后,\(ans[i]+=nu......
  • 2024-10-17_Thu_14:19 - 你的意念强度决定你的富裕程度
    2024-10-17_Thu_14:19-你的意念强度决定你的富裕程度​​‍你到底想要什么?有钱人努力让自己有钱。穷人一直想要变得有钱。如果问大部分人想不想变成有钱人,他们会看着你,把你当作疯子,然后说:“我当然想有钱啊。”然而事实上大部分的人并不是真的想变得有钱。为什么?因为......
  • 24.10.17
    签到,爽!为啥我把这个放考试三个题上面?A签到!每天所有数\(\let_i\)的取完,剩下的减\(t_i\),没有脑子只剩平衡树了。B签到!必须01交错?将\(2|(i+j)\)的格子取反就是求最大全零矩阵和最大全一矩阵。悬线法。0:6C签到?\(m\le10\),状压,但是\(2\times3\)的物品需要压两......
  • 2019-3-13-win10-uwp-使用-ScaleTransform-放大某个元素
    titleauthordateCreateTimecategorieswin10uwp使用ScaleTransform放大某个元素lindexi2019-3-1319:5:56+08002019-03-1316:50:36+0800Win10UWP本文告诉大家如何通过ScaleTransform放大元素放大一个元素的方法有很多个,通过ScaleTransform放大是比较清真的在UWP中Sc......