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 时,情况也是这样的。

目录
打赏
0
0
0
0
28
分享
相关文章
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
88 35
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
188 77
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
35 1
SQL为什么不建议执行多表关联查询
本文探讨了SQL中不建议执行多表关联查询的原因,特别是MySQL与PG在多表关联上的区别。MySQL仅支持嵌套循环连接,而不支持排序-合并连接和散列连接,因此在多表(超过3张)关联查询时效率较低。文章还分析了多表关联查询与多次单表查询的效率对比,指出将关联操作放在Service层处理的优势,包括减少数据库计算资源消耗、提高缓存效率、降低锁竞争以及更易于分布式扩展等。最后,通过实例展示了如何分解关联查询以优化性能。
|
2月前
|
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
69 17
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等