这个系列是当时参加Datawhale MySQL 第五期的笔记

SQL是什么?MySQL是什么?

1.SQL

Structured Query Language(结构化查询语言)的缩写。它是一种专门用来与数据库沟通的语言。

2.MySQL

是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

一、导入数据库

第二步:将下载的文件解压缩到文件夹中(这里地址为D:\data\yiibaidb\yiibaidb.sql)

第三步:连接到MySQL服务器并创建数据库

1.连接数据库

找到MySQL Server 8.0\bin位置,然后打开命令提示符
cd C:\Program Files\MySQL\MySQL Server 8.0\bin
mysql -hlocalhost -uroot -p
在这里插入图片描述
2.创建数据库
mysql> CREATE DATABASE IF NOT EXISTS yiibaidb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> use yiibaidb;
3.导入数据
mysql> use yiibaidb;
mysql> source D:\data\yiibaidb\yiibaidb.sql
第四步:测试并导入结果
mysql> select city,phone,country from `offices`;
在这里插入图片描述
二、语句类型
本章节的展示基于Navicat 12.1
(一)查询语句 SELECT FROM
1.语句解释
从一个或多个表中检索信息。
2.通用语法
以下为在MySQL数据库中查询数据通用的 SELECT 语法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
可以使用 WHERE 语句来包含任何条件。
可以使用 LIMIT 属性来设定返回的记录数。
可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
3.操作示例
目标:查询 yiibaidb数据库customers表格的信息
SELECT * FROM customers ;
1
4.特殊案例
4.1去重语句
(1)定义:在 SELECT 后面加入 DISTINCT 可筛选出不同的(具有唯一性)的值。
(2)目标:查询yiibaidb数据库customers表格中city值有哪些
SELECT DISTINCT city FROM customers ;
2
4.2 限制语句
(1)定义:使用 LIMIT 语句可以限制返回的条数,若同时使用 OFFSET 会加入偏移(即从第几行开始取)。
需要注意:第一个被检索的行是第 0行,而不是第 1行。例如,LIMIT 1 OFFSET 1会检索第 2行,而不是第 1行。
(2)目标:从3行开始选取yiibaidb数据库customers表5条数据。
SELECT * FROM customers LIMIT 5 OFFSET 3 ;
3
4.3 CASE.WHEN.END判断语句
(1)定义:CASE WHEN END 语法一般用于判断条件后返回对应的值
(2)分类:
-- 简单函数
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
-- 搜索函数
CASE WHEN [expr] THEN [result1]…ELSE [default] END
需要注意:case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。
(3)目标:
对于简单函数
SELECT *,
CASE country
WHEN 'France' THEN '欧洲'
WHEN 'USA' THEN '美洲'
ELSE '其他'
END '大洲'
FROM customers ;
在这里插入图片描述
对于搜索函数
在这里插入图片描述
(二)筛选语句 WHERE
1.语句解释
实现有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
2.通用语法
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 表中的字段值来读取指定的数据。
3.操作符
以下为操作符列表,可用于 WHERE 子句中。
在这里插入图片描述
操作示例:
目标:查找yiibaidb数据库customers表中符合以下条件数据:国别是美国且creditlimit大于100000
在这里插入图片描述
4.通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用以下通配符:
在这里插入图片描述
操作示例:
目标:查找yiibaidb数据库customers表中符合以下条件数据:contactfirstname 是 J 开头
在这里插入图片描述
5.运算符
MySQL 主要有以下几种运算符:
算术运算符
比较运算符
逻辑运算符
位运算符
(1)算术运算符
MySQL 支持的算术运算符包括:
在这里插入图片描述
在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL。
(2)比较运算符
SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。
在这里插入图片描述
(3)逻辑运算符
逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。
在这里插入图片描述
(4)位运算符
位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。
在这里插入图片描述
(三)分组语句 GROUP BY
1.语句解释
GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
2.通用语法
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
3.操作示例
目标:统计yiibaidb数据库customers表中country类别数据
在这里插入图片描述
注意:在分组后的结果中,不可以使用 WHERE 对分组结果进行筛选,只能使用 HAVING 语句
(四)排序语句 ORDER BY
1.语句解释
对读取的数据进行排序,此时可以使用 MySQL 的 ORDER BY 子句来设定想按哪个字段哪种方式来进行排序,再返回搜索结果。
2.通用语法
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。如果希望按照降序对记录进行排序,可以使用 DESC 关键字。
可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
可以设定多个字段来排序。
可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
可以添加 WHERE...LIKE 子句来设置条件。
3.操作示例
目标:对yiibaidb数据库customers表数据先按照customername排序,再按照customernumber排序
在这里插入图片描述
三、函数
MySQL 有很多内置的函数:
字符串函数
数字函数
日期函数
四、SQL注释
(一)单行注释
1.使用 #
#单行注释方法一
select * from customers;
或者
2.使用--
-- 单行注释方法二
select * from customers
注意:--后跟有一个空格
(二)多行注释
注释从 /* 开始,到 / 结束, / 和 */ 之间的任何内容都是注释。
/*
此处为注释....
*/
select * from customers;
五、SQL代码规范
可参看
练习
练习一:查找重复的电子邮箱(难度:简单)
创建 email表,并插入如下三行数据
+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。
根据以上输入,你的查询应返回以下结果:
+---------+
| Email |
+---------+
| a@b.com |
+---------+
说明:所有电子邮箱都是小写字母。
第一步:新建数据库
mysql> CREATE DATABASE IF NOT EXISTS emailtest DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> use emailtest;
第二步:新建数据表
mysql> CREATE TABLE email ( ID INT NOT NULL PRIMARY KEY, Email VARCHAR(255));
第三步:插入数据
mysql> INSERT INTO email VALUES('1','a@b.com');
mysql> INSERT INTO email VALUES('2','c@d.com');
mysql> INSERT INTO email VALUES('3','a@b.com');
第四步:查询数据
SELECT Email FROM email GROUP BY Email HAVING COUNT(Email)>1
在这里插入图片描述
项目二:查找大国(难度:简单)
创建如下 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 |
+--------------+-------------+--------------+
第一步:新建数据库
mysql> CREATE DATABASE IF NOT EXISTS worldtest DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> use worldtest;
第二步:新建数据表
mysql> 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);
第三步:插入数据
mysql>INSERT INTO World VALUES( 'Afghanistan', 'Asia',652230,25500100,20343000);
mysql>INSERT INTO World VALUES( 'Albania', 'Europe' ,28748,2831741,12960000);
mysql>INSERT INTO World VALUES( 'Algeria', 'Africa' ,2381741,37100000,188681000);
mysql>INSERT INTO World VALUES( 'Andorra' , 'Europe' ,468,78115,3712000);
mysql>INSERT INTO World VALUES( 'Angola' , 'Africa' ,1246700,20609294,100990000);
第四步:查询数据
SELECT name, population, area FROM world WHERE area > 3000000 OR (population>25000000 AND gdp>20000000);
在这里插入图片描述
参考资料:
1.MySQL导入示例数据库
2.MySQL命令行学习
3.MySQL命令行工具和基本操作
4.MySQL基础 - 查询语句
5.MySQL 教程
6.SQL的case when then else end语句的用法