mysql子查询与连接查询

表结构以及数据:

CREATE TABLE `student`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
INSERT INTO `student` VALUES (1, ‘zazr‘, 11);
INSERT INTO `student` VALUES (2, ‘jkg‘, 20);
INSERT INTO `student` VALUES (4, ‘zazr‘, 11);
INSERT INTO `student` VALUES (5, ‘jkg‘, 12);
INSERT INTO `student` VALUES (6, ‘lgh‘, 13);
INSERT INTO `student` VALUES (7, ‘zazr‘, 11);
INSERT INTO `student` VALUES (8, ‘jkg‘, 12);
INSERT INTO `student` VALUES (9, ‘lgh‘, 13);
INSERT INTO `student` VALUES (10, ‘zazr‘, 11);
INSERT INTO `student` VALUES (11, ‘jkg‘, 12);
INSERT INTO `student` VALUES (12, ‘lgh‘, 13);

查询表中所有数据:

SELECT * FROM student;

查询表中年龄的平均值:

SELECT ROUND(AVG(age),0) from student;

ROUND、AVG都是聚合函数,ROUND(小数,2)表示这个小数四舍五入保留2位小数;AVG求平均值

查询表中年龄大于等于平均值的学生姓名(子查询):

SELECT name FROM student WHERE age>=(SELECT ROUND(AVG(age),0) FROM student);

将表中的不同姓名插入到另一张NAME表中:

创建表:

CREATE TABLE NAME(
-> id int(11) NOT NULL AUTO_INCREMENT KEY,
-> name VARCHAR(20));

SQL语句:

INSERT name(name) SELECT name FROM student GROUP BY name;

将student表中的name值,替换成name表所对应的id(内连接):如果student的name等于name表中的name,则将student表中的name换成对应的id

UPDATE student INNER JOIN name ON name.name=student.name SET student.name=name.id;

此时可以看:id为1对应的是name表中id为3的名字:zazr

向student中添加两条记录:

INSERT student VALUES(NULL,"10",24);

INSERT student VALUES(NULL,"8",30);

向name中添加两条记录:

INSERT name VALUES(NULL,"张三");

INSERT name VALUES(NULL,"李四");

内连接:

查询student和name表满足相同条件的记录:student表中新加入的10和8,与name表中的id为4,5的没有对应关系,所以不会显示,条件就是student.name=name.id;

SELECT student.id,name.name FROM student INNER JOIN name ON student.name=name.id;

左外连接:显示左表中的全部以及与右表符合条件的记录

将查询改为左外连接查询:显示student全部id数据,不过对应的name为NULL;

SELECT student.id,name.name FROM student LEFT JOIN name ON student.name=name.id;

右外连接:

将查询改为右外连接查询:显示name全部name属性数据,不过对应的student的id为NULL;

SELECT student.id,name.name FROM student RIGHT JOIN name ON student.name=name.id;

原文地址:https://www.cnblogs.com/YpfBolg/p/10849683.html

时间: 2024-08-14 22:17:57

mysql子查询与连接查询的相关文章

mysql查询、子查询、连接查询

mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count().sum()等聚合函数一起使用. having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出. order by子句(排序):按照“属性名”指定的字段进行排序.排序方式由“asc”和“desc”两个参数指出,默

mysql 子句、子查询、连接查询

一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count().sum()等聚合函数一起使用. having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出. order by子句(排序):按照“属性名”指定的字段进行排序.排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序.

MySQL数据库联合查询与连接查询

联合查询 基本概念 联合查询是可合并多个相似的选择查询的结果集.等同于将一个表追加到另一个表,从而实现将两个表的查询组合在一起,使用为此为UNINO或UNION ALL 联合查询:将多个查询的结果合并到一起(纵向合并):字段数不变,多个查询的记录数合并 应用场景 1.将同一张表中不同的结果(需要对应多条查询语句来实现),合并到一起展示数据 2.最常见:在数据量大的情况下,会对表进行分表操作,需要对每张表进行部分数据统计,使用联合查询来将数据存放到一起显示 基本语法 select 语句 union

【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过测试校验] 一.去重复(DISTINCT) 二.组合查询 三.UNION(并集) 四.连接查询 五.虚拟表 一.去重复(DISTINCT) DISTINCT:用于返回唯一不同的值,主要是用于某一字段 语法 SELECT DISTINCT <列名>|* FROM <表名> 示例 -- 查

聚合函数,分组查询,连接查询综合例子

实例如下: update users set classes='1' where id in('u001','u002','u003','u004'); update users set classes='2' where id in('u005','u006','u007'); users表的内容如下: +------+-----------+------------+------+-------+---------+ | id | firstname | secondname | age |

合并查询与连接查询区别

一.合并查询与连接查询区别 1.合并查询 --行合并的结果集 --合并查询unioinselect name,sex from hanshuunionselect YYadd,YYadd from YingHu --连接查询where--两个表的乘积select hanshu.name,YingHu.YYadd from hanshu,YingHu ---如果不加where查询的话,将产生迪卡尔现象 (两表相乘)select hanshu.name,YingHu.YYadd from hansh

mysql的查询、子查询及连接查询

一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数)  1.where常用运算符: 比较运算符 > ,  < ,=  , != (< >),>=   ,   <= in(v1,v2..vn) between v1 and v2    在v1至v2之间(包含v1,v2) 逻辑运算符 not ( ! )  逻辑非 or ( || )    逻辑或 and ( &&am

MySql基本查询、连接查询、子查询、正则表达查询讲解

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SELECT语句来查询数据的.在这一章中将讲解的内容包括.1.查询语句的基本语法2.在单表上查询数据3.使用聚合函数查询数据4.多表上联合查询5.子查询6.合并查询结果7.为表和字段取别名8.使用正则

MySql基本查询、连接查询、子查询、正则表达查询解说

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所须要的数据.查询数据是数据库操作中最经常使用,也是最重要的操作.用户能够依据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,能够获得不同的数据. MySQL中是使用SELECT语句来查询数据的. 在这一章中将解说的内容包括.1.查询语句的基本的语法2.在单表上查询数据3.使用聚合函数查询数据4.多表上联合查询5.子查询6.合并查询结果7.为表和字段取别名8

mysql学习笔记之连接查询与子查询

mysql连接查询与子查询 1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement), SELECT column1 FROM t2 称为Sub Query[子查询]. 所以,我们说子查询是嵌套在外查询内部.而事实上它有可能在子查询内部再嵌套子查询. 子查