Mysql高级(下)

从前慢-MySql高级 MySql高级高级 1. MYSQL用户管理 修改密码 方法1: 用SET PASSWORD命令 首先登录MySQL。 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:mysql> set password for root@localhost = password('123'); 方法2:用mysqladmin 格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:mysq 阅读详情

二、多表查询

多个表之间是有关系的,那么关系靠谁来维护?
多表约束:外键列

1、多表的关系

1)、一对多/多对一关系

例如:客户和订单,分类和商品,部门和员工
一对多建表原则:在多的一方创建一个字段,字段作为外键指向一的一方的主键

2)、多对多关系

例如:学生和课程
多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键

3)、一对一关系

在实际的开发中应用不多.因为一对一可以创建成一张表.
两种建表原则:
唯一外键对应:假设一对一是一个一对多的关系,在多的一方创建一个外键指向一的一方的主键,将外键设置为unique.
主键对应:让一对一的双方的主键进行建立关系.

2、多表查询

多表查询有如下几种:

  1. 合并结果集:UNION 、 UNION ALL
  2. 连接查询
  • 2.1内连接 [INNER] JOIN ON
  • 2.2外连接 OUTER JOIN ON
    左外连接 LEFT [OUTER] JOIN
    右外连接 RIGHT [OUTER] JOIN
    全外连接(MySQL不支持)FULL JOIN
  • 2.3 自然连接 NATURAL JOIN
    3.子查询

2-1合并结果集

作用:合并结果集就是把两个select语句的查询结果合并到一起!
合并结果集有两种方式:
l UNION:去除重复记录,例如:SELECT* FROM t1 UNION SELECT * FROM t2;
l UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
注意:被合并的两个结果:列数、列类型必须相同。

2-2连接查询

