MySQL-关联查询和子查询

十念  金牌会员 | 2024-12-28 23:49:06 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 991|帖子 991|积分 2973

目录
一、笛卡尔积
二、表毗连
1、内部毗连
1.1 等值毗连
1.2 非等值毗连
2、外部链接
2.1 左外毗连-LEFT JOIN
2.2 右外毗连-RIGHT JOIN
2.3 全关联-FULL JOIN/UNION
三、子查询
1、嵌套子查询
2、相关子查询
3、insert和select语句添加数据
4、update和select语句(子查询)结合
四、数据库备份与还原


一、笛卡尔积


  1. SELECT * FROM student,class;  
复制代码

    观察笛卡尔积的特点:将两张表的数据组合在了一张二维表中,笛卡尔积中有些记录没故意义。


二、表毗连

        在实际查询应用中,用户所需要的数据并不全在一个表中,可能存在多个表中,这时就需使用多表查询。
        在数据库应用中,常常需要从多个相关的表中查询数据,这就需要举行表毗连。
1、内部毗连

内部毗连有以下两种语法情势:
  1.  SELECT select_list FROM 表名1,表名2 WHERE 表1.列=表2.列;
复制代码
大概
  1.  SELECT 别名.list FROM 表1 别名1 [INNER] JOIN 表2 别名2 ON 别名1.列=别名2.列;
复制代码
inner join on 内毗连
一般用inner join 或 join 关键字来指定内毗连。又可分为等值毗连,非等值毗连。
1.1 等值毗连

        是在毗连条件中使用比力运算符即是号(=)来比力毗连列的列值,其查询结果中列出被毗连表中的所有列。
  1. SELECT S.学号,S.姓名,S.性别,S.籍贯,C.班级名称,C.年级
  2. FROM 学生信息 S INNER JOIN 班级信息 C
  3. ON S.班级编号=C.班级编号;
复制代码
1.2 非等值毗连

是在毗连条件中使用了除等号外的其它比力运算符,来比力毗连列的列值。
案例:查询结果大于40的门生个人环境,并按照结果降序分列。
  1. SELECT 学生信息 .学号,学生信息 .姓名,学生信息 .性别,学生信息 .班级编号,成绩表.成绩
  2. FROM 学生信息 INNER JOIN 成绩表
  3. ON 学生信息 .学号=成绩表.学号
  4. WHERE 成绩表.成绩>=40
  5. ORDER BY 成绩表.成绩 DESC;
复制代码
2、外部链接

• 外部毗连会返回FROM子句中提到的至少一个表或视图中的所有行。
• 外部毗连分为左外部毗连、右外部毗连
        左外部毗连对毗连条件中左边的表不加限制;
        右外部毗连对毗连条件中右边的表不加限制。
2.1 左外毗连-LEFT JOIN

        使用关键字LEFT OUTER JOIN 关键字对两个表举行毗连,左外毗连的查询结果中包罗指定左表的所有行,而不仅仅是毗连列所匹配的行。如果左表的某行在右表中没有找到匹配的行,则结果会集的右表的相对应的位置为NULL。
  1. SELECT * FROM student s LEFT JOIN sc ON s.sno=sc.sno;
复制代码

2.2 右外毗连-RIGHT JOIN

        使用RIGHT OUTER JOIN 关键字对两个表举行毗连,右外毗连是左外毗连的反向毗连,只不过在查询结果会集包罗的是指定右表的所有行。如果右边的某行在左表中没有找到匹配的行,则结果会集的左表的相对应位置为NULL。
  1. SELECT * FROM course c RIGHT JOIN teacher t ON c.tno=t.tno;
复制代码

2.3 全关联-FULL JOIN/UNION

mysql不支持FULL JOIN ,但是可以用左毗连UNION右毗连关键字实现全关联.

三、子查询

子查询在其他查询结果的底子上提供了一种有效的方式来表现where子句的条件。
子查询是可以嵌套在 SELECT、INSERT、UPDATE、DELETE 语句中。
子查询的 SELECT 查询总是使用圆括号括起来。
1、嵌套子查询

        在MySQL中子查询是可以嵌套使用的,而且可以在一个查询中嵌套任意多个子查询,即一个子查询中还可以包罗另一个子查询,这种查询方式称为嵌套子查询。
例: 查询计算机系门生选修了哪些课程
  1. SELECT * FROM sc WHERE sno IN
  2.  (SELECT sno FROM Student
  3.  WHERE Sdept = ‘计算机系’);
复制代码
例: 查询修了‘c02’课程且结果高于此课程的平均结果的门生的学号和结果。
  1. SELECT Sno , Grade FROM SC
  2.  WHERE Cno = 'c02‘and Grade > (
  3.  SELECT AVG(Grade) from SC
  4.  WHERE Cno = 'c02');
复制代码
2、相关子查询

相关子查询(单值子查询)
这样的子查询只返回一个值,然后将一列值与查询返回的值举行比力。
例:查询和'静静'在同一个班的门生的信息。
  1. SELECT 学生信息 .学号,学生信息 .姓名,学生信息 .性别,班级信息.班级编号,班级信息 .班级名称,班级信息 .年级
  2. FROM 学生信息 INNER JOIN 班级信息
  3. ON 学生信息 .班级编号=班级信息.班级编号
  4. WHERE 学生信息 .班级编号=
  5. (SELECT 班级编号 FROM 学生信息 WHERE 姓名='ff');
复制代码
3、insert和select语句添加数据

在INSERT语句中使用SELECT子句可以将一个或多个表或视图中的值添加到另一个表中。使用SELECT子句还可以同时插入多行。
INSERT语句中使用SELECT子句的语法情势为:
  1. INSERT [INTO] table_name[(column_list)]
  2. SELECT select_list FROM table_name;
复制代码
通过SELECT语句天生的结果集,再结合INSERT语句,可以把结果集插入到指定的表中,这种方法用于插入的数据不确定(通常多于一条),而且都具有一些特性时。
--拷贝表结构
  1. CREATE TABLE table_bak LIKE table;
复制代码
--拷贝表数据
  1. CREATE TABLE table_bak_1 AS SELECT * FROM table;
复制代码
4、update和select语句(子查询)结合

• 例:将计算机系全体门生的结果加5分。
  1. UPDATE SC SET Grade = Grade + 5
  2. WHERE Sno IN
  3. (SELECT Sno FROM Student
  4. WHERE Sdept = '计算机系' );
复制代码
四、数据库备份与还原

数据库热备份工具:mysqldump.exe(数据库在工作中备份)
备份:
  1. mysqldump -h IP地址 -u 用户名 -p 密码 要备份的数据库名>本地电脑路径/数据文件名.sql
复制代码
还原:
  1. mysql -h IP地址 -u 用户名 -p 密码 数据库名<本地电脑路径/数据文件名.sql
复制代码

  1. use 数据库名;
  2. source 本地电脑路径/数据文件名.sql;
复制代码
数据库冷备份工具:(数据库停止工作举行备份)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表