MySQL笔记 合并查询 外连接 约束

news/2024/7/24 11:25:20 标签: mysql, 笔记, sql
-- 合并查询 union all以及union
-- union all就是将两个查询结果合并,不会去重
select ename,sal,job from emp where sal>2500; -- 5条记录
select ename,sal,job from emp where job = 'MANAGER' -- 3条记录

select ename,sal,job from emp where sal>2500 
union all
select ename,sal,job from emp where job = 'MANAGER' 

select ename,sal,job from emp where sal>2500 
union
select ename,sal,job from emp where job = 'MANAGER' 

-- 外连接 以往对多张表进行查询,对笛卡尔集用条件进行过滤,显示出所有匹配上的记录,匹配不上的则不进行显示,外连接则会会显示出所有的记录,不管有没有匹配上
-- 左外连接和右外连接
-- 左外连接,左边的表完全显示
-- 右外连接,右边的表完全显示
-- 列出部门名称和这些部门的员工信息(名字和工作),同时列出没有员工的部门
select dept.deptno,emp.ename,emp.job,emp.empno from emp right join dept on emp.deptno=dept.deptno

-- 约束
-- 1、主键
-- 在一张表中最多只能有一个主键但可以是复合主键,主键不能重复也不能为null
-- 直接在字段名指定:字段名 primary key
-- 在表后面写primary(字段1,字段2,。。。。)
-- primary key = not null + unique

create table t1
(
id int primary key,
name varchar(10),
email varchar(25)
);
desc t1;
insert into t1(id,name,email) values(1,'tom','tom@163.com'),(2,'jack','jack@163.com')
select * from t1;
alter table t1 modify id varchar(10) not null default '';
-- 删除主键
alter table t1 drop primary key;
-- 添加主键
alter table t1 add primary key(name);

-- 2、unique不允许这一列出现重复值,如果没有指定not null,则unique字段可以出现多个null,一张表也可以出现多个unique字段

create table t2
(
id int unique,
name varchar(25),
email varchar(25)
);
alter table t2 add unique(name);
desc t2;
insert into t2 values(1,'tom','tom@163.com');
insert into t2 values(2,'tom','tom@163.com');-- 插入失败
select * from t2;
-- 3、外键
-- 用于定义主表从表的之间的关系,外键约束要定义在从表上,主表则必须具有主键约束或者unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null

create table my_class
(
id int primary key,
name varchar(255) not null default ''
);
create table my_stu
(
id int primary key,
name varchar(255) not null default '',
class_id int,
foreign key(class_id) references my_class(id)
);
desc my_stu;
INSERT INTO my_class VALUES(100, 'java'), (200, 'web');
INSERT INTO my_class VALUES(300, 'php');
INSERT INTO my_stu VALUES(1, 'tom', 100);
INSERT INTO my_stu VALUES(2, 'jack', 200);
INSERT INTO my_stu VALUES(3, 'hsp', 300);
INSERT INTO my_stu VALUES(4, 'mary', 400); -- 这里会失败...因为400班级不存在
INSERT INTO my_stu VALUES(5, 'king', NULL);
delete from my_class where id=100; -- 删除失败
delete from my_stu where class_id=100;
delete from my_class where id=100; -- 删除成功

-- 4、check MySQL8.0以前前不支持check,只做语法校验但不会生效,oracle、sql server支持,8.0以后添加了check约束
-- 非生成列和生成列允许被添加到表达式,但包含auto_increase的列不允许被加入
-- 字面量和确定性的内置函数以及操作符允许添加到表达式,确定性的含义是:同样的数据不同用户多次调用的结果是一样的
-- 存储函数和用户自定义函数不被允许
-- 可以通过触发器来实现check的功能
-- 查看客户端的版本
SHOW VARIABLES LIKE 'version';
create table t3
(
id int primary key,
name varchar(25),
sex varchar(6) check(sex in('man','woman')),
sal double check(sal>100 and sal<2000)
);
insert into t3 values(1,'tom','m',1100)  -- Check constraint 't3_chk_2' is violated.
select * from t3;

http://www.niftyadmin.cn/n/5061360.html

相关文章

angular 在vscode 下的hello world

Angulai 是google 公司开发的前端开发框架。Angular 使用 typescript 作为编程语言。typescript 是Javascript 的一个超集&#xff0c;提升了某些功能。本文介绍运行我的第一个angular 程序。 前面部分参考&#xff1a; Angular TypeScript Tutorial in Visual Studio Code 一…

【BLIP/BLIP2/InstructBLIP】一篇文章快速了解BLIP系列(附代码讲解说明)

文章目录 BLIP系列1. BLIP1.1 动机1.2 整体架构1.3 损失函数1.4 Captioning and Filtering(CapFilt)1.4.1 Why&#xff1f;1.4.2 方法 2. BLIP22.1 Q-Former的设计2.2 实现功能2.2.1 图像文本检索(Image-Text Retrieval)2.2.2 图像字幕(Image Captioning)2.2.3 视觉问答(VQA)2.…

基于FFmpeg的Android播放器

基于FFmpeg的Android播放器 文章目录 基于FFmpeg的Android播放器1. 前言2. 编译相关组件库3. 解码器4. 解码流程5. 音频输出6. 视频输出&#xff08;需要优化&#xff09; 1. 前言 FFmpeg是一个最有名的开源的编解码库&#xff0c;实现了通常的编解码逻辑。它还能够根据平台特…

ElementUI实现增删改功能以及表单验证

目录 前言 BookList.vue action.js 展示效果 前言 本篇还是在之前的基础上&#xff0c;继续完善功能。上一篇完成了数据表格的查询&#xff0c;这一篇完善增删改&#xff0c;以及表单验证。 BookList.vue <template><div class"books" style"pa…

Java21 新特性

文章目录 1. 概述2. JDK21 安装与配置3. 新特性3.1 switch模式匹配3.2 字符串模板3.3 顺序集合3.4 记录模式&#xff08;Record Patterns&#xff09;3.5 未命名类和实例的main方法&#xff08;预览版&#xff09;3.6 虚拟线程 1. 概述 2023年9月19日 &#xff0c;Oracle 发布了…

信息安全:使用程序编写基于密钥的加密方式

目录 前言RSA算法代码实现设计思路结果示意 Diffie-Hellman算法代码实现设计思路结果示意 前言 信息安全是计算机科学的一个重要分支&#xff0c;它涉及到保护信息的机密性、完整性和可用性。信息加密是信息安全的一种常用手段&#xff0c;它通过使用一些数学算法和密钥&#…

【Java 进阶篇】JDBC Connection详解:连接到数据库的关键

在Java中&#xff0c;要与数据库进行交互&#xff0c;需要使用Java数据库连接&#xff08;JDBC&#xff09;。JDBC允许您连接到不同类型的数据库&#xff0c;并执行SQL查询、插入、更新和删除操作。在JDBC中&#xff0c;连接数据库是一个重要的步骤&#xff0c;而Connection对象…

Fiddler抓取手机https包的步骤

做接口测试时&#xff0c;有时我们需要使用fiddler进行抓包分析&#xff0c;那么如何抓取https包。主要分为以下七步&#xff1a; 1.设置fiddler选项&#xff1a;Tools->Options,按如下图勾选 2.下载并安装Fiddler证书生成器 下载地址&#xff1a;http://www.telerik.com/…