您的位置:

如何在SQL查询中正确使用where、group by和order by语句?

一、where语句

where语句用于限制查询结果,只返回符合条件的记录。

1.基本用法:where后面写上限制条件,条件可以是比较运算、逻辑运算符或者函数运算。

```sql SELECT column1, column2,...columnN FROM table_name WHERE [condition]; ```

2.比较运算符:=、<、>、<=、>=、<>或!=

SELECT * FROM customers WHERE customer_id = 1;                  // 返回ID为1的记录
SELECT * FROM customers WHERE customer_name <> 'Peter';          // 返回名字不是Peter的记录
SELECT * FROM orders WHERE order_date < '2021-09-01';            // 返回日期早于2021年9月1日的记录

3.逻辑运算符:and、or、not

SELECT * FROM customers WHERE city = 'New York' and country = 'USA';  // 返回纽约市的美国客户
SELECT * FROM customers WHERE city = 'Paris' or city = 'London';      // 返回巴黎或伦敦的客户
SELECT * FROM customers WHERE not country = 'USA';                    // 返回非美国国籍的客户

4.函数运算符:通常和比较运算符结合使用,例如LIKE,BETWEEN,IN,IS NULL等等。

SELECT * FROM customers WHERE customer_name LIKE 'Ana%';                             // 返回名字以Ana开头的客户,%代表任意字符
SELECT * FROM customers WHERE order_date BETWEEN '2021-01-01' AND '2021-12-31';      // 返回2021年订单记录
SELECT * FROM customers WHERE country IN ('USA', 'Canada', 'Mexico');                // 返回美国、加拿大或墨西哥的客户
SELECT * FROM customers WHERE phone IS NULL;                                         // 返回没有电话号码的客户

二、group by语句

group by语句用于将查询结果按照指定列进行分组,然后对每个分组进行汇总计算。

1.基本用法:group by后面写上列名,可以多个列名进行分组。同时,需要在select语句中使用聚合函数对分组后的结果进行计算。

```sql SELECT column1, SUM(column2) FROM table_name WHERE [condition] GROUP BY column1; ```

2.聚合函数:常用的聚合函数有AVG、COUNT、MAX、MIN和SUM。

SELECT country, COUNT(*) FROM customers GROUP BY country;                  // 返回每个国家的客户数目
SELECT country, AVG(bonus) FROM employees GROUP BY country;                // 返回每个国家员工的平均奖金
SELECT country, MAX(salary) FROM employees GROUP BY country;              // 返回每个国家员工的最高薪资
SELECT country, MIN(age) FROM employees GROUP BY country;                  // 返回每个国家员工的最低年龄
SELECT country, SUM(sales) FROM orders GROUP BY country;                   // 返回每个国家订单销售额之和

三、order by语句

order by语句用于对查询结果进行排序。

1.基本用法:order by后面写上排序的列,可以多个列名进行排序。默认为升序排列,可以使用DESC进行降序排列。

```sql SELECT column1, column2,...columnN FROM table_name WHERE [condition] ORDER BY column_name1 [ASC|DESC], column_name2 [ASC|DESC]...; ```

2.排序规则:对于字符串类型的列,按照字典顺序排序;对于数值类型的列,按照数值大小排序;对于日期类型的列,按照时间顺序排序。

SELECT * FROM customers ORDER BY customer_name;                      // 按照名字升序排列
SELECT * FROM customers ORDER BY customer_name DESC;                 // 按照名字降序排列
SELECT * FROM orders ORDER BY order_date;                            // 按照日期升序排列

四、综合示例

下面是一个综合示例,同时使用了where、group by和order by语句。将查询出大于50岁且工资高于30000的员工,然后按照国家和城市进行分组,计算出每个城市的平均工资,并按照平均工资降序排列。

```sql SELECT country, city, AVG(salary) as avg_salary FROM employees WHERE age > 50 AND salary > 30000 GROUP BY country, city ORDER BY avg_salary DESC; ```

参考文献

1. MySQL官方文档:https://dev.mysql.com/doc/

2. W3School:https://www.w3schools.com/sql/

3. SQLZOO:https://sqlzoo.net/