2、SQL查询-简单查询

简介: 2、SQL查询-简单查询

1、select查询语句

一、简介

SQL SELECT 语句

SELECT 语句用于从表中选取数据。

结果被存储在一个结果表中(称为结果集)。

1. SQL SELECT 语法

SELECT 列名称 FROM 表名称

以及:

SELECT * FROM 表名称

- 注释:SQL 语句对大小写不敏感。SELECT 等效于 select。

二、示例

- “Persons” 表:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

1. 获取名为 “LastName” 和 “FirstName” 的列的内容(从名为 “Persons” 的数据库表)

SELECT LastName,FirstName FROM Persons

- 结果

 | LastName | FirstName |

 | — | — |

 | Adams | John |

 | Bush | George |

 | Carter | Thomas |

1. 从 “Persons” 表中选取所有的列。

使用符号 * 取代列的名称,就像这样:

SELECT * FROM Persons

- 结果:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

 2、distinct查询去重语句

  一、简介

 1. SQL SELECT DISTINCT 语句

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

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

 1. 语法:

 SELECT DISTINCT 列名称 FROM 表名称

 二、示例

 - "Orders"表:

   | Company | OrderNumber |

   | — | — |

   | IBM | 3532 |

   | W3School | 2356 |

   | Apple | 4698 |

   | W3School | 6953 |

 1. 从 “Company” 列中选取所有的值,我们需要使用 SELECT 语句:

 SELECT Company FROM Orders

 - 结果

   | Company |

   | — |

   | IBM |

   | W3School |

   | Apple |

   | W3School |

 1. 从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:

 SELECT DISTINCT Company FROM Orders

 - 结果:

   | Company |

   | — |

   | IBM |

   | W3School |

   | Apple |

3、top返回指定记录数

一、简介

1. TOP 子句

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

对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

1. 用法

SELECT column_name(s)  FROM table_name  LIMIT number

二、示例

- 原始的Persons 表:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

 | 4 | Obama | Barack | Pennsylvania Avenue | Washington |

1. SQL TOP 实例

- 现在,我们希望从上面的 “Persons” 表中选取头两条记录。

- 我们可以使用下面的 SELECT 语句:

- SELECT TOP 2 * FROM Persons

- 结果:

 | **Id** | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

1. SQL TOP PERCENT 实例

- 现在,我们希望从上面的 “Persons” 表中选取 50% 的记录。

- 我们可以使用下面的 SELECT 语句:

- SELECT TOP 50 PERCENT * FROM Persons

- 结果:

 | **Id** | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 4、Alias别名

 1. SQL Alias

 - 表的 SQL Alias 语法

 - SELECT column_name(s)  FROM table_name  AS alias_name

 - 列的 SQL Alias 语法

 - SELECT column_name AS alias_name FROM table_name

 1. Alias 实例: 使用表名称别名

 - 假设我们有两个表分别是:“Persons” 和 “Product_Orders”。我们分别为它们指定别名 “p” 和 “po”。

 - 现在,我们希望列出 “John Adams” 的所有定单。

 - 我们可以使用下面的 SELECT 语句:

 - SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po  WHERE p.LastName=‘Adams’ AND p.FirstName=‘John’

 - 不使用别名的 SELECT 语句:

 - SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName  FROM Persons, Product_Orders  WHERE Persons.LastName=‘Adams’ AND Persons.FirstName=‘John’

 - 从上面两条 SELECT 语句您可以看到,别名使查询程序更易阅读和书写。

 1. Alias 实例: 使用一个列名别名

 - 表 Persons:

   | Id | LastName | FirstName | Address| City |

   | — | — | — | — | — |

   | 1 | Adams | John | Oxford Street | London |

   | 2 | Bush | George | Fifth Avenue | New York |

   | 3 | Carter | Thomas | Changan Street | Beijing |

 - SQL:

 - SELECT LastName AS Family, FirstName AS Name  FROM Persons

 - 结果:

   | Family | Name |

   | — | — |

   | Adams | John |

   | Bush | George |

   | Carter | Thomas |

5、where筛选子句

1. WHERE 子句

- 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。

- 语法

- SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

- 下面的运算符可在 WHERE 子句中使用:

 | 操作符 | 描述|

 | — | — |

 | = | 等于 |

 | <> | 不等于 |

 | > | 大于 |

 | < | 小于 |

 | >= | 大于等于 |

 | <= | 小于等于 |

 | BETWEEN | 在某个范围内 |

 | LIKE | 搜索某种模式 |