连接查询就是求出多个表的乘积,例如t1连接t2,那么查询出的结果就是t1*t2。
连接查询会产生笛卡尔积,假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),
(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。
那么多表查询产生这样的结果并不是我们想要的,那么怎么去除重复的,不想要的记录呢,当然是通过
条件过滤。通常要查询的多个表之间都存在关联关系,那么就通过关联关系去除笛卡尔积。
示例 1:现有两张表
emp-员工表,dept-部门表

CREATE TABLE dept1(
 deptno    int primary key,
 dname    varchar(14),
 loc    varchar(13)
);
insert into dept1 values(10,'服务部','北京');
insert into dept1 values(20,'研发部','北京');
insert into dept1 values(30,'销售部','北京');
insert into dept1 values(40,'主管部','北京');
CREATE TABLE emp1(
 empno    int,
 ename    varchar(50),
 job    varchar(50),
 mgr    int,
 hiredate  date,
 sal    double,
 comm    double,
 deptno    int
);
insert into emp1 values(1001,'张三','文员',1006,'2019-1-1',1000,2010,10);
insert into emp1 values(1002,'李四','程序员',1006,'2019-2-1',1100,2000,20);
insert into emp1 values(1003,'王五','程序员',1006,'2019-3-1',1020,2011,20);
insert into emp1 values(1004,'赵六','销售',1006,'2019-4-1',1010,2002,30);
insert into emp1 values(1005,'张猛','销售',1006,'2019-5-1',1001,2003,30);
insert into emp1 values(1006,'谢娜','主管',1006,'2019-6-1',1011,2004,40);

指定要查询的列:

SELECT emp.ename,emp.sal,emp.comm,dept.dname
FROM emp,dept
WHERE emp.deptno=dept.deptno;

结果:

在这里插入图片描述

2-3 内连接

上面的连接语句就是内连接,但它不是SQL标准中的查询方式,可以理解为方言!
语法:

select 列名
   from 表1
   inner join 表2
   on 表1.列名=表2.列名 //外键列的关系
   where.....

等价于:

select 列名    
 from 表1,表2    
 where 表1.列名=表2.列名 and ...(其他条件)

注:<1>表1和表2的顺序可以互换
<2>找两张表的等值关系时,找表示相同含义的列作为等值关系。
<3>点操作符表示“的”,格式:表名.列名
<4>可以使用as,给表名起别名,注意定义别名之后,统一使用别名
示例:

//查询学生表中的学生姓名和分数表中的分数
     select name,score
     from student as s
     inner join scores as c
     on s.studentid=c.stuid
    等价于:
    select name,score
    from student as s,scores as c
    where s.studentid=c.stuid

三表联查:
语法:

select 列名 from 表1
inner join 表2 on 表1.列名=表2.列名
inner join 表3 on 表1或表2.列名=表3.列名 where

等价于:

select 列名 from 表1,表2,表3
where 表1.列名=表2.列名 and 表1/表2.列名=表3.列名

SQL标准的内连接为:

SELECT *
FROM emp e
INNER JOIN dept d
ON e.deptno=d.deptno;

内连接的特点:查询结果必须满足条件。

2-4 外连接

包括左外连接和右外连接,外连接的特点:查询出的结果存在不满足条件的可能。
– 显示还没有员工的部门名称?
– 外联查询
– 左外联:select 列名 from 主表 left join 次表 on 主表.列名=次表.列名
– 1.主表数据全部显示,次表数据匹配显示,能匹配到的显示数据,匹配不成功的显示null
– 2.主表和次表不能随意调换位置
使用场景:一般会作为子查询的语句使用

select depname,name from
(select e.*,d.depname from department d left join employee e
on e.depid=d.depid
) aa where aa.name is null;

– 右外联:select 列名 from 次表 right join 主表 on 主表.列名=次表.列名
a.左外连接

SELECT * FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno;

左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的
显示NULL。

insert into emp values(1007,'何炅','主管',1006,'2019-6-1',1011,2004,50);

我们还是用上面的例子来说明。其中emp表中“张三”这条记录中,部门编号为50,而dept表中不存在部
门编号为50的记录,所以“张三”这条记录,不能满足e.deptno=d.deptno这条件。但在左连接中,因为
emp表是左表,所以左表中的记录都会查询出来,即“张三”这条记录也会查出,但相应的右表部分显示
NULL。

b.右外连接
右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。例如在
dept表中的40部门并不存在员工,但在右连接中,如果dept表为右表,那么还是会查出40部门,但相
应的员工信息为NULL。
在这里插入图片描述

insert into dept values(60,'颜值部','成都');
SELECT * FROM emp e
RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno;

在这里插入图片描述

3 自然连接

自然连接(NATURAL INNER JOIN):自然连接是一种特殊的等值连接,他要求两个关系表中进行连
接的必须是相同的属性列(名字相同),无须添加连接条件,并且在结果中消除重复的属性列。.下面给
出几个例子。
语句:

select * from emp e natural join dept d;

4 子查询

一个select语句中包含另一个完整的select语句。
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么
就是子查询语句了。
l 子查询出现的位置:
a. where后,作为条为被查询的一条件的一部分;
b. from后,作表;
l 当子查询出现在where后作为条件时,还可以使用如下关键字:
a. any
b. all
l 子查询结果集的形式:
a. 单行单列(用于条件)
b. 单行多列(用于条件)
c. 多行单列(用于条件)
d. 多行多列(用于表)
子查询作为条件
l 子查询形式为多行单列(当子查询结果集形式为多行单列时可以使用ALL或ANY关键字)

MySQL高级语法深入教程 函数(Function)类似于存储过程,但是有返回值。函数的返回值可以是任何类型,包括标量类型、表类型、游标等。创建函数的基本语法如下:BEGIN-- 函数代码END //DELIMITER;示例创建一个自定义函数:BEGINEND CASE;在这个函数中,我们根据传入的订单状态代码返回相应的描述性字符串。存储过程和函数是数据库编程中的重要组成部分。 阅读详情

相关推荐

为什么PCB设计中的50Ω阻抗如此重要?从USB到以太网的实战解析

本文深入解析了PCB设计中50Ω特征阻抗的核心重要性及其工程权衡起源。文章从传输线理论出发,阐释了阻抗匹配对防止信号反射、确保信号完整性的关键作用,并对比了USB、以太网等不同应用场景的阻抗标准。同时,文章结合实际案例,剖析了在两层板等简单设计中实现精准阻抗控制的难点与实战解决方案。

weixin_29268385的博客 298

Mysql高级(上)

一、数据完整性 1、数据库的完整性 用来保证存放到数据库中的数据是有效的,即数据的有效性和准确性 确保数据的完整性 = 在创建表时给表中添加约束 完整性的分类: 实体完整性(行完整性): 域完整性(列完整性): 引用完整性(关联表完整性): 主键约束:primary key 唯一约束:unique [key] 非空约束:not null 默认约束:default 自动增长:auto_increment 外键约束: foreign key 建议这些约束应该在创建表的时候设置 多个约束条件之间使用空格间隔 示

githubbbb的博客 134

libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by erlang-22.0.7-1.el7.x86_64

今天安装Rabbitmq的 erlang-22.0.7-1.el7.x86_64.rpmrpm包时遇到了这个坑,害找到说是不容易;错误信息在下面; [root@iz2zef7u84js1qeeq00ewwz RabbitMQ]# rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm warning: erlang-22.0.7-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY error:

qq_45782349的博客 5784

MySQL高级进阶

MySQL高级 &nbsp;&nbsp;Cent OS7 &nbsp;&nbsp;&nbsp;&nbsp;下载地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;https://www.centos.org/download/ 1.进入官网,找到下载, 下面个ios镜像都可以择 2.使用链接下载cent os ios centos7安装GUI图形界面 &nbsp;&nb

Java肖帝的博客 4436

基于python的奥运会历史数据分析【120年】

数据分析实战案例

xff123456_的博客 3339

飞塔防火墙和paloalto防火墙构建ipsec

一、配置fortigate防火墙1.防火墙配置上网功能1.1配置fortigate的wan1接口IP为100.100.100.2/24VLAN交换internal,IP地址为192.168.156.99/24。开启DHCP分配IP地址范围为192.168.156.110-192.168.156.2101.2配置访问互联网的缺省路由1.3配置访问互联网的安全策略2.配置与Paloalto防火墙的IPSECVPN。

weixin_44675999的博客 3741

MySQL高级篇

MySQL高级篇

写代码的渣渣苏 2万+

给大一新生的蓝桥杯EDA备赛规划:从电路分析到立创EDA,如何用一年时间高效备赛?

本文为大一新生提供了一份系统的蓝桥杯EDA备赛规划,从电路分析基础到立创EDA实战操作,分阶段指导如何高效备赛。内容涵盖理论学习、软件操作、PCB设计专项提升及冲刺优化策略,帮助学生在一年内全面提升电子设计能力,为竞赛做好充分准备。

weixin_31476015的博客 291

MySQL高级SQL语句

MySQL高级SQL语句MySQL高级SQL语句函数数学函数聚合函数字符串函数 MySQL高级SQL语句 use kgc; create table location (Region char(20),store_name char(20)); insert into location values ('East','Boston') ; insert into location values ('East','New York'); insert into location values ('west',

weixin_55609814的博客 2万+

两相变频交错PFC实战:从论文理论到PSIM仿真的完整避坑指南

本文详细解析了两相变频交错PFC技术从理论到PSIM仿真的完整实现过程,特别针对CRM模式下的BOOST PFC设计挑战提供实用解决方案。涵盖周期值比较法与RS触发器法的对比实施、PSIM仿真中的过零处理与收敛性优化等核心问题,并给出硬件实现的进阶建议,助力工程师高效完成高功率密度PFC设计。

weixin_30632089的博客 423

ROS2前置基础教程 | 小鱼教你用CMake依赖查找流程

上面我们用g++、make、cmake三种方式来编译ros2的C++节点。用cmake虽然成功了,但是CMakeLists.txt的内容依然非常的臃肿,我们需要将其进一步的简化。将上面的CmakLists.txt改成下面的样子 接着继续生成和编译 是不是非常的神奇,为什么可以浓缩成那么短的几句指令呢?find_package查找路径对应的环境变量如下。 打开终端,输入指令: 结果 观察PATH变量,你会发现赫然在其中,中的路径如果以或结尾,则自动回退到上一级目录,接着检查这些目录下的 cmake找到这些目录

生活不止眼前的苟且 7163

MySQL高级语句

select、distinct、where、and|or、in、between、like、order by、函数、左联接、右联接、内联接、正则表达式

weixin_65580338的博客 3880

DirectX修复工具使用技巧之二——手动修复C++创建失败的文件

最后更新:2021-2-25 随着V4.0正式版的发布,近来有部分用户来咨询如何解决C++文件创建失败的问题。在此我将以解决最常见的C++2015-2019文件创建失败为例,向大家演示一下在线修复的方法,其他C++或文件的方法大同小异。此次操作以Windows 7为例,其他系统相应参考即可。 首先,如果希望程序能手动在线修复创建失败的失败,请首先确定您使用的V4.0.2版或更高版本,老版本不支持此功能。查看程序版本的方式可以把鼠标放在DirectX Repair.e...

VBcom的专栏 6万+

MySQL高级查询

第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL);第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL);① rows只和行号有关,当光标指向第2行,则向上1行,向下1行,则相当于1 + 3 + 5 = 9。② 当第一行查询完毕后,游标会自动向下偏移一个单位,指向第二行,则第二行就变更为当前行。– 这是不对的,也是不允许的!

