天天看点

SQL语句大全

LEVEL1

(1)输出 Hello SQL:

SELECT "Hello SQL!";

(2)使用 SELECT DISTINCT 查询不同行:

SELECT DISTINCT column_name FROM table_name;
           

(3)使用 SELECT WHERE 对行进行筛选过滤:常用的有等于 =、小于 < 、大于 > 、不等于<> 或 !=

(4)使用 INSERT INTO 在不指定列的情况下插入数据:

INSERT INTO `table_name` 
  VALUES (value1, value2, value3,...);
           

(5)使用 INSERT INTO 在指定的列中插入数据:

INSERT INTO `table_name`
  (`column1`, `column2`, `column3`,...) 
  VALUES (value1, value2, value3,...);
           

(6)使用 UPDATE 更新数据:

UPDATE `table_name` 
  SET `column1`=value1,`column2`=value2,... 
  WHERE `some_column`=some_value;
           

(7)使用 DELETE 删除数据:

DELETE FROM `table_name`
   WHERE `some_column` = `some_value`;
           

LEVEL2

(1) 比较运算符:

A operator B

,常用的比较运算符有 =(等于) 、!=(不等于)、 <>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于),其中 != 和 <> 在特殊情况下用法是不同的,这里暂时不提。

(2)使用 AND 连接多条件:

SELECT `column_name` 
  FROM `table_name` 
  WHERE condition1 AND condition2;
           

(3)使用 OR 连接多个条件:

SELECT `column_name` 
  FROM `table_name` 
  WHERE condition1 or condition2;
           

(4)使用 NOT 过滤不满足条件的数据

SELECT `column_name` 
  FROM `table_name` 
  WHERE NOT `condition`;
//举例
  SELECT *
  FROM `teachers`
  WHERE NOT (`age` > 20 AND `country` = 'CN');
           

(5)使用 IN 查询多条件:当我们需要查询单个表条件过多时,就会用多个 'OR' 连接或者嵌套,这会比较麻烦,现在我们有 'IN' 能更方便的解决这一问题。

SELECT *
  FROM `table_name`
  WHERE `column_name` IN `value`;
//举例
  SELECT *
  FROM `teachers`
  WHERE `country` IN ('CN', 'UK');
           

(6)使用 NOT IN 排除

SELECT *
  FROM `table_name`
  WHERE `column_name` NOT IN value;
           

(7)使用 BETWEEN AND 查询两值间的数据范围:

  • BETWEEN AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
  • 请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
  • 在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
  • 在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
  • 在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。
  • 因此,请检查您的数据库是如何处理 BETWEEN 操作符!
  • 我们这里选用的是 MySQL 的支持,BETWEEN 选取介于两个值之间且包括两个测试值的字段,即BETWEEN 200 AND 250 选取结果会包括 200 和 250
 SELECT *
 FROM `table_name`
 WHERE `column_name` BETWEEN `value` AND `value`;
           

(8)使用 IS NULL 查询空数据:NULL 值代表遗漏的未知数据。默认的,表的列可以存放 NULL 值。

注意:

  • NULL 用作未知的或不适用的值的占位符。
  • 无法比较 NULL 和 0;它们是不等价的。
  • 无法使用比较运算符来测试 NULL 值,比如 =、!= 或 <>。
  • 我们必须使用 IS NULL 和 IS NOT NULL操作符。
SELECT *
  FROM `table_name`
  WHERE `column_name` IS NULL;
           

(9)使用 LIKE 模糊查询

NUM 通配符 描述
1 % 替代 0 个或多个字符
2 _ 替代一个字符
3 [charlist] 字符列中的任何单一字符
4 或 [!charlist] 不在字符列中的任何单一字符
SELECT *
FROM `table_name`
WHERE `column_name` LIKE  `value`;
           

(10)使用 ORDER BY 对数据进行排序

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序,其具有 ASC(升序)和 DESC(降序)两个关键字,且默认按照升序排列。

  • ASC :按升序排列,ORDER BY 默认按照升序对记录进行排序,因此升序的关键字 ASC 可以省去不写。
  • DESC:按降序排列,如果需要按照降序对记录进行排序,可以使用 DESC 关键字。
