站保站

服务市场
  • 网站市场
  • 单机游戏
  • 平台大厅
  • 转让市场
  • 发卡市场
  • 广告市场
  • 下载市场
  • 收录市场
  • 本站平台
    平台客服
    微信Q群



    平台微博/weibo    平台微信/公众号    平台抖音/快手   
    曝光台    保障    地图   
    上传资源 快速赚钱
    站保站    登录      |  注册  |  

    只需一步,快速开始!

     找回密码   |   协议
    热门搜索: 网站开发 App报毒 挖矿源码 代办资质

    SQL语法

    • 时间:2020-10-27 10:18 编辑:92914 来源: 阅读:49
    • 扫一扫,手机访问
    摘要:

    SQL SELECT DISTINCT 语句

    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。

    关键词 DISTINCT 用于返回唯一不同的值。

    SELECT DISTINCT 列名称 FROM 表名称
    
    • 1

    SQL ORDER BY 子句

    ORDER BY 语句
    ORDER BY 语句用于根据指定的列对结果集进行排序。

    ORDER BY 语句默认按照升序对记录进行排序。

    如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
    以逆字母顺序显示公司名称:

    SELECT Company, OrderNumber 
    FROM Orders 
    ORDER BY Company DESC
    
    • 1
    • 2
    • 3

    SQL TOP 子句

    TOP 子句用于规定要返回的记录的数目。

    对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
    limit用于分页
    注释:并非所有的数据库系统都支持 TOP 子句。

    SELECT column_name(s)
    FROM table_name
    LIMIT number
    
    • 1
    • 2
    • 3
    SELECT *
    FROM Persons
    LIMIT 5
    
    • 1
    • 2
    • 3

    以下的两种方式均表示取2,3,4三条条数据。
    1.select* from test LIMIT 1,3;
    当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量。

    2.select * from test LIMIT 3 OFFSET 1;(在mysql 5以后支持这种写法)
    当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。

    SQL JOIN

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

    1. SQL INNER JOIN 关键字
      在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
      INNER JOIN 与 JOIN 是相同的。
    SELECT column_name(s)
    FROM table_name1
    INNER JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    
    • 1
    • 2
    • 3
    • 4

    内连接(INNER JOIN)实例
    现在,我们希望列出所有人的定购。

    您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, 
    Persons.FirstName, 
    Orders.OrderNo
    FROM Persons
    INNER JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    原始表
    结果集
    INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 “Persons” 中的行在 “Orders” 中没有匹配,就不会列出这些行

    1. SQL LEFT JOIN 关键字
      LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
      在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
    SELECT column_name(s)
    FROM table_name1
    LEFT JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    
    • 1
    • 2
    • 3
    • 4

    左连接(LEFT JOIN)实例
    现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。

    您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, 
    Persons.FirstName, 
    Orders.OrderNo
    FROM Persons
    LEFT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果集
    LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

    1. SQL RIGHT JOIN 关键字
      RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
      在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
    SELECT column_name(s)
    FROM table_name1
    RIGHT JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    
    • 1
    • 2
    • 3
    • 4

    右连接(RIGHT JOIN)实例
    现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。

    您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, 
    Persons.FirstName, 
    Orders.OrderNo
    FROM Persons
    RIGHT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果集
    RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。

    1. SQL FULL JOIN 关键字
      只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
      在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
      全连接(FULL JOIN)实例
    SELECT column_name(s)
    FROM table_name1
    FULL JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    
    • 1
    • 2
    • 3
    • 4

    现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。

    您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, 
    Persons.FirstName, 
    Orders.OrderNo
    FROM Persons
    FULL JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果集
    FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 “Persons” 中的行在表 “Orders” 中没有匹配,或者如果 “Orders” 中的行在表 “Persons” 中没有匹配,这些行同样会列出。

    SQL COUNT() 函数

    • SQL COUNT(column_name) 语法
      COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
     SELECT COUNT(column_name) FROM table_name
    
    • 1

    现在,我们希望计算客户 “Carter” 的订单数。

    我们使用如下 SQL 语句:

    SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
    WHERE Customer='Carter'
    
    • 1
    • 2

    以上 SQL 语句的结果是 2,因为客户 Carter 共有 2 个订单。

    • SQL COUNT() 语法
      COUNT(
      ) 函数返回表中的记录数:
    SELECT COUNT(*) FROM table_name
    
    • 1

    这是表中的总行数。

    SELECT COUNT(*) AS NumberOfOrders FROM Orders
    
    • 1
    • SQL COUNT(DISTINCT column_name) 语法
      COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
      SELECT COUNT(DISTINCT column_name) 
      FROM table_name
    
    • 1
    • 2

    现在,我们希望计算 “Orders” 表中不同客户的数目。

    SELECT COUNT(DISTINCT Customer) 
    AS NumberOfCustomers FROM Orders
    
    • 1
    • 2

    SQL SUM() 函数

    SELECT SUM(column_name) FROM table_name
    
    • 1

    SQL GROUP BY 语句

    合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。
    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
    大表一般用distinct效率不高,大数据量的时候都禁止用distinct,建议用group by解决重复问题。

    SQL GROUP BY 语法:

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    
    • 1
    • 2
    • 3
    • 4

    SQL GROUP BY 实例:
    "Orders" 表
    现在,我们希望查找每个客户的总金额(总订单)。

    我们想要使用 GROUP BY 语句对客户进行组合。

    我们使用下列 SQL 语句:

    SELECT Customer,SUM(OrderPrice) FROM Orders
    GROUP BY Customer
    
    • 1
    • 2

    结果集
    让我们看一下如果省略 GROUP BY 会出现什么情况:

    SELECT Customer,SUM(OrderPrice) FROM Orders
    
    • 1

    结果集
    那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。“SUM(OrderPrice)” 返回一个单独的值(“OrderPrice” 列的总计),而 “Customer” 返回 6 个值(每个值对应 “Orders” 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。
    GROUP BY 一个以上的列
    我们也可以对一个以上的列应用 GROUP BY 语句,就像这样:

    SELECT Customer,OrderDate,SUM(OrderPrice) 
    FROM Orders
    GROUP BY Customer,OrderDate
    
    • 1
    • 2
    • 3

    SQL 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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    SQL HAVING 实例
    Order表

    • 现在,我们希望查找订单总金额少于 2000 的客户。

      我们使用如下 SQL 语句:

    SELECT Customer,SUM(OrderPrice) FROM Orders
    GROUP BY Customer
    HAVING SUM(OrderPrice)<2000
    
    • 1
    • 2
    • 3

    结果集

    • 现在我们希望查找客户 “Bush” 或 “Adams” 拥有超过 1500 的订单总金额。

      我们在 SQL 语句中增加了一个普通的 WHERE 子句:

    SELECT Customer,SUM(OrderPrice) FROM Orders
    WHERE Customer='Bush' OR Customer='Adams'
    GROUP BY Customer
    HAVING SUM(OrderPrice)>1500
    
    • 1
    • 2
    • 3
    • 4

    结果集

    SQL UNION 和 UNION ALL 操作符

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

    • SQL UNION 语法
      默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
     SELECT column_name(s) FROM table_name1
    UNION
    SELECT column_name(s) FROM table_name2
    
    • 1
    • 2
    • 3
    • SQL UNION ALL 语法
      UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。
    SQL Statement 1
    UNION ALL
    SQL Statement 2
    
    • 1
    • 2
    • 3

    实例:
    原始表

    • 使用 UNION 命令
      实例
      列出所有在中国和美国的不同的雇员名:
    SELECT E_Name FROM Employees_China
    UNION
    SELECT E_Name FROM Employees_USA
    
    • 1
    • 2
    • 3

    结果
    注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。

    • 使用 UNION ALL 命令
      实例:
      列出在中国和美国的所有的雇员:
    SELECT E_Name FROM Employees_China
    UNION ALL
    SELECT E_Name FROM Employees_USA 
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    • 全部评论(0)
    • 最新

    信息加载中,请等待

    微信客服(速回)

    微信客服(慢回)



    企业微信客服二维码
    联系我们
    平台客服: 平台QQ客服

    平台电话:400电话迁移中!

    平台邮箱:28292383@qq.com

    工作时间:周一至周五:早10:00 晚:18:00

    营业执照     网站ICP备案:鲁ICP备20027607号-1     鲁公网安备:37068702000078号     增值电信业务经营许可证、在线数据与交易处理业务许可证:鲁B2-20200681      © 2016-2024 站保站  https://www.zhanbaozhan.com/ 版权所有!      平台规范:   关于我们   广告合作   隐私条款   免责声明   法律声明   服务条款   网站地图   平台工单!