AGI爱好者_数仓&可视化&数据分析工程师_Vae’伯乐‘ 1392

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mysql 高级查询方式,MySQL高级查询

MySQL高级查询1.1. 高级查询语法概述一个查询语句的完整形式如下所示:select 子句[from 子句][where 子句][group by子句][having子句][order by子句][limit 子句]总体说明:1,以上中括号中的任一项都可以省略,但如果不省略,就应该按该顺序出现。2,通常,from后的子句都需要有from子句, having子句需要有group by子句。3,这...

weixin_42315537的博客 286

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【mysql】mysql的高级函数、高级用法

mysql是最常用的数据库之一,常见的函数用法大家应该都很熟悉,本文主要例举一些相对出现频率比较少的高级用法(注:需注意mysql版本,大部分高级特性都是mysql8才有的)

孟秋与你的博客 639

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL高级查询语句——超详细,一篇就够了

MySQL高级查询语句一、MySQL进阶查询1.1、按关键字排序——order by1.2、对结果进行分组——group by1.2.1、单个分组1.2.2、分组结合order by使用1.3、限制结果条目二、MySQL数据库函数三、MySQL存储过程 一、MySQL进阶查询 1.1、按关键字排序——order by ■ 使用ORDER BY 语句来实现排序 ■ 排序可针对一个或多个字段 ■ ASC:升序,默认排序方式 ■ DESC:降序 ■ ORDER BY 的语法结构 SELECT column1, c

优快云著名博主 2万+

Mysql高级语句

需要注意 的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为 NULL 的字段是没有 值的。ORDER BY 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,ORDER BY 后面跟多个字段时,字段之间使用英文。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参 考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,

weixin_54959847的博客 2635

导航【mysql高级】【java提高】

导航【mysql高级】【java提高】

小心星的博客 2650

Mysql高级知识概括

Mysql高级知识概括一级目录 一级目录

weixin_41005188的博客 1547

MySQL高级

近期在学习mysql的索引以及优化,整理了相关的笔记,有问题可以在评论区留言,大家相互学习交流。

m0_73698492的博客 1307
上一篇: Mysql高级(上)
下一篇: JDBC (上)
githubbbb
博客等级 码龄7年 2粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值