zoukankan      html  css  js  c++  java
  • select子句和三种子查询

    一、select子句

    五种子句 Where、group by、having、order by、limit

    Where、group by、having、order by、limit运用的这个顺序不能变

    1.1 where子句

    ike 模糊匹配
    
    % 通配任意字符
    
    _ 通配单一字符
    
    In 有括号in (4,11); between between 100 and 500;
    
    select * from tmp where name is not null;
    
    select * from tmp where name is null;

    1.2 group子句

    语法:SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name;
    
    
    group分组与统计函数:(很占资源,能不用就不用,有个排序的过程)
    
    max()求最大
    
    count()求行数
    
    avg()平均值
    
    min()求最小
    
    sum()求总和;这是五个聚合函数。

    1.3 having子句

      having筛选结果集,在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。内存里面的结果集得使用having。

      HAVING 语法:

     

     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;

     

    where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

    having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

    having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:

    SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2

    1.4 order by子句(排序)

    语法:select goods_number,cat_id,shop_price from goods order by cat_id asc,shop_price desc;
    
    降序:desc
    
    升序:asc[默认]
    
    ORDER BY 语句用于根据指定的列对结果集进行排序。
    
    ORDER BY 语句默认按照升序对记录进行排序。

    1.5 limit子句

    limit限制取出条目;
    
    select goods_number,cat_id,shop_price from goods order by shop_price desclimit 5,9;
    
    当5是0的时候,可以不写。这个是第6个后面的九个数

    二、三种子查询

    2.1 where子查询

    把内层查询的结果当做是外层查询的比较条件

    详细: select 字段 from 表 where 内层结果

    执行: 先执行where后的语句,得到内层结果。再执行外层

     

    2.2 from子查询

    把内层查询结果当成临时表,供外层sql再次查询

    详细: select 字段 from (from子查询)

    执行: 先执行from后的语句,得到内层结果。再执行外层

    2.3 exists子查询

    把外层查询结果,拿到内层。看内层的查询是否成立。

    这个过程是从往外层的查询结果,一行一行代入内层中,判断是否成立。即exists后面的语句是否为真。如果为真,则显示代入的这一行。相反则不用。

    三、内联接查询(交集)

    在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

    默认内联接jion字符。

    外连接(全部并集)mysql不支持,oricle,sql server都可以。

    外连接:外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)

    语法:

    SELECT column_name(s)
    FROM table_name1
    INNER JOIN table_name2
    ON table_name1.column_name=table_name2.column_name

      JOIN: 如果表中有至少一个匹配,则返回行

      LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

      RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

      FULL JOIN: 只要其中一个表中存在匹配,就返回行

    四、引用两个表

    我们可以通过引用两个表的方式,从两个表中获取数据:

    谁订购了产品,并且他们订购了什么产品?

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons, Orders
    WHERE Persons.Id_P = Orders.Id_P
  • 相关阅读:
    2017 北京商改住政策
    python3 进程和线程(二)
    python3 pymysql
    SQL基本操作
    python3 paramiko
    python3 classmethod
    python3 property
    LVS负载均衡
    flume介绍及应用
    关系型数据库和非关系型数据库介绍及优劣势比较
  • 原文地址:https://www.cnblogs.com/xiugeng/p/8387904.html
Copyright © 2011-2022 走看看