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 fromoffices
limit 0,5;查询了表中前5排的数据。
- CASE…END判断语句
case …end 判断语句与if else语句相似,详情见:https://www.yiibai.com/mysql/case-statement.html
- 简单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.....
- 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- 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]]
- 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
- 你可以设定多个字段来排序。
- 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
- 你可以添加 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/
作业
- 项目一:查找重复的电子邮箱(难度:简单)创建 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]