精华内容
下载资源
问答
  • 查询语句中select from where group by having order by的执行顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select–from–where–group by–having–order by 其中select和from是必须的,其.....

    本文转载自https://www.cnblogs.com/Jessy/p/3527091.html

    查询语句中select from where group by having order by的执行顺序

    1.查询中用到的关键词主要包含六个,并且他们的顺序依次为
    select–from–where–group by–having–order by

    其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序
    与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行
    from–where–group by–having–select–order by,
    from:需要从哪个数据表检索数据

    where:过滤表中数据的条件
    group by:如何将上面过滤出的数据分组
    having:对上面已经分组的数据进行过滤的条件

    select:查看结果集中的哪个列,或列的计算结果
    order by :按照什么样的顺序来查看返回的数据

    2.from后面的表关联,是自右向左解析的
    而where条件的解析顺序是自下而上的。

    也就是说,在写SQL文的时候,尽量把数据量小的表放在最右边来进行关联(用小表去匹配大表),
    而把能筛选出小量数据的条件放在where语句的最左边 (用小表去匹配大表)

    当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序

    使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。

    二、数据分组(group by ):

    select 列a,聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a

    group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组。

    三、使用having字句对分组后的结果进行筛选,语法和where差不多:having 条件表达式

    需要注意having和where的用法区别:

    1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。

    2.where肯定在group by 之前,即也在having之前。

    3.where后的条件表达式里不允许使用聚合函数,而having可以。

    四、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:

    1.执行where xx对全表数据做筛选,返回第1个结果集。

    2.针对第1个结果集使用group by分组,返回第2个结果集。

    4.针对第2个结集执行having xx进行筛选,返回第3个结果集。

    3.针对第3个结果集中的每1组数据执行select xx,有几组就执行几次,返回第4个结果集。

    5.针对第4个结果集排序。

    例子:

    完成一个复杂的查询语句,需求如下:

    按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩。 分析:

    1.要求显示学生姓名和平均分

    因此确定第1步select s_name,avg(score) from student

    2.计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩

    因此确定第2步 where score>=60 and s_name!=’jr’ 3.显示个人平均分

    相同名字的学生(同一个学生)考了多门科目 因此按姓名分组 确定第3步 group by s_name 4.显示个人平均分在70分以上

    因此确定第4步 having avg(s_score)>=70 5.按由高到低的顺序

    因此确定第5步 order by avg(s_score) desc

    五、索引

    1.索引是单独的数据库对象,索引也需要被维护。 2.索引可以提高查询速度,但会降增删改的速度。 3.通过一定的查询触发,并不是越多越好。 什么时候不适合用索引?

    1.当增删改的操作大于查询的操作时。 2.查询的语句大于所有语句的三分之一时。

    创建索引语法:create index 索引名 on 表明 (列名) 删除索引语法:drop index 索引名

    展开全文
  • FROM后面可以跟具体的表名,也可以跟一个查 询结果(此查询结果其实就是相当于一张表, 注意:必须要给它取一个别名) */ #给查询结果取别名 SELECT * FROM book, (SELECT 'a', 'b' FROM DUAL) AS testTable; SELECT ...
    /*
    FROM后面可以跟具体的表名,也可以跟一个查
    询结果(此查询结果其实就是相当于一张表,
    注意:必须要给它取一个别名)
    */
    #给查询结果取别名
    SELECT * FROM book, (SELECT 'a', 'b' FROM DUAL) AS testTable; 
    SELECT * FROM book, (SELECT '江西省', '赣州市', '于都县', 666) AS testTable;
    #AS关键字可以省略
    SELECT * FROM book, (SELECT 'hello', 'hi' FROM booktype) testTable;
    SELECT * FROM book, (SELECT * FROM booktype) AS testTable;
    #AS关键字可以省略
    SELECT * FROM book, (SELECT * FROM booktype) testTable;

    #FROM后面可以跟具体的表名,也可以跟一个查询结果
    SELECT 'a', 'b' FROM DUAL;
    (SELECT 'a', 'b' FROM DUAL);
    SELECT 'a', 'b'; #FROM DUAL可以省略
    #(SELECT 'a', 'b' FROM DUAL) AS testTable; #报错
    SELECT * FROM (SELECT 'a', 'b' FROM DUAL) AS testTable;
    SELECT *, 'a', 'c' FROM (SELECT 'a', 'b' FROM DUAL) AS testTable;
    #SELECT 'a', 'c', * FROM (SELECT 'a', 'b' FROM DUAL) AS testTable; #报错
    SELECT *, 'a', 'c' FROM (SELECT 'a', 'b' FROM DUAL) AS testTable;
    SELECT *, 'a', 'c' FROM (SELECT 'a', 'b') AS testTable;
    #AS可以省略
    SELECT *, 'a', 'c' FROM (SELECT 'a', 'b') testTable;
    #
    SELECT *, 'a', 'c' FROM (SELECT 'a' AS hello, 'b' AS hi) testTable;
    SELECT *, hello, hi, 'a', 'c' FROM (SELECT 'a' AS hello, 'b' AS hi) testTable;
    SELECT *, testTable.hello, hi, 'a', 'c' FROM (SELECT 'a' AS hello, 'b' AS hi) testTable;

    展开全文
  • 同样的一条sql语句select * from (select ename from emp);,mysql执行会报错,错误如下: [SQL] select * from (select ename from emp); [Err] 1248 - Every derived table must have its own alias 如果...

    我这里只谈论Oracle和mysql,因为我只会这两种数据库,O(∩_∩)O哈哈~

    结论:

    mysql中需要加,而Oracle中可以不加

    证明:

    同样的一条sql语句select * from (select ename from emp);,在mysql中执行会报错,错误如下:

    [SQL] select * from (select ename from emp);
    [Err] 1248 - Every derived table must have its own alias
    

    如果在Oracle中执行则不会报错,结果如下:
    在这里插入图片描述
    如果上面那条sql语句加上别名,那mysql中也可以正常执行了,如下所示:
    在这里插入图片描述
    而Oracle中就不用演示了,肯定可以正常执行

    展开全文
  • 原文:...select>from>where>group by>having>order by 其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行: f

    原文:https://www.cnblogs.com/Jessy/p/3527091.html

    一、SQL查询

    1.查询中用到的关键词主要包含六个,并且他们的顺序依次为:
    select>from>where>group by>having>order by

    其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行:
    from>where>group by>having>select>order by

    from:需要从哪个数据表检索数据

    where:过滤表中数据的条件
    group by:如何将上面过滤出的数据分组
    having:对上面已经分组的数据进行过滤的条件

    select:查看结果集中的哪个列,或列的计算结果
    order by:按照什么样的顺序来查看返回的数据

    2.from后面的表关联,是自右向左解析的;而where条件的解析顺序是自下而上的。

    也就是说,在写SQL语句的时候,尽量把数据量小的表放在最右边来进行关联(用小表去匹配大表),而把能筛选出小量数据的条件放在where语句的最左边 (用小表去匹配大表)。
    这里写图片描述

    使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。

    二、数据分组(group by):

    select 列a,聚合函数(聚合函数规范) from 表名 where 过滤条件 group by 列a

    group by子句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by对筛选后的结果进行分组。

    三、使用having字句对分组后的结果进行筛选,语法和where差不多:having 条件表达式

    需要注意having和where的用法区别:

    1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。

    2.where肯定在group by 之前,即也在having之前。

    3.where后的条件表达式里不允许使用聚合函数,而having可以。

    四、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:

    1.执行where xx对全表数据做筛选,返回第1个结果集。

    2.针对第1个结果集使用group by分组,返回第2个结果集。

    3.针对第2个结集执行having xx进行筛选,返回第3个结果集。

    4.针对第3个结果集中的每1组数据执行select xx,有几组就执行几次,返回第4个结果集。

    5.针对第4个结果集排序。

    例子:

    完成一个复杂的查询语句,需求如下:

    按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩。 分析:

    1.要求显示学生姓名和平均分

    因此确定第1步select s_name,avg(score) from student

    2.计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩

    因此确定第2步 where score>=60 and s_name!=’jr’

    3.显示个人平均分

    相同名字的学生(同一个学生)考了多门科目 因此按姓名分组 确定第3步 group by s_name 4.显示个人平均分在70分以上

    因此确定第4步 having avg(s_score)>=70 5.按由高到低的顺序

    因此确定第5步 order by avg(s_score) desc

    五、索引

    1.索引是单独的数据库对象,索引也需要被维护。

    2.索引可以提高查询速度,但会降增删改的速度。

    3.通过一定的查询触发,并不是越多越好。什么时候不适合用索引?
    1).当增删改的操作大于查询的操作时。
    2).查询的语句大于所有语句的三分之一时。

    创建索引语法:create index 索引名 on 表名 (列名)
    删除索引语法:drop index 索引名

    展开全文
  • 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 条数据 比如分页获取...
  • mysql查询中使用自定义变量和条件语句实现编程思维的查询语句 自定义变量和条件语句语法规则 自定义变量规则 @变量名:=固定值 | 函数调用 | 条件语句 别名 mysql> SELECT @min_price:=MIN(price),@max_...
  • sqlwhere查询语句中使用变量

    万次阅读 2018-04-10 18:10:03
    好气啊,sql语句在查询变量时一直使用的是字符串模板${变量},可是这次查询一个日期时,却失败了,如:2018-04-13 最后在网上终于找到解决办法了 如下: "select * from records where brr_time='"+ ...
  • Mybatis使用IN语句查询

    万次阅读 多人点赞 2018-03-23 16:45:03
    一、简介SQL语法如果我们想使用in的话直接可以像如下一样使用:select * from HealthCoupon where useType in ( '4' , '3' )但是如果MyBatis的使用in的话,像如下去做的话,肯定会报错: Map<String, ...
  • sqlwhere查询语句中使用文本值、数值、变量
  • sql from后面跟select语句查询

    千次阅读 2019-09-01 09:42:55
    工作碰到这样一种sql写法:select id,name from (select id,name from student where name = '') as s;一直没有明白其中from后面子查询的意思,今天特意找资料看了看,将心得写下来: 其实就是把子查询的...
  • ORACLE分页查询SQL语句(最有效的分页)

    万次阅读 多人点赞 2018-11-01 16:18:24
    ** 一、效率高的写法 ** 1.无ORDER BY排序的写法。...即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ...
  • 关于SQL查询语句中的LIKE模糊查询的解释

    万次阅读 多人点赞 2018-03-07 15:23:46
    SQL语言,LIKE语句有时候有着强大的作用。LIKE语句的语法格式为:select * from 表名 where 字段名 like 对应值(字符串);注:主要是针对字符型字段的,它的作用是一个字符型字段列检索包含对应字符串的。...
  • java SQL查询语句

    千次阅读 2019-03-14 15:39:18
    SQL查询语句 查询指定字段信息 select 字段1,字段2,…from 表名; 例如: select id,name from zhangwu; 查询所有字段 select * from 表名; 例如: select * from zhangwu; 注意:使用&...
  • JAVASQL查询语句大全,select多表查询,各种查询

    万次阅读 多人点赞 2019-03-05 20:04:42
    以员工表:emp 为例 id name gender birthday dept ...基本查询查询emp表的所有员工信息 ...select * from emp;...– 查询emp表的所有员工的姓名、薪资、奖金 select name,sal,bonus from emp;...– 查询emp表...
  • Sql语句中select from等结构的执行顺序

    千次阅读 2018-09-04 10:00:50
    sql语句的分类:  DDL:数据库定义语言,...DQL:数据库查询语言,查询数据库的记录(select from) DCL:数据库控制语言,数据库权限和安全级别的控制(grant revoke) sql语句的编写顺序: SQL语句的编写...
  • sqlserver常用查询语句

    万次阅读 2017-11-24 18:21:48
    --查询语句 SELECT * FROM BASE_USER; --查询前10条语句 SELECT TOP 10 * FROM BASE_USER; --允许脏读查询 SELECT * FROM BASE_USER WITH(NOLOCK); --获取当前数据库名称 SELECT DB_NAME(dbid) as dbName FROM ...
  • SQL查询语句中的 limit offset

    千次阅读 2018-08-06 19:03:18
    经常用到数据库中查询中间几条数据的需求 比如下面的sql语句: ① selete * from testtable limit 2,1; ② selete * from testtable limit 2 offset 1; 注意: 1.数据库数据计算是从0开始的 2.offset X是跳...
  • 1.select子句用于选择制定的属性或者直接选择某个尸体,当然select选择的属性必须是from后持久化类包含的属性。例如: select 0.name from Owner o 2.select可以选择任意属性,即不仅... 通常情况下,使用Sele
  • 数据库基础:select基本查询语句

    万次阅读 多人点赞 2019-03-20 13:40:05
    数据库基本查询语句规范为:select 区域 from 表名 查询指定表 select * from 表名 *:代表所有列 示例:select * from TL_REQUEST 查询指定列 select 列名 from 表名 列名:代表从指定的列名查找 ,:...
  • 学习了韩顺平老师sql语句复杂查询之后,受益颇深。以下列举一些涉及单表和多表的基本查询语句例子,简单实用。由于本人是初学者,不足之处恳请大家斧正!附:韩顺平sql语句复杂查询地址...
  • MySQL查询语句in子查询的优化

    万次阅读 多人点赞 2018-08-28 16:16:07
    项目有需要,使用MySQL的in子查询查询符合in子查询集合条件的数据,但是没想到的是,MySQL的in子查询会如此的慢,让人无法接收,于是上网搜索解决办法,下面记录下: 一、原始in子查询 SELECT * FROM basic_...
  • 模糊查询:就是sql的select * from table where xx like yy的样式的sql语句。 db.user.find({"name":/ab/}) 这样,可以查出所有包含有"ab"字符串的数据了。 等同于select * from user where name like "ab" 说...
  • 将表字段参数换成实际的字段就可以,问题出“如果将表名,字段名做为参数传递到Sql Server”  create function backtoCount(@tablename varchar(50))   returns int  as  begin  declare @...
  • 今天用mybatis查询语句的时候,控制台输出的sql语句可以mysql可以正确执行,但是查询出来就是没有数据。 原查询语句如下(为展示问题明确,将sql进行了简化): select id="getListByQueryValue" ...
  • Oracle查询语句

    千次阅读 2019-04-08 08:21:51
    Oracle查询语句 Select 选择哪一个列,from哪一个表 例如:我要查员工姓名(last_name),员工姓名employees表里,实现代码以及输出截图: Select last_name from employees; 如果要查询两个列的话要用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,374,822
精华内容 549,928
关键字:

在查询语句中的from