SELECT `column_name`, `column_name`
FROM `table_name`
ORDER BY `column_name`, `column_name` ASC|DESC;
           

(11)使用 LIMIT 限制输出行数:

LIMIT 子句用于 SELECT 中,对输出结果集的行数进行约束,LIMIT 接收2个参数 offset 和 count,两个参数都是整型数字,但通常只用一个。

  • offset :是返回集的初始标注,起始点是0,不是1
  • ount :制定返回的数量
  • LIMIT 关键字的位置,需要放在 ORDER BY 关键字的后面,否则会报错。
SELECT `column_name`, `column_name`
FROM `table_name`
LIMIT `offset` , `count`;
           

LEVEL3

算数函数(1)

(1) 使用 AVG() 函数求数值列的平均值:

  • 平均函数 AVG() 是平均数 AVERAGE 的缩写,它用于求数值列的平均值。它可以用来返回所有列的平均值,也可以用来返回特定列和行的平均值。
  • 具体的计算过程为:其通过对表中行数计数并计算特定数值列的列值之和,求得该列的平均值。

    * 但是当参数 `column_name` 列中的数据均为空时,结果会返回 NULL。

SELECT AVG(`column_name`) 
  FROM `table_name`;
//举例,其中 AS 关键字的作用是赋予 AVG(student_count) 计算结果列显示在列表中的别名。
  SELECT AVG(`student_count`) AS `average_student_count`
  FROM `courses`;
           

何为别名?

别名是一个字段或值的替换名,由关键字 AS 赋予。别名还有其他用途,常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的表列名含糊或者容易误解时扩充它等。

别名常与函数联用,给使用函数之后的新计算列一个名字,方便我们查看和使用。我们会在后续的学习中经常见到它。

(2)使用 MAX() 函数返回指定列中的最大值:它只有一个参数 column_name ,表示指定的列名。但是当参数 column_name 列中的数据均为空时,结果会返回 NULL。

SELECT MAX(`column_name`) 
  FROM `table_name`;
           

(3)使用 MIN() 函数返回指定列中的最小值

SELECT MIN(`column_name`) 
  FROM `table_name`;
           

(4)使用 SUM() 函数统计数值列的总数:

SELECT SUM(`column_name`) 
  FROM `table_name`;
           

算数函数(2)

(1) 使用 ROUND() 函数将数值四舍五入:

ROUND()

函数用于把数值字段舍入为指定的小数位数。

  • ROUND(X)

    :返回参数 X 四舍五入后的一个整数。
  • ROUND(X, D)

    :返回参数 X 四舍五入且保留 D 位小数后的一个数字。如果 D 为 0,结果将没有小数点或小数部分。
  • ROUND()

    返回值数据类型会被变换为一个 BIGINT 。
SELECT ROUND(`column_name`, `decimals`) 
  FROM `table_name`;
           

(2)使用 NULL() 函数判断空值

  • ISNULL():

    ISNULL()

    函数用于判断字段是否为 NULL,它只有一个参数

    column_name

    为列名,根据

    column_name

    列中的字段是否为 NULL 值返回 0 或 1。
SELECT ISNULL(`column_name`)
  FROM `table_name`;
           
  • IFNULL():

    IFNULL()

    函数也用于判断字段是否为NULL,但是与

    ISNULL()

    不同的是它接收两个参数,第一个参数

    column_name

    为列名,第二个参数

    value

    相当于备用值。

    其中:

    (1) 如果 column_name 列中的某个字段是 NULL 则返回 value 值,不是则返回对应内容。

    (2) COALESCE(column_name, value) 函数也用于判断字段是否为NULL,其用法和 IFNULL() 相同。

SELECT IFNULL(`column_name`, `value`)
  FROM `table_name`;
//举例
  SELECT `name`, `email`, ISNULL(`email`), IFNULL(`email`, 0), COALESCE(`email`, 0) 
  FROM `teachers`;
           

(3)使用 COUNT() 函数计数:当

COUNT()

