「SQL」2. SQL格式规范、基本命令与范例

简述:这里只记录SQL的部分基本指令,包括SELECT FROMWHEREGROUP BYORDER BY


1 SQL要点

1.1 注释

SQL语句中的单行注释使用--,多行注释采用 /*…*/

1.2 代码规范

SQL编程格式的优化建议
SQL Style Guide

1.3 执行顺序

SQL 语句有一个让大部分人都感到困惑的特性,就是:SQL 语句的执行顺序跟其语句的语法顺序并不一致。SQL 语句的语法顺序是:

  • SELECT[DISTINCT]
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • UNION
  • ORDER BY

为了方便理解,上面并没有把所有的 SQL 语法结构都列出来,但是已经足以说明 SQL 语句的语法顺序和其执行顺序完全不一样,就以上述语句为例,其执行顺序为:

  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • DISTINCT
  • UNION
  • ORDER BY

​ 摘自:十步完全理解 SQL


2 查询语句 SELECT FROM

2.1 语句解释

从表中选择数据

1
2
3
4
SELECT
attribute_name, ...
FROM
table_name

2.2 查重语句

1
2
3
4
5
6
7
8
SELECT
attribute_name
FROM
table_name
GROUP BY
attribute_name
HAVING
COUNT(attribute_name) > 1;

2.3 前 N 个语句

1
2
3
4
5
6
7
8
9
10
SELECT
*
FROM
table_name
ORDER BY
attribute_name DESC
LIMIT
n
OFFSET
n

2.4 CASE…END 判断语句

1
2
3
4
5
6
7
CASE 
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
WHEN 条件3 THEN 结果3
.........
WHEN 条件N THEN 结果N
END

3 筛选语句 WHERE

3.1 语法

1
2
3
4
5
6
SELECT 
attribute_name
FROM
table_name
WHERE
attribute_name operator value

属性名不要求相同。

3.2 运算符/通配符/操作符

operator 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式

4 分组语句 GROUP BY

4.1 语句解释

GROUP BY语句根据一个或多个列对结果集进行分组。

1
2
3
4
5
6
7
8
SELECT 
attribute_name
FROM
table_name
WHERE
attribute_name operator value
GROUP BY
attribute_name

属性名不要求相同。


4.2 HAVING子句

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

1
2
3
4
5
6
7
8
9
10
SELECT 
attribute_name, aggregate_function(attribute_name)
FROM
table_name
WHERE
attribute_name operator value
GROUP BY
attribute_name
HAVING
aggregate_function(attribute_name) operator value

5 排序语句 ORDER BY

ORDER BY语句用于根据指定的列对结果集进行排序。默认按照升序,添加DESC关键字可改成降序。

5.1 正序、逆序

SQL默认按照升序(ASC),添加DESC关键字可改成降序。


6 简单实操

6.1 查找重复的电子邮箱(难度:简单)

  1. 创建表,表名 accounts,再添加 records
    1
    2
    3
    4
    5
    6
    7
    8
       CREATE TABLE email (
    ID INT NOT NULL PRIMARY KEY,
    Email VARCHAR(255)
    );

    INSERT INTO email VALUES('1','a@b.com');
    INSERT INTO email VALUES('2','c@d.com');
    INSERT INTO email VALUES('3','a@b.com');
    Yeah,这就成了。
    在这里插入图片描述
  2. 查重
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
    Email
    FROM
    accounts
    GROUP BY
    Email
    HAVING
    COUNT(Email)>1;
    查找结果:
    在这里插入图片描述

6.2 查找大国

  1. 建表,表名 world,再添加 records
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE TABLE World (
    name VARCHAR(50) NOT NULL,
    continent VARCHAR(50) NOT NULL,
    area INT NOT NULL,
    population INT NOT NULL,
    gdp INT NOT NULL
    );

    INSERT INTO World
    VALUES('Afghanistan','Asia',652230,25500100,20343000);
    INSERT INTO World
    VALUES('Albania','Europe',28748,2831741,12960000);
    INSERT INTO World
    VALUES('Algeria','Africa',2381741,37100000,188681000);
    INSERT INTO World
    VALUES('Andorra','Europe',468,78115,3712000);
    INSERT INTO World
    VALUES('Angola','Africa',1246700,20609294,100990000);
  2. 查找大国(条件:国家的面积超过300万平方公里,或者(人口超过2500万并且 gdp 超过2000万))
    1
    2
    3
    4
    5
    6
    SELECT
    name, population, area
    FROM
    world
    WHERE
    area > 3000000 OR (population > 25000000 and GDP > 20000000);
    Here we go!
    在这里插入图片描述

7系列

  1. 「SQL」1. 安装 MySQL
  2. 「SQL」2. SQL格式规范、基本命令与范例
  3. 「SQL」3. MySQL 的数据类型

以上!


「SQL」2. SQL格式规范、基本命令与范例

https://alexinst.github.io/SQL/basic-instructions-of-sql/

作者

Alex

发布于

2019-05-08

更新于

2021-06-19

许可协议

评论