文章目录

  • 简介
  • 查询语句
  • 筛选语句
  • 分组语句
  • 排序语句
  • 函数
  • 实操练习


简介

  • SQL:指结构化查询语言,全称是 Structured Query Language,让你可以访问和处理数据库。它包含以下三个功能:
  1. 数据创建:定义数据库和对象:表、视图、触发器、存储过程
  2. 数据操纵:更新数据、查询数据
  3. 数据控制:管理数据权限
  • MySQL:开源的数据管理系统,能够帮助你管理关系型数据库

查询语句

  • SELECT FROM:从一个表或者多个表中检索信息
  • 检索单个列SELECT 列名 FROM 表名;
  • 检索多个列SELECT 列名1,列名2,列名3,.... FROM 表名; 注意用英文逗号分隔
  • 检索所有列SELECT * FROM 表名;
  • 去重语句SELECT DISTINCT 列名 FROM 表名; 顾名思义,DISTINCT 关键字表示的是只返回不同的值
  • 查询前N个语句SELECT 列名 FROM 表名 LIMIT N; 特别的,还可以指定从何处开始计数:
    SELECT 列名 FROM 表名 LIMIT M,N; 该语句表示为从行M开始查找N个结果。注意,行M指的是第 M+1
  • CASE…END 语句:用于计算条件列表并返回多个可能结果表达式之一
    简单 CASE 语句的语法:

    case_expression 可以是任何有效的表达式。我们将 case_expression 的值与每个 WHEN 子句中的 when_expression 进行比较,例如 when_expression_1when_expression_2 等。如果 case_expressionwhen_expression_n 的值相等,则执行相应的 WHEN 分支中的命令(commands)。ELSE 子句是可选的,如果省略 ELSE 子句,并且找不到匹配项,MySQL将引发错误。
    此处关于 CASE 语句部分的内容参考易百教程,链接中有进一步说明。

筛选语句

  • WHERE:在 SELECT 语句中,数据根据 WHERE 子句中指定的搜索条件进行过滤。WHERE 子句在表名(FROM 子句)之后给出,如下所示:
  • SELECT 列名 FROM 表名 WHERE 条件
  • 运算符:参考 MySQL运算符
  • 通配符:用来匹配值的一部分的特殊字符。为在搜索子句中使用通配符,必须使用 LIKE 操作符。在介绍通配符之前,首先要了解一个概念,即搜索模式——由字面值、通配符或两者组合构成的搜索条件,举个例子:
LIKE 'hello world'

其中 hello world 就是搜索模式。

  • 百分号通配符:% 表示任何字符出现任意次数。 注意
  1. 除了一个或多个字符外, % 还能匹配0个字符。 % 代表搜索模式中给定位置的0个、1个或多个字符
  2. 尾空格会干扰通配符匹配
  3. % 无法匹配 NULL
  • 下划线通配符:与 % 的区别在于,_ 只能匹配一个字符,不能多也不能少
分组语句
  • 聚集函数:运行在行组上,计算和返回单个值的函数。专门用于汇总数据而不把它们实际检索出来

函数

说明

AVG()

返回某列的平均值

COUNT()

返回某列的行数

MAX()

返回某列的最大值

MIN()

返回某列的最小值

SUM()

返回某列值之和

  • 分组数据:分组是在 SELECT 语句的 GROUP BY 子句中建立的。使用了 GROUP BY ,就不必指定要计算和估值的每个组了。系统会自动完成。 GROUP BY 子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
  • 过滤分组:若需要对分组添加条件进行过滤,不能使用 WHERE 进行过滤,必须使用 HAVING 语句,因为 WHERE 指定的是行而不是分组。
排序语句
  • ORDER BY :在查询语句中通常置于最后面,但应置于 LIMIT 前面。
    • 正序:SELECT 列名 FROM 表名 ORDER BY 列名ASCLIMIT 2,2
      SELECT 列名 FROM 表名 ORDER BY 列名 LIMIT 2,2
    • 逆序:SELECT 列名 FROM 表名 ORDER BY 列名DESCLIMIT 2,2
函数
  • 常用日期和时间函数

函数

说明

AddDate()

增加一个日期(天、周等)

AddTime()

增加一个时间(时、分等)

CurDate()

返回当前日期

CurTime()

返回当前时间

Date()

返回日期时间的日期部分

DateDiff()

计算两个日期之差

Date_Add()

高度灵活的日期运算函数

Date_Format()

返回一个格式化的日期或时间串

Day()

返回一个日期的天数部分

DayOfWeek()

对于一个日期返回星期几

Hour()

返回一个时间的小时部分

Minute()

返回一个时间的分钟部分

Month()

返回一个日期的月份部分

Now()

返回当前的日期和时间

Second()

返回一个时间的秒部分

Time()

返回当前的日期时间的时间部分

Year()

返回一个日期的年份部分

注意:MySQL的默认日期格式为 yyyy-mm-dd;如果要指定日期,请使用 DATE 函数。示例:
SELECT 列名 FROM 表名 WHERE DATE(日期列名) = '2005-10-01'

  • 数值函数

函数

说明

ABS()

返回一个数的绝对值

COS()

返回一个角度的余弦

EXP()

返回一个数的指数值

MOD()

返回除操作的余数

PI()

返回圆周率

RAND()

返回一个随机数

SIN()

返回一个角度的正弦

SQRT()

返回一个数的平方根

TAN()

返回一个角度的正切

  • 字符串函数

函数

说明

LEFT()

返回串左边的字符

LENGTH()

返回串的长度

LOCATE()

找出串的一个子串

LOWER()

将串转换为小写

LTRIM()

去掉串左边的空格

RIGHT()

返回串右边的字符

RTRIM()

去掉串右边的空格

UPPER()

将串转换为大写

实操练习

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

SELECT
	email AS Email 
FROM
	`email` 
GROUP BY
	email 
HAVING
	COUNT( email ) > 1

任务二:查找大国(难度:简单)

SELECT
	`name`,
	population,
	area 
FROM
	world 
WHERE
	area > 3000000 
	OR ( population > 25000000 AND gdp > 20000000 );