• sql--查询


    一般格式:

    SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…

    FROM <表名或视图名>[,<表名或视图名>]...

    [WHERE <条件表达式>]

    [GROUP BY <列名1> [HAVING <条件表达式>]]

    [ORDER BY <列名>2 [ASC|DESC] ]

    WHEREE的查询条件:

    确定范围:BETWEEN AND,NOT BETWEEN AND;

    确定集合:IN,NOT IN;

    字符匹配:LIKE,NOT LIKE;

    通配符:%和_

    %    与包含一个或多个字符的字符串匹配
     
    [ ]  与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。
     
    [^]  与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。
     

    例子:

    • WHERE FirstName LIKE '_im' 可以找到所有三个字母的、以 im 结尾的名字(例如,Jim、Tim)。
     
    • WHERE LastName LIKE '%stein' 可以找到姓以 stein 结尾的所有员工。
     
    • WHERE LastName LIKE '%stein%' 可以找到姓中任意位置包括 stein 的所有员工。
     
    • WHERE FirstName LIKE '[JT]im' 可以找到三个字母的、以 im 结尾并以 J 或 T 开始的名字(即仅有 Jim 和 Tim)
     
    • WHERE LastName LIKE 'm[^c]%' 可以找到以 m 开始的、后面的(第二个)字母不为 c 的所有姓。

    查姓欧阳且全名为3个汉字的学生的姓名: select name from student where name like '欧阳_ _':汉字占两个字符的位置 

    空值:IS NULLL,IS NOT NULL;

    多重条件:AND,OR

    集函数:

    COUNT([DISTINCT|ALL] *)

    COUNT([DISTINCT|ALL] <列名>)

    SUM([DISTINCT|ALL] <列名>)

    AVG([DISTINCT|ALL]<列名>)

    MAX([DISTINCT|ALL]|<列名>)

    MIN([DISTINCT|ALL]<列名>)

    嵌套查询

    一个SELECT_FROM_WHERE 语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHEREE子句或HAVING 短语的条件中的查询称为嵌套查询或子查询

    摘自:http://hi.baidu.com/i_ccboy/item/9a610a63ee4efa147ddecc2a

    带any嵌套查询
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>any(select sal from scott.emp where job='manager');
    等价于
    select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>2975 or sal>2850 or sal>2450

    带some嵌套查询
    select emp.empno,emp.ename,emp.sal from scott.emp where sal=some(select sal from scott.emp where job='manager');
    等价于
    select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
    select emp.empno,emp.ename,emp.sal from scott.emp where sal=2975 or sal=2850 or sal=2450
    注:any与some是等价的

    带all嵌套查询
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>all(select sal from scott.emp where job='manager');
    等价于
    select sal from scott.emp where job='manager' 结果为 sal:2975 2850 2450
    select emp.empno,emp.ename,emp.sal from scott.emp where sal>2975 and sal>2850 and sal>2450

      1. ALL与ANY的关系就是,AND 与 OR 的关系。
      2. ANY与SOME等价,据说搞这两个不同的词出来是为了迁就英语语法。例如,在用= ANY 的地方在(英语)语法上就应该是= SOME。
      3. IN 与 = ANY 等价,均表示,变量在(子查询)列表之中,即 a IN (table B) 表示 a = ANY B.b
      4. NOT IN 与 <> ALL 等价,而不等于<> ANY,前两者均表示,变量不在(子查询)列表之中,即 a NOT IN (table B) 表示 a <> ALL B.b。而如果a <> ANY B.b,则只要任意一个b<>a就true了。
      5. IN 与 EXISTS 的性能区别主要来自,IN 会编列子查询的每行记录,然后再返回,而EXISTS 则只要遇到第一个满足条件的记录就马上返回。
      6. NOT IN 与 NOT EXISTS 并不能完全等价,只有当子查询中,select 关键字后的字段有not null约束或者有这种暗示时才用NOT IN。
  • 相关阅读:
    教了公司新来的小姐姐这七种排序算法以及实现,她一脸崇拜的看着我
    历时两年零三个月,从刚毕业的外包到现在的阿里P7offer,我只做了这几件事
    深度分享:面试阿里,字节跳动,美团90%会被问到的HashMap知识
    备份一下我的.bash_aliases文件
    Error(10028):Can't resolve multiple constant drivers for net “ ” at **.v
    Error (10170): Verilog HDL syntax error at passwd.v(21) near text "if"; expecting an identifier ("if" is a reserved keyword ), or "endmodule", or a parallel statement
    正在从 Windows 应用商店下载... 无法从 Windows 应用商店下载。请检查网络连接。
    完全卸载win10上的Ubuntu子系统
    >>> print "hello" SyntaxError: Missing parentheses in call to 'print'
    深入Linux内核架构
  • 原文地址:https://www.cnblogs.com/nygfcn1234/p/3399743.html
Copyright © 2020-2023  润新知