精华内容
下载资源
问答
  • SQL 查询语句先执行 SELECT?兄弟你认真的么?

    万次阅读 多人点赞 2020-05-02 19:57:21
    SQL 查询的执行顺序是怎样的? 好像这个问题应该很好回答,毕竟自己已经写了无数个 SQL 查询了,有一些还很复杂的。还装不了这个逼了?! 但事实是,我仍然很难确切地说出它的顺序是怎样的。 言归正传,...

    小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里

    SQL 查询的执行顺序是怎样的?

    好像这个问题应该很好回答,毕竟自己已经写了无数个 SQL 查询了,有一些还很复杂的。还装不了这个逼了?!

    但事实是,我仍然很难确切地说出它的顺序是怎样的。

    言归正传,SELECT语句的完整语法如下:

    1. SELECT 
    2. DISTINCT <select_list>
    3. FROM <left_table>
    4. <join_type> JOIN <right_table>
    5. ON <join_condition>
    6. WHERE <where_condition>
    7. GROUP BY <group_by_list>
    8. HAVING <having_condition>
    9. ORDER BY <order_by_condition>
    10.LIMIT <limit_number>

     

     

    然而其执行顺序却是:

    FROM
    <表名> # 笛卡尔积
    ON
    <筛选条件> # 对笛卡尔积的虚表进行筛选
    JOIN <join, left join, right join...> 
    <join表> # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中
    WHERE
    <where条件> # 对上述虚表进行筛选
    GROUP BY
    <分组条件> # 分组
    <SUM()等聚合函数> # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的
    HAVING
    <分组筛选> # 对分组后的结果进行聚合筛选
    SELECT
    <返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外
    DISTINCT
    # 数据除重
    ORDER BY
    <排序条件> # 排序
    LIMIT
    <行数限制>

    • 其实,引擎在执行上述每一步时,都会在内存中形成一张虚拟表,然后对虚拟表进行后续操作,并释放没用的虚拟表的内存,以此类推。

    具体解释:(注:下面“VT”表示 → 虚拟表 virtual )

    1.  from:select * from table_1, table_2; 与 select * from table_1 join table_2; 的结果一致,都是表示求笛卡尔积;用于直接计算两个表笛卡尔积,得到虚拟表VT1,这是所有select语句最先执行的操作,其他操作时在这个表上进行的,也就是from操作所完成的内容
    2. on: 从VT1表中筛选符合条件的数据,形成VT2表;
    3. join: 将该 join 类型的数据补充到VT2表中,例如 left join 会将左表的剩余数据添加到虚表VT2中,形成VT3表;若表的数量大于2,则会重复1-3步
    4. where: 执行筛选,(不能使用聚合函数)得到VT4表;
    5. group by: 对VT4表进行分组,得到VT5表;其后处理的语句,如select,having,所用到的列必须包含在group by条件中,没有出现的需要用聚合函数;
    6. having: 筛选分组后的数据,得到VT6表;
    7. select: 返回列得到VT7表;
    8. distinct: 用于去重得到VT8表;
    9. order by: 用于排序得到VT9表;
    10. limit: 返回需要的行数,得到VT10;

    需要注意的是:

    • group by条件中,每个列必须是有效列,不能是聚合函数;
    • null值也会作为一个分组返回;
    • 除了聚合函数,select子句中的列必须在group by条件中;


    上述内容让我们知道一个查询会返回什么,同时,也回答了以下这些问题:

    • 可以在 GRROUP BY 之后使用 WHERE 吗?(不行,GROUP BY 是在 WHERE 之后!)
    • 可以对窗口函数返回的结果进行过滤吗?(不行,窗口函数是 SELECT 语句里,而 SELECT 是在 WHERE 和 GROUP BY 之后)
    • 可以基于 GROUP BY 里的东西进行 ORDER BY 吗?(可以,ORDER BY 基本上是在最后执行的,所以可以基于任何东西进行 ORDER BY)
    • LIMIT 是在什么时候执行?(在最后!)

    但是,数据库引擎并不一定严格按照这个顺序执行 SQL 查询,因为为了更快地执行查询,它们会做出一些优化,这些问题会在下方进行解释↓↓↓。


    SQL中的别名会影响SQL执行顺序么?

    如下方SQL所示:

    SELECT CONCAT(first_name, ' ', last_name) AS full_name, count(*)
    FROM table
    GROUP BY full_name

    从这个语句来看,好像 GROUP BY 是在 SELECT 之后执行的,因为它引用了 SELECT 中的一个别名。但实际上不一定要这样,数据库引擎会把查询重写成这样↓↓↓

    SELECT CONCAT(first_name, ' ', last_name) AS full_name, count(*)
    FROM table
    GROUP BY CONCAT(first_name, ' ', last_name)

    所以,这样 GROUP BY 仍然先执行。

    另外,数据库引擎还会做一系列检查,确保 SELECT 和 GROUP BY 中的东西是有效的,所以会在生成执行计划之前对查询做一次整体检查。

     

    数据库很可能不按正常顺序执行查询(优化)


    在实际当中,数据库不一定会按照 JOIN、WHERE、GROUP BY 的顺序来执行查询,因为它们会进行一系列优化,把执行顺序打乱,从而让查询执行得更快,只要不改变查询结果。

    这个查询说明了为什么需要以不同的顺序执行查询:

    SELECT * FROM
    dept d LEFT JOIN student s ON d.student_id = s.id
    WHERE s.name = '陈哈哈'


    如果只需要找出名字叫“陈哈哈”的学生信息,那就没必要对两张表的所有数据执行左连接,在连接之前先进行过滤,这样查询会快得多,而且对于这个查询来说,先执行过滤并不会改变查询结果。
     

    能看到这里的朋友都是有缘人了,为你的学习力点赞!希望大佬也能为小弟点赞支持一下哦!

    展开全文
  • SQL查询最大值,返回整行数据

    万次阅读 多人点赞 2019-06-21 20:05:09
    SQL查询最大值,返回整行数据 1、问题 部分数据如下,未完整展示。如何从 table_a 表中查询 p_postions 列的最大值对应的一行数据? 在这里插入图片描述 2、解答 方法1:先排序,再取第一条 SELECT * FROM table_a ...

    SQL查询最大值,返回整行数据

    1、问题

    部分数据如下,未完整展示。如何从 table_a 表中查询 p_postions 列的最大值对应的一行数据?
    在这里插入图片描述

    2、解答

    方法1:先排序,再取第一条

    SELECT * FROM table_a order by p_postions desc limit 1;
    

    查询结果如下:
    在这里插入图片描述
    经过评论区小伙伴的提醒,这种先排序的方式虽然语法简单,但时间复杂度较高,是 O(n*logn)。所以我们来看第二种方法。

    方法2:先查最大值,再找到对应行(推荐)

    参考:https://stackoverflow.com/questions/8387587/selecting-a-record-with-max-value

    这是一种时间复杂度为 O(n) 的方法:

    SELECT 
        *
    FROM
        table_a
    WHERE
        p_postions = (SELECT MAX(p_postions) FROM table_a)
    LIMIT 1;
    
    展开全文
  • MySQL常用SQL(含复杂SQL查询

    万次阅读 多人点赞 2018-04-09 08:26:59
    1、复杂SQL查询 1.1、单表查询 (1)选择指定的列 [例]查询全体学生的学号和姓名 select Sno as 学号,Sname as 姓名 from student; select Sno,Sname from student; (2)查询全部列 [例]查询全体学生的详细...

    1、复杂SQL查询

     

    1.1、单表查询

    (1)选择指定的列

    [例]查询全体学生的学号和姓名

     

    select Sno as 学号,Sname as 姓名 from student;
    select Sno,Sname from student;

    (2)查询全部列

    [例]查询全体学生的详细信息

    select * from student;

    (3)对查询后的指定列进行命名

    [例]查询全部学生的“姓名”及其“出生年”两列

    select Sname as 姓名,(2014-Sage) as 出生年 from student;
    select Sname ,(2014-Sage) from student;

    第一种:

    一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄

    datediff(year,birthday,getdate())

    例:birthday = '2003-3-8'

    getDate()= '2008-7-7'

    结果为:5

    这样结果是会返回该人员的大概年龄,但不精确.不会精确到月或日.

    按照上面测试的日期,该人员的实际年龄应该还不满5岁。在需要精确年龄的时候,就会有错.

    第二种:

      FLOOR(datediff(DY,birthday,getdate())/365.25)

    FLOOR函数:

    FLOOR(expr) 返回小于或等于expr的最大整数.FLOOR(1.1)返回1,FLOOR(-1.1)返回-2,FLOOR(1)返回1

    这样就可以精确算出,该人员当前实际年龄了.

    测试:

    birthday = '2000-7-8'

    getdate()= '2007-7-7'

    算出结果为:6

    (4)消除取值重复的行

    [例]查询选修了课程的学生学号

    select distinct Sno as 选修了课程的学生学号 from SC;
    select distinct Sno from SC;

     

    (5)选择表中若干元组(满足条件的)

     

    1.2、大小比较

        [例]查询计算机系(IS)全体学生名单

    select Sname as 学生姓名 from student where Sdept='IS';

     

        [例]查询全体20岁以下的学生姓名和年龄

     

    select Sname as 姓名,Sage as 年龄 from student where Sage<20;

    1.3、确定范围

     

        [例]查询所有在20到23岁(含20和23)的学生姓名、系别和年龄

     

    select Sname as 姓名,Sdept as 系别,Sage as 年龄 from student where Sage between20 and 23;

    注意between 小数 and 大数。

     

    1.4、in和not in确定集合

     

        [例]查询IS系和CS系的全体学生姓名和性别

    select Sname as 姓名,Ssex as 性别 from student where Sdept='IS' or Sdept='CS';
    select Sname as 姓名,Ssex as 性别 from student where Sdept in ('IS','CS');

        [例]查询既不属于IS系,也不属于MA系的学生姓名和年龄

    select Sname as 姓名,Sage as 年龄 from student where Sdept !='IS'and Sdept!='CS';
    select Sname as 姓名,Sage as 年龄 from student where Sdept not in('IS','MA');

    1.5、字符匹配(like % _ )

     

        [例]查询所有姓李的学生姓名和性别

    select Sname as 姓名,Ssex as 性别 from student where Sname like '李%';

        [例]查询所有“2002”年入学的学生学号、姓名和系别

    select Sno as 学号,Sname as 姓名,Sdept as 系别 from student where Sno like'2002%';

        [例]查询所有不姓“刘”的学生信息

    select * from student where Sname not like'刘%';

        [例]查询名称含有“数据”的课程号、课程名及学分

    select Cno as 课程号,Cname as 课程名,Ccredit as 学分 from course where Cname like '%数据%';

    总结:

    select * from course where cname like '%数据%';包含数据的字符串 
    select * from course where cname like '数据%';以数据开头的字符串
    select * from course where cname like '%数据'; 以数据结尾的字符串

     

    1.6、涉及空值的查询(is null)

     

        [例]查询没有先修课的课程号和课程名

    select Cno as 课程号,Cname as 课程名,Cpno from course where Cpno is null;

        [例]查询所有有成绩的学生学号、课程号及成绩

    select Sno as 学号,Cno as 课程号,Grade as 成绩 from SC where Grade is not null;

     

    1.7、查询结果排序(order by )

     

    [例]查询选修了3号课程的学生学号和成绩,结果按成绩降序排列。

    select Sno as 学号,Grade as 成绩 from SC where Cno=3 order by Grade desc;

    [例]查询选修了3号课程的学生学号和成绩,结果按成绩升序排列。

    select Sno as 学号,Grade as 成绩 from SC where Cno=3 order by Grade asc;

    1.8、聚集函数

    count、sum、avg、max、min

    [例]查询学生总数

    select count(*) as 学生总数 from student;

    [例]查询所有课程的总学分

    select sum(Ccredit) as 所有课程总学分 from course;

    [例]查询全体学生平均年龄

    select avg(Sage) as 平均年龄 from student;

    [例]查询1号课程的最高分

    select max(Grade) as 1号课程的最高分 from SC where Cno=1;

    1.9、分组统计(group by)

    [例]查询男女学生各有多少人。

    select Ssex as 性别,count(*) as 人数 from student group by Ssex;

    [例]查询每个课程的课程号和平均分。

    select Cno as 课程号,avg(Grade) as 平均分 from SC group by Cno;

    【例】查询选修了3门课程以上(含3门)的学生学号和选修课程数。

    select Sno as 学号 ,count(course.Cno) as 选修课程数
    From SC,course
    Where course.Cno=SC.Cno
    Group by Sno
    Having Count(course.Cno)>=3;

    having 关键字后面直接跟聚集函数

    在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    HAVING aggregate_function(column_name) operator value

    【例】查询选修了2门课程以上(含2门,但不含1号课程),学生学号和选修课程数。

    select Sno as 学号 ,count(course.Cno) as 选修课程数
    From SC,course
    Where course.Cno=SC.Cno and course.Cno !=1
    Group by Sno
    Having Count(course.Cno)>=2;

    【例】查询不及格门数2门以上的学生学号。

    Select Sno
    from sc
    Where sc.Grade<60
    Group by Sno
    Having count(Cno)>=2;

     

    【例】查询有2名以上(含2名)学生选修了的课程号和选修人数。

    Select Cno,count(Sno)
    From SC
    Group by Cno
    Having count(sno)>=2

     

    2、连接查询

    (1)等值与非等值连接查询

    [例]查询每个学生及其的选修课程情况

    select student.Sno as 学号,course.Cno as 选修课号,SC.Grade as 成绩 
    from student,course,SC 
    where student.Sno=SC.Sno and course.Cno=SC.Cno ;

     

    (2)自身连接

    [例]查询每个学生的间接选修课

    select SC.Sno as 学号,
    FIRST.Cname as 直接选修课,
    SECOND.Cname as 间接选修课
    from SC,
    course as FIRST,
    course as SECOND
    where FIRST.Cno=SC.Cno
    and FIRST.Cpno=SECOND.Cno;
    

    (3)外连接

    [例]查询所有学生选修课程情况(含没选修课程的学生)

    select student.Sno as 学号,
    Sname as 姓名,
    sc.Cno as 选修课程号
    from student 
    LEFT OUTER JOIN SC ON student.Sno=SC.Sno;

     join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据

    JOIN: 如果表中有至少一个匹配,则返回行
    LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    FULL JOIN: 只要其中一个表中存在匹配,就返回行
    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
    请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

     

    3 、嵌套查询

    (1)带有IN谓词的子查询( 属性 in (子查询的查询结果) )

    【例】查询与王敏同学在同一个系的学生信息。

    select *
    from student
    where Sdept in (
     select Sdept
     from student
     where Sname='王敏'
    );

     

    【例】查询不与王敏同学不在同一个系的学生信息。

    select *
    from student
    where Sdept not in (
     select Sdept
     from student
      whereSname='王敏'
    );

    【例】查询选修了课程名是“信息系统”的学生学号和姓名。

    select student.Sno as 学号, Sname as 姓名
    from student,SC
    where student.Sno=SC.Sno and Cno in (
     select Cno
     from course
     where Cname='信息系统'
    )

     

    【例】查询曾与刘晨一同上课的学生学号和姓名。(假设:一个课程只有一个上课班)

    select distinct student.Sno as 学号, Sname as 姓名
    from student,SC
    where student.Sno=SC.Sno and Cno in (
     select Cno
     from SC,student
     where SC.Sno=student.Sno and student.Sno in (
       select Sno
       from student
       where student.Sname='刘晨'
      )
    )

     

    • 内层in 查出刘晨的学号sno,外层in查出刘晨所上课程的课程号。

    (2)带有比较运算符的子查询(=,>=,<=,<>或!=)

    【例】查询与王敏同学在同一个系的所有学生信息  (=判断)

    select *
    from student
    where Sdept=(
       select Sdept
       from student
       where Sname='王敏'
    )

     

    【例】查询每个学生超过该课程最低分的课程号。(同类课程不是最低分的),子查询的结果返回一个数的时候,这个子查询就可以当一个数用?可以使用in符号,或者大于小于符号。

    select Cno
    from SC a
    where Grade> (
     select min(Grade)
     from SC b
     where a.Cno=b.Cno
    )

     

    【例】查询每个学生超过他选修课程平均成绩的课程号。

    select Cno
    from SC a
    where Grade> (
     select avg(Grade)
     from SC b
     where a.Sno=b.Sno
    )

     

    (3)带有ANY或ALL谓词的子查询

    • ANY表示任何一个,ALL表示所有,可以用在子查询的括号前面

    【例】查询其他系中比计算机系某一学生年龄小的学生姓名,性别、年龄和所在系。

    select Sname as 姓名,Ssex as 性别, Sage as 年龄, Sdept as 所在系
    from student
    where Sage <(
     select Sage
     from student
     where Sdept='CS'
    );
    

     

    【例】查询其他系中比计算机系所有年龄都小的学生姓名和年龄。

    select Sname as 姓名, Sage as 年龄
    from student
    where Sdept<>'CS' and  Sage <ALL (
     select Sage
     from student
     where Sdept='CS'
    );

     

    (4 )带有Exists谓词的子查询

    【例】查询所有选修了1号课程的学生姓名。

    select Sname as 姓名
    from student
    where Exists (
     select *
     from SC
     where Cno=1 and Sno=Student.Sno
    );

     

     

    4、集合查询

    (1)并UNION

    【例】 查询计算机系的学生及年龄不大于19岁的学生详细信息。

    select *
    from student
    where student.Sdept='CS'
    union
    select *
    from student
    where student.Sage<=19;

     

    (2)交INTERSECT

    【例】查询选修了1号课程的与年龄不大于19岁的 学生 详细信息 的交集。

    Select *
    from student,SC
    where student.Sno=SC.Sno and SC.Cno=1
    INTERSECT
    Select *
    from student
    where student.Sage<=19;

     

    (3)差EXCEPT

    【例】查询计算机科学系的学生与年龄不大于19岁的学生详细信息的差集。

    select *
    from student
    where student.Sdept='SC'
    EXCEPT
    select *
    from student
    where student.Sage<=19;

     

    展开全文
  • SQL查询语句中的 limit 与 offset 的区别

    万次阅读 多人点赞 2018-08-22 15:56:25
    SQL查询语句中的 limit 与 offset 的区别: limit y 分句表示: 读取 y 条数据 limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据 limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据 比如分页获取...

    SQL查询语句中的 limit 与 offset 的区别:

    • limit y 分句表示: 读取 y 条数据

    • limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据

    • limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据

    比如分页获取数据:

    第1页: 跳过0条数据,获取20条数据 (即1~20条)

    select * from testtable limit 0, 20; 
    select * from testtable limit 20 offset 0;  
    

    第2页: 跳过20条数据,获取20条数据 (即21~40条)

    select * from testtable limit 20, 20; 
    select * from testtable limit 20 offset 20;  
    

    第3页: 跳过40条数据,获取20条数据 (即41~60条)

    select * from testtable limit 40, 20;  
    select * from testtable limit 20 offset 40;   
    

    [END]

    展开全文
  • SQL查询优化

    万次阅读 多人点赞 2019-05-03 12:53:51
    SQL查询优化 一、获取有性能问题SQL的三种方法 通过用户反馈获取存在性能问题的SQL 通过慢查询日志获取存在性能问题的SQL 实时获取存在性能问题的SQL 二、慢查询日志介绍 1、使用慢查询日志获取有性能问题...
  • sql查询两张表不同的数据及sql查询语句优化, 方法一(推荐) WITH C AS ( SELECT Name FROM ConsumerCouponApply A WHERE NOT EXISTS ( SELECT 1 FROM ...
  • Hibernate SQLQuery原生sql查询

    万次阅读 2016-12-18 00:03:08
    有一半的时候, 我在Hibernate框架中使用的是SQL查询, 简单,可控, 原生. 使用起来风格原始,简单有效, 不增加学习成本,且利于多人开发的维护. Hibernate提供一个接口SQLQuery, 用于支持原生sql语句查询.
  • SQL查询使用IN

    千次阅读 2018-12-20 11:09:36
    SQL查询使用IN注意事项: 在进行SQL查询时,若使用IN进行条件筛选,注意IN的筛选有长度限制,不能超过1000条,若多于1000条则需要对条件进行分割,方法如下: parameter in (‘list901’,‘list902’,…,‘list1800...
  • SQL查询,子查询作为结果字段

    千次阅读 2019-08-23 10:30:16
    SQL查询,子查询作为结果字段, SELECT DISTINCT sp.comcode, sp.projectname, sp.projecttime, sp.busnature, sp.bustype, sl.concode, sl.conname, sl.contype, sl.conpartya, sl.contotal, sl....
  • MapInfo SQL查询

    千次阅读 2016-08-08 17:11:44
    由于上周连续被两朋友问起了MapInfo的SQL问题,多年没用一时间对她提出的问题挤破了脑子也没想起来,所以趁着周未的时间查询了MapBasic二次开发的资料和SQL语法,所谓好记性不如烂笔头,就顺便把MapInfo的SQL查询的...
  • SQL查询 多列合并成一行用逗号隔开

    万次阅读 2018-11-21 18:07:35
    SQL查询
  • JPA的SQL查询

    千次阅读 2018-09-08 14:22:18
    JAP通过SQL查询一般有两种方法:通过NamedQuery查询和使用@Query查询。 二 JPA的NamedQuery查询 1 说明 Spring Data JPA支持用JPA的NameQuery来定义查询方法,即一个名称映射一个查询语句。 2 定义 @...
  • Java 中如何使用 SQL 查询文本

    千次阅读 2019-01-31 09:13:42
     使用 SQL 查询语言,你只能查询位于数据库里面的数据,但是当你面对的数据是一些 Excel 表格或者 Txt 文本格式时,有什么办法能直接对着文件进行 Select 查询呢?去乾学院看个究竟:Java 中如何使用 SQL 查询文本!...
  • SQL 查询查询学生平均成绩

    千次阅读 2018-04-03 11:57:00
    编程萌新,因为遇到这么个SQL 查询的问题:在一张表A里有如下字段:学生姓名、学科名、学科成绩。写一条SQL 语句查出各科平均成绩并按学生姓名分组,按如下格式显示:学生姓名|语文|数学|英语。一开始遇到的时候挺懵...
  • Oracle 动态SQL实现SQL查询子集行转列

    千次阅读 2015-08-21 16:38:36
    动态SQL实现SQL查询子集行转列
  • Elasticsearch-sql 用SQL查询Elasticsearch 转自http://www.cnblogs.com/kangoroo/p/7273493.html Elasticsearch的查询语言(DSL)真是不好写,偏偏查询的功能千奇百怪,filter/query/match/agg/geo各种各样,不管你...
  • SQL查询编辑器

    千次阅读 2013-12-27 21:47:16
    SQL查询编辑器 先上图吧: 支持的功能: 1. 支持用户手动编辑查询条件,并可以同时以树形结构和文本的方式显示查询条件。 2. 支持从文本查询语句(sql语句)转换为树形展示,也可以从树形结构转换为文本查询语句...
  • 对于复杂的业务sql查询,可以考虑如下建议。 1.先通过sql查询出主表信息列表list. 2.for循环list,补充查询主表对应的子表信息。 3.在2的步骤中,可以使用多线程处理for查询。 可以参考如下: 其中&nbsp;con...
  • SQL查询中NULL的问题解决

    千次阅读 2017-05-28 19:51:11
    SQL查询中NULL的问题本文是在学习sql过程中遇到的一些问题,并对此部分作出总结。 SQL 中NULL的含义 SQL查询中关于NULL的注意事项 SQL 中NULL的含义 在SQL中,出现 NULL 原因可能: 1. 值未知; 2.值不存在; ...
  • SQL查询之分组后取每组的前N条记录

    万次阅读 多人点赞 2019-03-02 23:51:05
    SQL查询之分组后取每组的前N条记录 一、背景 资讯信息实体 code 说明 id 主键 title 资讯名称 views 浏览量 info_type 资讯类别 资讯分类实体 id ...
  • sql查询n天前的数据

    千次阅读 2019-08-14 11:43:45
    sql查询n天前的数据查询 >3天的数据查询3天前至今的数据 查询 >3天的数据 select created_at,vm_state,memory_mb,vcpus from nova.instances where created_at<curdate()-interval 3 day and vm_state!=...
  • sql查询数据库中所有表名

    万次阅读 2015-12-18 14:51:41
    SQL 查询所有表名: SELECT NAME FROM SYSOBJECTS WHERE TYPE='U' SELECT * FROM INFORMATION_SCHEMA.TABLES 查询表的所有字段名: SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID(' 表名' ) SELECT * FROM I
  • kettle中实现动态SQL查询

    万次阅读 2014-09-15 07:28:25
    详细说明kettle中两者方式实现动态查询,分别是占位符和变量方式,示例使用H2数据库,方便学习。
  • SQL查询学生的平均成绩及其名次

    千次阅读 2021-01-19 10:38:55
    Student(Sid,Sname,Sage,...SQL查询语句为: SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT Sid,AVG(score) 平均成绩 FROM SC GROUP BY Sid ) T1 WHERE 平均成绩 > T2.平均成绩) 名次, Sid 学生学...
  • 使用stuff + for xml path 解决sql查询 order by之后拼接列,并显示拼接后的字符串
  • sql查询语句去除重复列(行)

    万次阅读 多人点赞 2018-04-14 13:26:07
    有重复数据主要有一下几种情况:1.存在两条完全相同的纪录这是最简单的一种情况,用关键字distinct就可以去掉example: select distinct * from table(表名) where (条件)2.存在部分字段相同的纪录(有主键id即唯一...
  • SQL查询对分数进行排名

    千次阅读 2019-02-12 14:39:46
    编写SQL查询以对分数进行排名。 如果两个分数之间存在平局,则两者应具有相同的排名。 请注意,在平局之后,下一个排名数应该是下一个连续的整数值。 换句话说,等级之间不应该存在“漏洞”。 +----+-------+ | Id...
  • sqlalchemy 中使用 sql 查询数据库 背景 有时候 ,我们希望通过原生 sql查询数据库,这个时候 应该怎么办呢? sqlalchemy 已经给我们提供了这样的接口, 通过 text 就可以轻松实现了。 例1 #!/usr/bin/env ...
  • sql查询一段时间(日期)的数据

    千次阅读 2019-12-16 10:37:52
    最近又开始使用到sql查询,我需要查询一段时间的内容,数据库中的时间数据是这样的: 直接对date字段进行查询一段时间的数据,发现查询 出来的结果不对,后来弄清楚是因为数据存储时是根据字符串的形式存储的,所以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,650,913
精华内容 660,365
关键字:

sql查询