MySQL学习打卡 Day2

1. 导入示例数据库

教程一
教程二
一开始是按教程一进行操作,按教程一的CREATE TABLE命令,不知道为什么报错了,接着按教程二顺利操作了。

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

结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ “S-Q-L”),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

3. 查询语句 SELECT FROM

语句解释

SELECT语句是最常用的查询语句,基本语法如下

select select_list   \\要查询的内容
from table_name    \\指定数据表
where primary_constraint    \\行要满足的条件
group by grouping_colunms    \\如何进行分组
order by sorting_columns    \\如何进行排序
having secondary_constraint    \\查询时满足的第二条件
limit count        \\限定输出的查询结果

去重语句

如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

select distinct 字段名 from 表名;

前N个语句

可以使用关键字LIMIT限制查询结果的数量

select * from table limit 3;  \\该条语句限制了只读取前三行

CASE…END判断语句

CASE搜索

CASE
WHEN Boolean_expression THEN
    result_expression [...n ] [
ELSE
    else_result_expression
END

举例来自blog

SELECT
    CASE
WHEN parent_id < 3 THEN
    '<3'
WHEN parent_id >= 3
AND parent_id < 5 THEN
    '>=3 && <5'
ELSE
    '>=5'
END AS parent_id_new ,
parent_id ,
type_id ,
type_name
FROM
    tdb_goods_types

在这里插入图片描述

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 表中的字段值来读取指定的数据。

运算符/通配符/操作符

操作符 描述
= 等号,检测两个值是否相等,如果相等返回true
<> , != 不等于,检测两个值是否相等,如果不相等返回true
>,< 大于号,小于号,检测两个值的大小
>=,<= 大于等于号,小于等于号,判断两个值是否大于等于或小于等于

5. 分组语句 GROUP BY

聚集函数

这个博客分析的很透彻
group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤。
常用的聚集函数有

函数 作用
AVG([distinct] expr) 求平均值
COUNT({* [distinct] } expr)
MAX([distinct] expr) 求最大值
MIN([distinct] expr) 求最小值
SUM([distinct] expr) 求累加和

语句解释

以这次安装的yiibaidb中的customer为例,原表如下:
在这里插入图片描述

SELECT count(customerName),country,SUM(creditLimit) FROM `customers` GROUP BY country;

在这里插入图片描述

HAVING子句

having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。
接上面的例子,在GROUP之后用HAVING可以将满足CREDITLIMIT之和大于100000的国家筛选出来。

SELECT count(customerName),country,SUM(creditLimit) FROM `customers` GROUP BY country HAVING SUM(creditLimit)>100000;

在这里插入图片描述

总结

  • 当group by 与聚合函数配合使用时,功能为分组后计算
  • 当group by 与having配合使用时,功能为分组后过滤
  • 当group by 与聚合函数,同时非聚合字段同时使用时,非聚合字段的取值是第一个匹配到的字段内容,即id小的条目对应的字段内容。

6. 排序语句 ORDER BY

语句解释

SELECT field1, field2,...fieldN table_name1, table_name2... ORDER BY field1, [field2...] [ASC [DESC]]
SELECT field1, field2,…fieldN table_name1, table_name2…
ORDER BY field1, [field2…] [ASC [DESC]]可以将选出来的数据按指定的attr进行排序

SELECT count(customerName),country,SUM(creditLimit) FROM `customers` GROUP BY country HAVING SUM(creditLimit)>100000 ORDER BY country DESC;

在这里插入图片描述

正序、逆序

在结尾加ASC或DESC为正序或倒序,默认是ASC正序
上图我使用了DESC,排序从Z~A

7. 函数

时间函数

使用时间函数可以在MySQL中获得时间相关的内容
常用的时间函数可以看这个时间函数大全

数值函数

数值函数可以对数值数据进行一定转换和操作,常用的有:

函 数 功 能
ABS(x) 返回数值x的绝对值
CEIL(x) 返回大于或等于x的最小整数值
FLOOR(x) 返回小于或等于x的最大整数值
MOD(x,y) 返回x除以y的余数
RAND() 返回0~1内的随机数
ROUND(x,y) 返回x四舍五入后有y位小数的数值
TRUNCATE(x,y) 返回数值x且截断为y位小数的数值

字符串函数

字符串函数可以对字符串类数据进行一定操作,常见的有:

函数 功能
concat(s1, s2, … , sn) 连接s1, s2, …, sn 为一个字符串
insert(str, x, y, instr) 将字符串str从第x位置开始, y个字符长度的子字符串替换为字符串instr
lower(str) 将字符串str中所有的字符转换为小写
upper(str) 将字符串str中所有的字符转换为大写
left(str, x) 返回字符串str最左边的x个字符
right(str, y) 返回字符串str最右边的y个字符
lpad(str, n, pad) 用字符串pad对str最左边进行填充, 直到长度为n个字符长度
rpad(str, n, pad) 用字符串pad对str最右边进行填充, 直到长度为n个字符长度
ltrim(str) 去掉str中最左边的空格
rtrim(str) 去掉str中最右边的空格
repeat(str, x) 返回str中重复出现x次的结果
replace(str, a, b) 将字符串str中的a更换为b
strcmp(s1, s2) 比较字符串s1, s2
trim(str) 去掉字符串str两边的空格
substring(str, x, y) 返回字符串str x位置开始y个字符长度的字符串

8. SQL注释

1、单行注释可以用"#"

# this is an annotation

2、单行注释的第二种写法用 “-- " 注意这个风格下”–【空格】" 也就是说“–" 与注释之间是有空格的。
3、多行注释可以用/**/

/* this is first line
this is second line*/

9. SQL代码规范

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

作业#

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

创建 email表,并插入如下三行数据
±—±--------+
| Id | Email |
±—±--------+
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
±—±--------+

编写一个 SQL 查询,查找 Email 表中所有重复的电子邮箱。

SELECT Email FROM `email` GROUP BY Email HAVING count(Email)>1;

根据以上输入,你的查询应返回以下结果:
±--------+
| Email |
±--------+
| [email protected] |
±--------+
说明:所有电子邮箱都是小写字母。

项目二:查找大国(难度:简单)

创建如下 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 |
±-------------±------------±-------------+

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Clavinzhang/article/details/88958977
今日推荐