1. where子句对行记录进行过滤

- 常用算数运算符:+,-,*, / 对应 加,减,乘,除

- 常用逻辑运算符:and (而且);or(或者);not (非)

- 常用比较运算符:

- = 等于;!=或<>不等于;>大于;<小于;>=大于等于;<=小于等于;

- is null为空值;is not null为非空值;

- in (值列表) 在值列表中;not in (值列表)不在值列表中;

- between 低值 and 高值 (包含低值和高值)在低值和高值之间;

- not between 低值 and 高值 (包含低值和高值)不在低值和高值范围内;

- like ‘通配符’按照通配符进行匹配;

- 常用通配符:% 匹配0个或任意多个字符;_ 匹配任意1个字符

- 运算符优先级

- 各类运算符之间存在优先级,不用死记,只记住括号( )的优先级最高即可

- **注释:**在某些版本的 SQL 中,操作符 <> 可以写为 !=。

1. 使用 WHERE 子句

- 如果只希望选取居住在城市 “Beijing” 中的人,我们需要向 SELECT 语句添加 WHERE 子句:

- SELECT * FROM Persons WHERE City=‘Beijing’

- “Persons” 表

 | **LastName** | **FirstName** | **Address** | **City** | **Year** |

 | — | — | — | — | — |

 | Adams | John | Oxford Street | London | 1970 |

 | Bush | George | Fifth Avenue | New York | 1975 |

 | Carter | Thomas | Changan Street | Beijing | 1980 |

 | Gates | Bill | Xuanwumen 10 | Beijing | 1985 |

- 结果:

 | **LastName** | **FirstName** | **Address** | **City** | **Year** |

 | — | — | — | — | — |

 | Carter | Thomas | Changan Street | Beijing | 1980 |

 | Gates | Bill | Xuanwumen 10 | Beijing | 1985 |

1. 引号的使用

- 请注意,我们在例子中的条件值周围使用的是单引号。

- SQL 使用单引号来环绕**文本值**(大部分数据库系统也接受双引号)。如果是**数值**,请不要使用引号。

- 文本值:

- 这是正确的:

 SELECT * FROM Persons WHERE FirstName=‘Bush’

- 这是错误的:

 SELECT * FROM Persons WHERE FirstName=Bush

- 数值:

- 这是正确的:

 SELECT * FROM Persons WHERE Year>1965

- 这是错误的:

 SELECT * FROM Persons WHERE Year>‘1965’

6、and&or条件运算符

1. AND 和 OR 运算符

- AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

- 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

- 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

1. 原始的表 (用在例子中的):

 | LastName | FirstName | **Address** | **City** |

 | — | — | — | — |

 | Adams | John | Oxford Street | London |

 | Bush | George | Fifth Avenue | New York |

 | Carter | Thomas | Changan Street | Beijing |

 | Carter | William | Xuanwumen 10 | Beijing |

2. AND 运算符实例

- 使用 AND 来显示所有姓为 “Carter” 并且名为 “Thomas” 的人:

- SELECT * FROM Persons WHERE FirstName=‘Thomas’ AND LastName=‘Carter’

- 结果:

 | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — |

 | Carter | Thomas | Changan Street | Beijing |

1. OR 运算符实例

- 使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人:

- SELECT * FROM Persons WHERE firstname=‘Thomas’ OR lastname=‘Carter’

- 结果:

 | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — |

 | Carter | Thomas | Changan Street | Beijing |

 | Carter | William | Xuanwumen 10 | Beijing |

1. **结合 AND 和 OR 运算符**

- 我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):

- SELECT * FROM Persons WHERE (FirstName=‘Thomas’ OR FirstName=‘William’) AND LastName=‘Carter’

- 结果:

 | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — |

 | Carter | Thomas | Changan Street | Beijing |

 | Carter | William | Xuanwumen 10 | Beijing |

7、like操作符

1. LIKE 操作符

- LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

- SQL LIKE 操作符语法

- SELECT column_name(s)  FROM table_name WHERE column_name LIKE pattern

1. 原始的表 (用在例子中的):

- Persons 表:

 | **Id** | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

1. LIKE 操作符实例

- 例子 1

- 现在,我们希望从上面的 “Persons” 表中选取居住在以 “N” 开始的城市里的人:

- 我们可以使用下面的 SELECT 语句:

- SELECT * FROM Persons

 WHERE City LIKE ‘N%’

- 提示:“%” 可用于定义通配符(模式中缺少的字母)。

- 结果集:

 | **Id** | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — | — |

 | 2 | Bush | George | Fifth Avenue | New York |

- 例子 2

- 接下来,我们希望从 “Persons” 表中选取居住在以 “g” 结尾的城市里的人:

- 我们可以使用下面的 SELECT 语句:

- SELECT * FROM Persons

 WHERE City LIKE ‘%g’

- 结果集:

 | **Id** | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — | — |

 | 3 | Carter | Thomas | Changan Street | Beijing |

- 例子 3

- 接下来,我们希望从 “Persons” 表中选取居住在包含 “lon” 的城市里的人:

- 我们可以使用下面的 SELECT 语句:

- SELECT * FROM Persons WHERE City LIKE ‘%lon%’

- 结果集:

 | **Id** | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

- 例子 4

- 通过使用 NOT 关键字,我们可以从 “Persons” 表中选取居住在**不包含** “lon” 的城市里的人:

- 我们可以使用下面的 SELECT 语句:

- SELECT * FROM Persons WHERE City NOT LIKE ‘%lon%’

- 结果集:

 | **Id** | **LastName** | **FirstName** | **Address** | **City** |

 | — | — | — | — | — |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

8、通配符

一、简介

1. SQL 通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。

SQL 通配符必须与 LIKE 运算符一起使用。

1. 在 SQL 中,可使用以下通配符:

 | 通配符 | 描述 |

 | — | — |

 | % | 替代一个或多个字符 |

 | _ | 仅替代一个字符 |

 | [charlist] | 字符列中的任何单一字符 |

 | [^charlist]

 或者

 [!charlist] | 不在字符列中的任何单一字符 |

二、示例

- 原始的Persons 表:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

1. 使用 % 通配符

从上面的 “Persons” 表中选取居住在以 “Ne” 开始的城市里的人:

```

SELECT * FROM Person  WHERE City LIKE 'Ne%'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 2 | Bush | George | Fifth Avenue | New York |

1. 从 “Persons” 表中选取居住在包含 “lond” 的城市里的人:

```

SELECT * FROM Persons WHERE City LIKE '%lond%'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

1. 使用 _ 通配符

从上面的 “Persons” 表中选取名字的第一个字符之后是 “eorge” 的人:

```

SELECT * FROM Persons  WHERE FirstName LIKE '_eorge'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 2 | Bush | George | Fifth Avenue | New York |

1. 从 “Persons” 表中选取的这条记录的姓氏以 “C” 开头,然后是一个任意字符,然后是 “r”,然后是任意字符,然后是 “er”

```

SELECT * FROM Persons  WHERE LastName LIKE 'C_r_er'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 3 | Carter | Thomas | Changan Street | Beijing |

1. **使用 [charlist] 通配符**

从上面的 “Persons” 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人:

```

SELECT * FROM Persons WHERE City LIKE '[ALN]%'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

1. 从上面的 “Persons” 表中选取居住的城市**不以** “A” 或 “L” 或 “N” 开头的人:

```

SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 3 | Carter | Thomas | Changan Street | Beijing |

9、in操作符

一、简介

1. IN 操作符

IN 操作符允许我们在 WHERE 子句中规定多个值。

1. SQL IN 语法

```

SELECT column_name(s)  FROM table_name  WHERE column_name IN (value1,value2,...)

```

二、示例

- Persons 表:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

1. 从上表中选取姓氏为 Adams 和 Carter 的人:

我们可以使用下面的 SELECT 语句:

```

SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 3 | Carter | Thomas | Changan Street | Beijing |

10、between范围

一、简介

1. BETWEEN 操作符

操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

1. SQL BETWEEN 语法

```

SELECT column_name(s)  FROM table_name WHERE column_name   BETWEEN value1 AND value2

```

二、示例

1. 原始的表

- Persons 表:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

 | 3 | Carter | Thomas | Changan Street | Beijing |

 | 4 | Gates | Bill | Xuanwumen 10 | Beijing |

1. **BETWEEN 操作符实例**

- 如需以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人,请使用下面的 SQL:

```

SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 1 | Adams | John | Oxford Street | London |

 | 2 | Bush | George | Fifth Avenue | New York |

