一、 学习内容
- 导入示例数据库。
软件:navicat for MySQL
- SQL是什么?MySQL是什么?
SQL是一种用于操作数据库的语言,MySQL是市场上第一个可用的开源数据库之一。
SQL用于访问,更新和操作数据库中的数据。MySQL是一种RDBMS,它允许保持数据库中存在的数据。
SQL是结构化查询语言。MySQL是一个使用MYSQL存储,检索,修改和管理数据库的RDBMS。
SQL是一种查询语言,而MYSQL是数据库软件。 - 基础语句:
- 查询语句
SELECT ID FROM email
- 去重语句
--distinct 显示某字段不重复的具体值
SELECT DISTINCT Email FROM email
--distinct 显示某字段不重复的条数
SELECT COUNT(DISTINCT Email) FROM email;
--group by显示某字段不重复的具体值
SELECT Email FROM email GROUP BY Email;
- 前N个语句
SELECT * FROM email LIMIT 3;
- case语句
SELECT
case
when ID='1' then '第一'
when ID='2' then '第二'
else 0
end
from email
- 筛选语句 WHERE
语句解释:如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
SELECT * FROM email WHERE ID = 1;
- 分组语句 GROUP BY 和聚集函数
SELECT column_1 , SUM(column_2) as column
FROM Table_name
GROUP BY column_1;
函数 | 作用 |
---|---|
sum(column) | 求和 |
max(column) | 最大值 |
min(column) | 最小值 |
avg(column) | 平均值 |
first(column) | 第一条 |
last(column) | 最后一条 |
count(column) | 数量 |
- HAVING子句: 筛选成组后的各种数据,常包含聚集函数。where是针对整个表,不能包含聚集函数。
-- group by + HAVING
SELECT 类别 , SUM(数量) as 数量之和
FROM List
GROUP BY 类别
HAVING SUM(数量) > 10;
- 排序语句 ORDER BY
语句解释:将查询数据排序后再返回数据
SELECT 类别 , SUM(数量) as 数量之和
FROM List
GROUP BY 类别
-- 正序ASC,逆序DESC
ORDER BY SUM(数量) DESC;
- 函数
时间函数:SELECT NOW() ,SELECT curtime() …
数值函数: ABS(),CEIL() , MOD(x, y) , RAND() , ROUND() , TRUNCATE()
字符串函数: 字符串函数汇总 - SQL注释: 单行注释 # – ,多行注释 /**/
二、任务
项目一:查找重复的电子邮箱(难度:简单)
创建 email表,并插入如下三行数据
Id | |
---|---|
1 | a@b.com |
2 | c@d.com |
3 | a@b.com |
1)创建email表
2)插入数据,语句和结果如下:
3) 编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。
SELECT email FROM email GROUP BY email HAVING COUNT(email)>=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查询,输出表中所有大国家的名称、人口和面积。
1)创建表格
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
);
2)插入数据
INSERT INTO World VALUES( 'Afghanistan', 'Asia',652230,25500100,20343000);
INSERT INTO World VALUES( 'Albania', 'Europe' ,28748,2831741,12960000);
INSERT INTO World VALUES( 'Algeria', 'Africa' ,2381741,37100000,188681000);
INSERT INTO World VALUES( 'Andorra' , 'Europe' ,468,78115,3712000);
INSERT INTO World VALUES( 'Angola' , 'Africa' ,1246700,20609294,100990000);
3)输出表中所有大国家的名称、人口和面积
select name, population, area from World
WHERE area > 3000000 or (population > 25000000 AND gdp > 2000000)
- 结果