精华内容
下载资源
问答
  • mysql数据库表连接和子查询

    千次阅读 2020-07-21 19:23:11
    在实际工作中,很多时候获取的数据来源于多张表,一个表没法满足需求,就需要进行多表查询工作,而多表查询的实现需要借助于表连接的操作。 表连接的方式: 1)内连接,让多个表进行关联,然后只有表与表之间能匹配...

    一、表连接

    在实际工作中,很多时候获取的数据来源于多张表,一个表没法满足需求,就需要进行多表查询工作,而多表查询的实现需要借助于表连接的操作。
    表连接的方式:
    1)内连接,让多个表进行关联,然后只有表与表之间能匹配到的情况下,才会有查询结果
    2)外连接,至少会返回一个表的所有行,先写的时左表,后写的时右表

    1. 内连接

    1.1 where进行表间关联

    格式:

    select 表名1.列名1,表名2.列名2,... from 表名1,表名2 where 表名1.列名1=表名2.列名2;
    

    1.2 inner join on进行表间关联

    格式:

    select 表名1.列名1,表名2.列名2,... from 表名1 [inner] join 表名2 on 表名1.列名1=表名2.列名2;
    

    注意:
    多表查询,最关键的一点是表与表之间有能够关联的列,对于关联的列的要求:列名可以不一样,但是这个列的数据类型必须一样。

    1.3 额外条件

    格式一:

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

    格式二:

    select 表名1.列名1,表名2.列名2,... from 表名1 [inner] join 表名2 on 表名1.列名1=表名2.列名2 and 其他条件;
    

    注:两个表的单独列可以不写列名,相同列要写:表名.列名

    1.4 针对多张表查询

    表数量大于2,两两结合
    格式一:

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

    格式二:

    select 表名1.列名1,表名2.列名2,... 
    from 表名1 [inner] join 表名2 
    on 表名1.列名1=表名2.列名2 inner join 表名3 
    on 表名2.列名2=表名3.列名2 
    and 其它条件;
    

    2.外连接

    2.1 左外部连接

    对左边的表不加限制,返回的是左表所有行
    格式:

    select 表名1.列名1,表名2.列名2,... 
    from 表名1 left [outer] join 表名2 
    on 表名1.列名1=表名2.列名2 and 其他条件;
    

    如果左表中数据在右表中没找到匹配信息,对应位置为Null

    2.2 右外部连接

    对右边的表不加限制,返回的是右表所有行
    格式:

    select 表名1.列名1,表名2.列名2,... 
    from 表名1 right [outer] join 表名2 
    on 表名1.列名1=表名2.列名2 and 其他条件;
    

    如果右表中数据在左表中没找到匹配信息,对应位置为Null

    二、子查询

    1. 查询语句中嵌套查询语句

    格式一(in):

    select 列名 from 表名 where 列名 in (select子查询语句);
    

    遵循原则:条件要什么,子查询就查什么
    格式二(=):

    select 列名 from 表名 where 列名 = (select子查询语句);
    

    对于子查询结果有且只有一个

    2. 适合子查询的情况

    1)给的条件没有明确说明
    如:查询和王五同学所在一个系的学生信息
    2)因为where后不能直接写聚合函数,那么可以借助于子查询,直接把聚合函数结果查询出来,通过结果来进行操作

    3. 嵌套子查询

    指的是子查询中还包含另一个子查询

    4. 相关子查询

    也叫胆汁子查询,子查询结果有且只有一个
    insert和select结合:把查询结果插入到某张表中
    格式:

    insert into 表名 select子查询语句;
    

    update和select结合:

    update 表名 set 更新语句 where 列名 in (select子查询语句);
    

    delete和select结合:

    delete from 表名 where 列名 in (select子查询语句);
    

    看完点个赞呗!

    展开全文
  • 1.基础查询语法结构。 select 列1,…,列n from 表 [where 条件] [group by 分组列1,…,列n] [having 筛选分组条件] [order by 排序列1,…,列n] 2.条件查询常用表达式 ...2.6.null值非空查询 is null

    1.基础查询语法结构。
    select 列1,…,列n from 表 [where 条件] [group by 分组列1,…,列n] [having 筛选分组条件] [order by 排序列1,…,列n]

    2.条件查询常用表达式
    2.1.查询中使用别名
    2.2.关系运算符:>、<、=、!=、>=、<=
    2.3.逻辑运算符:and、not、or
    2.4.范围运算:between…and…
    in(值1,…,值n)
    2.5.模糊查询 like
    2.6.null值和非空查询
    is null is not null

    3.查询分组、多列分组、聚合函数
    3.1.sum() 求和
    3.2.count() 统计梳理
    3.3.max() 求最大值
    3.4.min() 求最小值
    3.5.avg() 求平均值

    4.分页查询
    4.1 top分页
    select top 每页显示条数 列名列表 from 表 where id not in (
    select top 偏移量条数 id from 表
    )
    4.2 limit分页
    select 列名列表 from 表 […] lmit 偏移量、每页显示条数
    4.3 伪列分页
    rowid
    select rowid,列名列表 from 表 where rowid betwwen 起始编号 and 结束编号

    5.多表联查
    5.1.内联接查询
    select 列名列表 from 表1,表2 where 两表关联列条件表达式;
    或者
    select 列名列表 from 表1 inner join 表2 on 两表关联列条件表达式;

    5.2.外联接查询
    	左外联接查询
    	select 列名列表 from 表1 left outer join 表2 on 两表关联列条件表达式;
    	右外联接查询
    	select 列名列表 from 表1 right outer join 表2 on 两表关联列条件表达式;
    	全联接查询
    	select 列名列表 from 表1 full join 表2 on 两表关联列条件表达式;
    

    6.子查询
    6.1 where 子句子查询:将一个查询的结果作为另一个查询(更新)操作的条件
    select 列名列表 from 表名 where 条件列 = | in | not in (
    子查询
    ) [条件…其他];
    6.2 from 子句子查询:将一个查询的结果看做一张虚拟表提供给其他查询使用
    select 列名列表 from (
    子查询
    )临时表名 [条件…其他]
    6.3 select 子句子查询:将一个查询的结果和其他查询的结果进行组合
    select 列名列表,(
    子查询
    )from 表名 [条件…其他]

    展开全文
  • 前言:正常情况下,连接查询是比子查询效率要高的,因为子查询需要创建临时表。但是,在实际测试中,有部分情况子查询效率会比连接查询要高 1:去重的情况下 ①连接查询 SELECT DISTINCT itm.team_id FROM ...

    前言:正常情况下,连接查询是比子查询效率要高的,因为子查询需要创建临时表。但是,在实际测试中,有部分情况子查询效率会比连接查询要高

    1:去重的情况下

            ①连接查询

    SELECT
    	DISTINCT itm.team_id 
    FROM
    	表1 itm
    	LEFT JOIN 表2 itmc on itm.team_id=itmc.team_id
    WHERE
    	itmc.up_start = !1 
    	AND itmc.check_state = !1
    	AND itm.NAME LIKE CONCAT( '', '张', '%' ) 
    

           下面是查询结果:

           

            使用explian查看语句,发现都使用了索引,是我们想要的效果(使用索引)

          

           ②使用子查询

    	SELECT
    	  DISTINCT itm.team_id 
    FROM
    	表1 itm ,
    	(select DISTINCT itmg.team_id from 表2 itmg where itmg.up_start != 1 AND itmg.check_state != 1) tab_a
    	where  
     itm.team_id = tab_a.team_id
     and itm.NAME LIKE '张%'
    	

           下面是查询结果

            

           使用explian查看语句,发现主表和副表也都使用了索引

          

        测试总结:

                  1:查询的结果是一致的,如果没有加去重的话,两个sql语句,连接查询效率相对高一些

                  2:现在两个查询语句都使用了去重,连接查询效率却比子查询效率低得多

                        分析:个人认为这是由于去重的原因,连接查询去重机制是将两张表中符合条件的数据先筛选出来,然后再去重;但是子查询相当于去重了两遍,副表中筛选了一次以后,数据量小了很多,这时候再去跟主表中的数据匹配,再去重,工作量小了很多,                      所以查询效率高了很多

         总结:

                 1:在正常情况下,我还是坚持认为连接查询较好,子查询首先可读性就比较差,维护成本比较高,同时子查询也会建立临时表浪费资源

                 2:像上面的那种情况确实给我们启示,某些特殊情况下,子查询确实有用武之地,也不应该一味排斥

                 3:像上面的那种查询需求,其实在设计之初如果能够考虑到这种应用场景的话,不至于像现在这样难办,所以表设计还是核心

     

         关于子查询的小拓展:

               1:子查询可以放在很多地方,比如select,from,where后面,但是不能放在group by后

               2:如果放在select后面,会造成多次执行子查询语句,外查询每次执行一次,都会执行一次子查询(不知道我理解的对不对,希望有同学能够指正我的错误!)

     

     

    展开全文
  • 简单数据库但表查询 select * from kjbdsjk where 姓名 = 王勇 and 分数 = 87...7.在UPDATE语句中应用子查询:update kjbdsjk set 工资 = 工资+1000 where 工资 in (select 工资 from kjbdsjk where 工资 > "+stredit+")
  • 什么是子查询?一条SELECT语句结果作为另一条SELECT语法一部分(比如是查询条件,查询结果,表) 子查询总结: 子查询需要放在()中 子查询结果的三种情况: 1. 子查询的结果是一个值的时候 2. 子查询...

    什么是多表查询?同时查询多张表获取到需要的数据 什么是子查询?一条SELECT语句结果作为另一条SELECT语法一部分(比如是查询条件,查询结果,表)

    子查询总结:

    子查询需要放在()中
    子查询结果的三种情况:

     1. 子查询的结果是一个值的时候  
     2. 子查询结果是单例多行的时候  
     3. 子查询的结果是多行多列
    

    说明:子查询结果只要是单列,肯定在WHERE后面作为条件。子查询结果只要是多列,肯定在FROM后面作为表。

    1.子查询结果只要是单列,肯定在WHERE后面作为条件

    子查询结果只要是单列,肯定在WHERE后面作为条件
    SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
    

    2.子查询结果是单列多行,结果集类似于一个数组,父查询使用IN运算符

    `SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);`
    

    3.子查询结果只要是多列,肯定在FROM后面作为表

    SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
    

    多表查询规律

    不管我们查询几张表,表连接查询会产出笛卡尔积,我们需要消除笛卡尔积,拿到正确的数据。
    我们需要找到表与表之间通过哪个字段关联起来的(通常是外键=主键)
    消除笛卡尔积规律:2张表需要1个条件,3张表需要2个条件,4张表需要3个条件。(条件数量=表的数量-1)
    每张表都要参与进来多表连接查询步骤:

    1. 确定要查询哪些表
    2. 确定表连接条件
    3. 确定查询字段
    

    数据准备

    在这里插入图片描述

    演示:
    查询所有员工信息。显示员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

    1. 确定要查询哪些表,emp e, job j, dept d, salarygrade s
     SELECT * FROM emp e INNER JOIN job j INNER JOIN dept d INNER JOIN salarygrade s;
    
    1. 确定表连接条件 e.job_id=j.id and e.dept_id=d.id and e.salary between s.losalary and hisalary
    SELECT * FROM emp e INNER JOIN job j INNER JOIN dept d INNER JOIN salarygrade s ON e.job_id=j.id AND e.dept_id=d.id AND e.salary BETWEEN s.losalary AND hisalary;
    
    1. 确定查询字段:员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
       SELECT e.`ename`, e.`salary`, j.`jname`, j.`description`, d.`dname`, d.`loc`, s.`grade` FROM emp e INNER JOIN job j INNER JOIN dept d INNER JOIN salarygrade s ON e.job_id=j.id AND e.dept_id=d.id AND e.salary BETWEEN s.losalary AND hisalary;
    

    在这里插入图片描述

    展开全文
  • MySQL数据库子查询

    千次阅读 2017-02-23 12:19:45
    MySQL数据库子查询1. 子查询 定义:子查询即一个查询语句嵌到另一个查询语句的子句中;可以出现在另一个查询的列中,where子句中,from子句中等。 例如:通过子查询实现一个自身连接的功能,显示员工与领导的关系...
  • 查询的基本操作     1选择操作 对应的是限制条件(格式类似“field&lt;op&gt;consant”, field表示列对象,op是操作符如"="、"&gt;"等)。 操作对象是二维表中的行 优化方式:...
  • #IN 子查询#采用IN 子查询获得参加考试的在读学生名单SELECT student_no,student_name FROM student WHERE student_noIN(SELECT student_no FROM resultWHERE subject_no=(#获得参加Logic Java课程最近一次考试的...
  • 在实际应用中经常有一些 SELECT 语句需要使用其他 SELECT 语句的...子查询和连接: 虽然子查询和连接都要查询多个表,但子查询和连接不同,子查询是更为复杂的查询。 子查询优点(与连接比): 子查询可以计算一个...
  • 数据库原理之嵌套查询and集合查询

    千次阅读 2018-12-10 19:38:26
    嵌套查询 嵌套查询概述: 将一个查询块嵌套在另一个查询的WHERE子句或HAVONG短句的`条件中的查询称为嵌套查询。 什么是查询块? 一个SELECT-FORM-WHERE短句称为一个查询块 ...
  • 数据库系统概论之嵌套查询中的带exists谓词的子查询 一、exists谓词概述:exists谓词代表存在量词。带有exists谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。可以利用exists来判断 属性...
  • ORACLE数据库(四)----子查询

    千次阅读 2021-03-15 21:23:12
    文章目录一、子查询作为条件二、子查询作为数据源三、子查询作为常量四、子查询进行增删改五、子查询分类1 语法2 注意 一、子查询作为条件 查询结果作为一个集合,跟在WHERE或HAVING字句中 1.查询SMITH所在部门的...
  • 注:数据库表格附录在文末 – 1、与张三同乡的男生姓名 step1:SELECT snativeplace FROM student WHERE sname=‘张三’ step2:SELECT sname FROM student WHERE ssex=‘男’ AND snativeplace=(step1) AND sname != ...
  • 使学生掌握 SQL Server 查询分析器的使用方法,加深对 SQL Transact-SQL 语言的查询语句的理解。熟练掌握简单表的数据查询、数据排序数据连接查询的操作方法。
  • 列子查询 ALL ANY SOME IN
  • 数据库 实验三 数据库查询和数据操纵

    千次阅读 多人点赞 2020-12-09 14:05:10
    ① 查询与“张志国”同一班级的学生信息(使用连接查询和子查询方式)。 子查询方式: SELECT * FROM Student WHERE Sname!='张志国' and DeptandClass=(SELECT DeptandClass FROM Student WHERE Sname='张志国' ...
  • 常用数据库查询语句

    千次阅读 2021-01-06 21:32:40
    常用数据库查询语句 基本查询 select 字段1, 字段2,…from 表名; 例如:select id , name from stu; 条件查询 select 字段1, 字段2,…from 表名 where 字段 关系符号 值 ; 关系符号 < = >= <= != 大于 等于 ...
  • 5 For each employee whose salary exceeds his manager’s salary, list the employee’s name and salary and the manager’s name and salary. select e.ename, e.sal, m.ename, m.sal from emp2016150071 e,...
  • mysql数据库sql优化——子查询优化

    千次阅读 2015-08-06 13:06:15
    1、什么是子查询、表关联查询: 子查询:是指在主sql语句中的select或where子句中使用select查询语句;select a.name,(select b.name from b where b.id=a.id) from a where a.name lik 'a%' 表关联查询:指多个表...
  • 达梦数据库查询语句

    千次阅读 2020-05-07 18:09:24
    DM_SQL语言是一种介于关系代数与关系演算之间的语言,其功能主要包括数据定义、 查询、操纵控制四个方面,通过各种不同的SQL语句来实现。按照所实现的功能,DM_SQL 语句分为以下几种: 用户、模式、基表、视图、...
  • PostgreSQL 数据库查询

    万次阅读 2018-05-26 14:54:09
    数据库查询一、基本查询语法:SELECT查询基本格式①、创建frui表create table fruit( f_id character(10) not null, s_id integer not null, f_name character(255) not null, f_price decimal(8,2) not null, ...
  • 数据库-高级查询

    千次阅读 2018-09-26 17:00:44
    Exists子查询就是用来判断某些条件是否满足(跨表),Exists是接在where之后,Exists返回的结果只有01。 EXISTS子查询的语法 SELECT …… FROM 表名 WHERE EXISTS(子查询); 子查询有返回结果: EXISTS...
  • 多表查询和子查询

    万次阅读 2016-11-13 17:59:11
    主要介绍了多表查询,以及在多表/单表查询时常用的函数关键字,介绍了如何使用子查询。 多表查询  employee表,departments表,localtions表结构 引例: select  last_name, department_...
  • 达梦数据库查询方法

    千次阅读 2020-12-20 19:49:33
    数据库查询的方法*查询数据是在数据库中常用的操作,我简单的分享一点相关的内容。基础查询的语法结构:select 列1,…,列n from 表[where条件] [group by 分组列1,…,列n] [having 筛选分组条件] [order by 排序 列1...
  • SQL语句基础-子查询

    万次阅读 多人点赞 2019-06-26 17:24:26
    子查询 在SQL语句中,一个select-from-where语句称为一个查询块。如果一个select语句嵌套在一...子查询语句一般出现在wherehaving子句中 写在where中的子句中的子查询一般有下面的形式 WHERE <列名> [NOT] ...
  • 1、查询部分分为主查询和子查询; 2、根据返回值的记录多少分为单行子查询和多行子查询;单行子查询用单行比较符=连接;多行子查询用多行比较符in连接; 3、子查询的内容可以放在FROM后面,也可以放在WHERE...
  • SQL中的子查询的使用

    万次阅读 多人点赞 2018-06-11 13:05:46
    这篇文章讲述了SQL中的子函数,如有错误或者不妥之处,还请各位大佬批评指正。 什么是子查询? 把一个查询的结果在另一个查询中使用就叫做子查询 ...返回的结果集为单个的子查询,叫做单行子查询。单行比较...
  • 数据库数据查询汇总

    千次阅读 多人点赞 2019-12-31 17:36:51
    前言 数据查询 单表查询 连接查询 ...这里总结了数据查询和数据更新,其中比较重要且有难度的是连接查询和嵌套查询。最后列出了我在项目中所遇到的问题,但是SQL语句并没有做多少优化。主要是想...
  • 数据库实验:数据库高级查询

    千次阅读 2020-06-10 23:58:49
    数据库实验:数据库高级查询 实验过程 (1) IN 嵌套查询 (2) 单层EXISTS 嵌套查询 (3) FROM 子句中的嵌套查询 (4) 集合查询(交) ...实验难点:相关子查询、多层EXIST 嵌套查询。 4、实验过
  • 这次,小白又发现HQL不支持子查询操作,那么如何解决这种需求呢? 如下:想把最大年龄的人取出来 这里如下语句无论是用=或者是in都不支持 select * from table where age =(in) (select max(age) from ta...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 216,931
精华内容 86,772
关键字:

数据库子查询和and