- 重要事项:不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。某些数据库会列出介于 “Adams” 和 “Carter” 之间的人,但不包括 “Adams” 和 “Carter” ;某些数据库会列出介于 “Adams” 和 “Carter” 之间并包括 “Adams” 和 “Carter” 的人;而另一些数据库会列出介于 “Adams” 和 “Carter” 之间的人,包括 “Adams” ,但不包括 “Carter” 。

- 所以,请检查你的数据库是如何处理 BETWEEN…AND 操作符的!

1. 实例 2

- 如需使用上面的例子显示范围之外的人,请使用 NOT 操作符:

```

SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'

```

- 结果集:

 | Id | LastName | FirstName | Address | City |

 | — | — | — | — | — |

 | 3 | Carter | Thomas | Changan Street | Beijing |

 | 4 | Gates | Bill | Xuanwumen 10 | Beijing |

11、group by分组

一、简介

1. 合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。

2. GROUP BY 语句**

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

1. SQL GROUP BY 语法

```

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

```

二、示例

- 下面这个 “Orders” 表:

 | O_Id | OrderDate | OrderPrice | Customer |

 | — | — | — | — |

 | 1 | 2008/12/29 | 1000 | Bush |

 | 2 | 2008/11/23 | 1600 | Carter |

 | 3 | 2008/10/05 | 700 | Bush |

 | 4 | 2008/09/28 | 300 | Bush |

 | 5 | 2008/08/06 | 2000 | Adams |

 | 6 | 2008/07/21 | 100 | Carter |

1. 查找每个客户的总金额(总订单)。

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

```

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer

```

- 结果集类似这样:

 | Customer | SUM(OrderPrice) |

 | — | — |

 | Bush | 2000 |

 | Carter | 1700 |

 | Adams | 2000 |

- 如果省略 GROUP BY 会出现什么情况:

SELECT Customer,SUM(OrderPrice) FROM Orders

- 结果集类似这样:

 | Customer | SUM(OrderPrice) |

 | — | — |

 | Bush | 5700 |

 | Carter | 5700 |

 | Bush | 5700 |

 | Bush | 5700 |

 | Adams | 5700 |

 | Carter | 5700 |

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

1. GROUP BY 一个以上的列

我们也可以对一个以上的列应用 GROUP BY 语句,就像这样:

```

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate

```

12、having分组后过滤

一、简介

1. **HAVING 子句**

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

1. SQL 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

```

# 二、示例

- 我们拥有下面这个 “Orders” 表:

 | O_Id | OrderDate | OrderPrice | Customer |

 | — | — | — | — |

 | 1 | 2008/12/29 | 1000 | Bush |

 | 2 | 2008/11/23 | 1600 | Carter |

 | 3 | 2008/10/05 | 700 | Bush |

 | 4 | 2008/09/28 | 300 | Bush |

 | 5 | 2008/08/06 | 2000 | Adams |

 | 6 | 2008/07/21 | 100 | Carter |

1. 查找订单总金额少于 2000 的客户。

```

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000

```

- 结果集类似:

 | Customer | SUM(OrderPrice) |

 | — | — |

 | Carter | 1700 |

1. 查找客户 “Bush” 或 “Adams” 拥有超过 1500 的订单总金额。

```

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

