MySQL 基础 (一)- 查询语句


1. 导入示例数据库,

cmd导入.sql教程 https://www.yiibai.com/mysql/how-to-load-sample-database-into-mysql-database-server.html
在这里插入图片描述
用Navicat for Mysql导入.sql文件:https://www.cnblogs.com/keyi/p/5978982.html
在这里插入图片描述


2. SQL是什么?MySQL是什么?

SQL是英文Structured Query Language的缩写形式,它的意思是表示结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系。此外,SQL是被当成为关系型数据库管理系统的标准语言。其是由Microsoft开发和推广的关系数据库管理系统。
MySQL是一个小型关系型数据库管理系统,被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
这样说可能有点专业了,简单来说,就是一个存储数据的仓库,可以存储文字,图片之类的信息,实现数据操作的增删改查,是网站运行的命脉所在。


3. 查询语句 SELECT FROM

  • 语句解释
    SELECT 列名称 FROM 表名称
    表示从表中读取所需列的数据
    如下图中select city,phone,county from ‘office’;表示为表名为‘office’的表中取出列名为‘city’,‘phone’,‘county’的数据。

在这里插入图片描述

  • 去重语句
    SELECT DISTINCT 列名称 FROM 表名称
    DISTINCT为查询不重复的记录
    如下图所示SELECT DISTINCT county from ‘office’,表中去掉了重复城市的数据

在这里插入图片描述

  • 前N个语句
    用select city,phone,county from ‘office’ limit 查询限制查询前n排数据
    如下图所示select distinct country,city,phone from offices limit 0,5;查询了表中前5排的数据。
    在这里插入图片描述
  • CASE…END判断语句
    case …end 判断语句与if else语句相似,详情见:https://www.yiibai.com/mysql/case-statement.html
  1. 简单case语句
CASE  case_expression
   WHEN when_expression_1 THEN commands
   WHEN when_expression_2 THEN commands
   ...
   ELSE commands
END CASE;

case_expression可以是任何有效的表达式。我们将case_expression的值与每个WHEN子句中的when_expression进行比较,例如when_expression_1,when_expression_2等。如果case_expression和when_expression_n的值相等,则执行相应的WHEN分支中的命令(commands)。
如果WHEN子句中的when_expression与case_expression的值匹配,则ELSE子句中的命令将被执行。ELSE子句是可选的。 如果省略ELSE子句,并且找不到匹配项,MySQL将引发错误。
2. 搜索case语句
简单CASE语句仅允许您将表达式的值与一组不同的值进行匹配。 为了执行更复杂的匹配,如范围,您可以使用可搜索CASE语句。 可搜索CASE语句等同于IF语句,但是它的构造更加可读。
以下说明可搜索CASE语句的语法:

CASE
    WHEN condition_1 THEN commands
    WHEN condition_2 THEN commands
    ...
    ELSE commands
END CASE;

MySQL评估求值WHEN子句中的每个条件,直到找到一个值为TRUE的条件,然后执行THEN子句中的相应命令(commands)。
如果没有一个条件为TRUE,则执行ELSE子句中的命令(commands)。如果不指定ELSE子句,并且没有一个条件为TRUE,MySQL将发出错误消息。
MySQL不允许在THEN或ELSE子句中使用空的命令。 如果您不想处理ELSE子句中的逻辑,同时又要防止MySQL引发错误,则可以在ELSE子句中放置一个空的BEGIN END块。


4. 筛选语句 WHERE

  • 语句解释
    where语句语法如下
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  1. 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
  2. 你可以在 WHERE 子句中指定任何条件。
  3. 你可以使用 AND 或者 OR 指定一个或多个条件。
  4. WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
  5. WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。如
    下图所示所示通过where语句选出了country列为USA的数据
    在这里插入图片描述
  • 运算符/通配符/操作符
    -在这里插入图片描述

5. 分组语句 GROUP BY

  • **聚集函数 **
    在这里插入图片描述
  • 语句解释
    GROUP BY 语句根据一个或多个列对结果集进行分组。
    如下图所示对country使用group by分组语句,采用count函数:
    在这里插入图片描述
  • HAVING子句
    分组后的条件使用 HAVING 来限定,如下图所示:
    在这里插入图片描述

6. 排序语句 ORDER BY

  • 语句解释
    order by 语法如下
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  1. 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
  2. 你可以设定多个字段来排序。
  3. 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
  4. 你可以添加 WHERE…LIKE 子句来设置条件。
    如下图所示为order by语句按电话排序:
    在这里插入图片描述
  • 正序、逆序
    order by语句默认为升序排列
    使用ASC关键字可按升序排列,使用DESC关键字按降序排列。如下图所示:
    在这里插入图片描述

注:几个关键字的使用顺序为 where 、group by 、having、order by


7. 函数

  • 时间函数

在这里插入图片描述
MySQL服务器中的三种时区设置:
  ①系统时区—保存在系统变量system_time_zone
  ②服务器时区—保存在全局系统变量global.time_zone
  ③每个客户端连接的时区—保存在会话变量session.time_zone
 
具体可参考:http://www.cnblogs.com/geaozhang/p/6740457.html

  • 数值函数

在这里插入图片描述
可参考:https://www.cnblogs.com/geaozhang/p/6739942.html

  • 字符串函数

在这里插入图片描述

可参考:https://www.cnblogs.com/geaozhang/p/6739303.html


8. SQL注释

单行注释在末尾添加

语句 --注释内容

多行注释用/…/

/*
注释内容
*/

9. SQL代码规范

[SQL编程格式的优化建议] https://zhuanlan.zhihu.com/p/27466166
[SQL Style Guide] https://www.sqlstyle.guide/


作业

  1. 项目一:查找重复的电子邮箱(难度:简单)创建 email表,并插入如下三行数据
    ±—±--------+
    | Id | c |
    ±—±--------+
    | 1 | a@b.com |
    | 2 | c@d.com |
    | 3 | a@b.com |
    ±—±--------+
    编写一个 SQL 查询,查找 Email 表中所有重复的电子邮箱。
    根据以上输入,你的查询应返回以下结果:
    ±--------+
    | Email |
    ±--------+
    | a@b.com |
    ±--------+
    说明:所有电子邮箱都是小写字母。

创建表:

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');

查询:

在这里插入图片描述
2. 项目二:查找大国(难度:简单)
创建如下 World 表
±----------------±-----------±-----------±-------------±--------------+
| name | continent | area | population | gdp |
±----------------±-----------±-----------±-------------±--------------+
| Afghanistan | Asia | 652230 | 25500100 | 20343000 |
| Albania | Europe | 28748 | 2831741 | 12960000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
±----------------±-----------±-----------±-------------±--------------+
如果一个国家的面积超过300万平方公里,或者(人口超过2500万并且gdp超过2000万),那么这个国家就是大国家。编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
±-------------±------------±-------------+
| name | population | area |
±-------------±------------±-------------+
| Afghanistan | 25500100 | 652230 |
| Algeria | 37100000 | 2381741 |
±-------------±------------±-------------+
答案:
在这里插入图片描述
在这里插入图片描述


参考
[1][https://www.cnblogs.com/drake-guo/p/6104654.html]
[2][http://www.runoob.com/mysql/mysql-where-clause.html]
[3][http://www.cnblogs.com/geaozhang/p/6740457.html]
[4][https://www.cnblogs.com/geaozhang/p/6739942.html]
[5][https://www.cnblogs.com/geaozhang/p/6739303.html]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值