中的参数不同时,其的用途也是有明显的不同的,主要可分为以下三种情况:COUNT(column_name) 、COUNT( * ) 和 COUNT(DISTINCT column_name) 。

  • COUNT( column_name ):
    • COUNT(column_name) 函数会对指定列具有的行数进行计数,但是会除去值为 NULL 的行。该函数主要用于查看各列数据的数量情况,便于统计数据的缺失值。

      * 假如出现某一列的数据全为 NULL 值的情况,使用COUNT( column_name ) 函数对该列进行计数,会返回 0。

SELECT COUNT(`column_name`) 
  FROM `table_name`;
           
  • COUNT():COUNT() 函数会对表中行的数目进行计数,包括值为 NULL 所在行和重复项所在行。该函数主要用于查看表中的记录数。
SELECT COUNT(*) 
  FROM `table_name`;
           

注意:COUNT(column_name) 与 COUNT(*) 的区别

  • COUNT(column_name)

    中,如果

    column_name

    字段中的值为 NULL,则计数不会增加,而如果字段值为空字符串"",则字段值会加 1
  • COUNT(*)

    中,除非整个记录全为

    NULL

    ,则计数不会增加,如果存在某一个记录不为

    NULL

    ,或者为空字符串"",计数值都会加 1。正常来说,表都会有主键,而主键不为空,所以

    COUNT(*)

    在有主键的表中等同于

    COUNT(PRIMARY_KEY)

    ,即查询有多少条记录。
SELECT COUNT(*) 
  FROM `table_name`;
           

时间函数(1)

(1)使用 NOW() 、 CURDATE()、CURTIME() 获取当前时间

  • NOW()

    可以用来返回当前日期和时间 格式:YYYY-MM-DD hh:mm:ss
  • CURDATE()

    可以用来返回当前日期 格式:YYYY-MM-DD
  • CURTIME()

    可以用来返回当前时间 格式:hh:mm:ss
//举例  使用 NOW() 向记录表 records 中插入当前的时间(精确到毫秒)
 INSERT INTO `records` VALUES (NOW(3));
           

(4)使用 DATE()、TIME() 函数提取日期和时间

使用

DATE()

TIME()

函数分别将 '2021-03-25 16:16:30' 这组数据中的日期于时间提取出来,并用 date 、time 作为结果集列名。

SELECT DATE('2021-03-25 16:16:30') AS `date`,TIME('2021-03-25 16:16:30')  AS `time`;
运行结果如下:
           
date time
2021-03-25 16:16:30

(5)使用 EXTRACT() 函数提取指定的时间信息:

EXTRACT()

函数用于返回日期/时间的单独部分,如 YEAR (年)、MONTH (月)、DAY (日)、HOUR (小时)、MINUTE (分钟)、 SECOND (秒)。

SELECT EXTRACT(unit FROM date)
  FROM `table`
           
  • date 参数是合法的日期表达式。
  • unit 参数是需要返回的时间部分,如

    YEAR

    MONTH

    DAY

    HOUR

    MINUTE

    SECOND

    等。
  • 在一般情况下,

    EXTRACT(unit FROM date)

    unit()

    的结果相同。
//举例
  SELECT `name`, EXTRACT(HOUR FROM `created_at`) AS `created_hour`
  FROM `courses`;
           

(6)使用 DATE_FORMAT() 格式化输出日期:

SELECT DATE_FORMAT(date,format);

  • 我们在 SQL 中使用 DATE_FORMAT() 方法来格式化输出 date/time。
  • 需要注意的是 DATE_FORMAT() 函数返回的是字符串格式。

    举例:

SELECT DATE_FORMAT(`created_at`, '%Y %m') AS `DATE_FORMAT`
FROM `courses`;
           

时间函数(2)

SELECT DATE_ADD(date, INTERVAL expr type)
  FROM table_name
           
  • date 指代希望被操作的有效日期,为起始日期
  • expr 是希望添加的时间间隔的数值(expr 是一个字符串,对于负值的间隔,可以以 ”-“ 开头)
  • type 是具体的数据类型,表示加上时间间隔的单位(可以是 MICROSECOND , SECOND , MINUTE , HOUR , DAY , WEEK , MONTH , QUARTER , YEAR 等)
//举例
SELECT `name`, DATE_ADD(`created_at`, INTERVAL 1 YEAR) AS `new_created`
     FROM `courses`;