```

- 结果集:

 | Customer | SUM(OrderPrice) |

 | — | — |

 | Bush | 2000 |

 | Adams | 2000 |

13、order by排序

一、简介

1. **ORDER BY 语句**

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

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

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

二、示例

1. 原始的表 (用在例子中的):

- Orders 表:

 | Company | OrderNumber |

 | — | — |

 | IBM | 3532 |

 | W3School | 2356 |

 | Apple | 4698 |

 | W3School | 6953 |

1. 实例 1

以字母顺序显示公司名称:

`SELECT Company, OrderNumber FROM Orders ORDER BY Company`

- 结果:

 | Company | OrderNumber |

 | — | — |

 | Apple | 4698 |

 | IBM | 3532 |

 | W3School | 6953 |

 | W3School | 2356 |

1. 实例 2

以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

- 结果:

 | Company | OrderNumber |

 | — | — |

 | Apple | 4698 |

 | IBM | 3532 |

 | W3School | 2356 |

 | W3School | 6953 |

1. 实例 3

以逆字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

- 结果:

 | Company | OrderNumber |

 | — | — |

 | W3School | 6953 |

 | W3School | 2356 |

 | IBM | 3532 |

 | Apple | 4698 |

1. 实例 4

以逆字母顺序显示公司名称,并以数字顺序显示顺序号:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

- 结果:

 | Company | OrderNumber |

 | — | — |

 | W3School | 2356 |

 | W3School | 6953 |

 | IBM | 3532 |

 | Apple | 4698 |

- **注意:**在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。

相关文章
|
8天前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
|
7天前
|
SQL 运维 程序员
一个功能丰富的SQL审核查询平台
一个功能丰富的SQL审核查询平台
|
18天前
|
SQL 存储 缓存
执行一条 SQL 查询语句,期间发生了什么?
执行一条SQL查询语句的过程包括连接器建立连接、查询缓存检查、SQL解析构建语法树、执行计划选择和执行,以及可能涉及的索引下推和索引覆盖优化技术。
75 0
执行一条 SQL 查询语句,期间发生了什么?
|
13天前
|
SQL 数据库 Java
HQL vs SQL:谁将统治数据库查询的未来?揭秘Hibernate的神秘力量!
【8月更文挑战第31天】Hibernate查询语言(HQL)是一种面向对象的查询语言,它模仿了SQL的语法,但操作对象为持久化类及其属性,而非数据库表和列。HQL具有类型安全、易于维护等优点,支持面向对象的高级特性,内置大量函数,可灵活处理查询结果。下面通过示例对比HQL与SQL,展示HQL在实际应用中的优势。例如,HQL查询“从员工表中筛选年龄大于30岁的员工”只需简单地表示为 `FROM Employee e WHERE e.age &gt; 30`,而在SQL中则需明确指定表名和列名。此外,HQL在处理关联查询时也更为直观易懂。然而,对于某些复杂的数据库操作,SQL仍有其独特优势。
24 0
|
13天前
|
SQL 关系型数据库 MySQL
|
13天前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
23 0
|
13天前
|
Java UED 开发者
当错误遇上Struts 2:一场优雅的异常处理盛宴,如何让错误信息成为用户体验的救星?
【8月更文挑战第31天】在Web应用开发中,异常处理对确保用户体验和系统稳定性至关重要。Struts 2 提供了完善的异常处理机制,包括 `exception` 拦截器、`ActionSupport` 类以及 OGNL 表达式,帮助开发者优雅地捕获和展示错误信息。本文详细介绍了 Struts 2 的异常处理策略,涵盖拦截器配置、错误信息展示及自定义全局异常处理器的实现方法,使应用程序更加健壮和用户友好。
22 0
|
13天前
|
Java XML Maven
跨越时代的飞跃:Struts 2 升级秘籍——从旧版本无缝迁移到最新版,焕发应用新生!
【8月更文挑战第31天】随着软件技术的发展,Struts 2 框架也在不断更新。本文通过具体案例指导开发者如何从旧版平滑升级到 Struts 2.6.x。首先更新 `pom.xml` 中的依赖版本,并执行 `mvn clean install`。接着检查 `struts.xml` 配置,确保符合新版本要求,调整包扫描器等设置。审查 Action 类及其注解,检查配置文件中的弃用项及插件。更新自定义拦截器实现,并验证日志配置。最后,通过一系列测试确保升级后的系统正常运行。通过这些步骤,可以顺利完成 Struts 2 的版本升级,提升应用的安全性和性能。
42 0
|
13天前
|
前端开发 开发者
Vaadin Grid的秘密武器:打造超凡脱俗的数据展示体验!
【8月更文挑战第31天】赵萌是一位热爱UI设计的前端开发工程师。在公司内部项目中,她面临大量用户数据展示的挑战,并选择了功能强大的Vaadin Grid来解决。她在技术博客上分享了这一过程,介绍了Vaadin Grid的基本概念及其丰富的内置功能。通过自定义列和模板,赵萌展示了如何实现复杂的数据展示。
20 0
|
13天前
|
SQL 存储 安全
Play Framework的安全面纱:揭开隐藏在优雅代码下的威胁
【8月更文挑战第31天】Play Framework 是一款高效、轻量级的 Web 开发框架,内置多种安全特性,助力开发者构建安全稳定的应用。本文详细介绍 Play 如何防范 SQL 注入、XSS 攻击、CSRF 攻击,并提供安全的密码存储方法及权限管理策略,通过具体示例代码展示实施步骤,助您有效抵御常见威胁。
30 0