请于4月2日22:00前完成,在本文章评论打卡。逾期尚未打卡的会被清退。
SQL是什么?MySQL是什么?
SQL:sequel是Structured Query Language(结构化查询语句)的缩写。SQL是一种专门用来与数据库沟通的语言。MySQL是一个关系型数据库管理系统。
查询语句 SELECT FROM
语句解释:所需的列名写在select关键字之后,from关键字指出从哪个表中检索数据。
去重语句:使用distinct关键字,它只是数据库只返回不同的值;distinct作用于所有的列
select distinct country from offices;
前N个语句:用limit,例如select city from offices limit 5;这一点和别的数据库软件不一样。
CASE…END判断语句:
参考于:https://www.cnblogs.com/clphp/p/6256207.html
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
WHEN 条件3 THEN 结果3
…
WHEN 条件N THEN 结果N
END
这个暂时实现不了
筛选语句 WHERE
语句解释
在select语句中,数据根据where子句中指定的搜索条件进行过滤。where子句在表名(from子句)之后给出
运算符/通配符/操作符:
运算符/操作符总结:
通配符总结:借用博客园的大佬
https://www.cnblogs.com/hrhguanli/p/3826218.html
分组语句 GROUP BY
聚集函数:
1)avg() 返回某列的平均值
2)count() 返回某列的行数
3)max() 返回某列的最大值
4)min() 返回某列的最小值
5)sum() 返回某列之和
语句解释
HAVING子句查询:过滤条件
排序语句 ORDER BY
语句解释:order by 列名1,列名2,···列名n
可以根据多个列进行排序。当按照多个列进行排序时,只有第一列相同时才使用第二列:
正序、逆序:正序排序时,可以使用asc作为排序方式的关键词,也可以不使用。逆序时,一定要使用desc作为关键词。
函数
时间函数
获得当前日期+时间(date + time):select now();
获得当前日期+时间(date + time):sysdate()
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。
数值函数
ABS(x):返回 x 的绝对值
CEIL(x):返回不小于 x 的最小整数,也就是说得大于或等于x的最小整数,同义词:ceiling(x)
FLOOR(x):返回不大于 x 的最大整数(与CEIL的用法刚好相反)
MOD(x,y):返回数字x除以y后的余数:x mod y 和 x%y 的结果相同;模数和被模数任何一个为NULL(无效数)结果都为 NULL,余数可以有小数;除数为0不抛出异常
ROUND(X[,D]):将数字X四舍五入到指定的小数位数D
①如果不指定D,则默认为0
②如果D是负数,表示从小数点的左边进行四舍五入
TRUNCATE(X,D):将数字X截断到指定的小数位数D(不四舍五入)
①如果D为0,表示不要小数
②如果D是负数,表示从小数点的左边进行截断
注意:TRUNCATE 和 ROUND 的区别在于 TRUNCATE 仅仅是截断,而不进行四舍五入
RAND():返回一个随机浮点数v(0<=v<1.0)
RAND(x):指定整数x,则用作种子值,产生一个可重复的数字序列
利用RAND()函数可以取任意指定范围内的随机数
类似于shell> $((RANDOM % 100))得到随机值
比如:产生 0~100 内的任意随机整数
注意:
①当在 WHERE 子句中使用RAND()时,每次当WHERE执行时都要重新计算 RAND()
②不能在ORDER BY子句中使用带有随机值的列
但是,可以以随机的顺序从表中检索行
例如:mysql> SELECT * FROM players ORDER BY RAND();
③ORDER BY RAND()常和LIMIT子句一起使用:
例如:mysql> SELECT * FROM table1,table2 WHERE a=b AND c 字符串函数: SQL语句中的单行注释使用 – SQL语句中的多行注释采用 /…/ 项目一:查找重复的电子邮箱(难度:简单) SELECT Email SELECT Email FROM Email 项目二:查找大国(难度:简单) 大家请在下方打卡表格处第二次作业链接。 项目一 项目二 【任务说明】
详见参考:MySQL常用字符串函数https://www.cnblogs.com/geaozhang/p/6739303.html
一、单行注释
二、多行注释
[SQL编程格式的优化建议] https://zhuanlan.zhihu.com/p/27466166
[SQL Style Guide] https://www.sqlstyle.guide/#作业#
– 创建表
CREATE TABLE email (
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
)
– 插入数据
INSERT INTO email VALUES(‘1’,‘[email protected]’);
INSERT INTO email VALUES(‘2’,‘[email protected]’);
INSERT INTO email VALUES(‘3’,‘[email protected]’);
–查询数据
1:先按邮箱Email分组,生成临时表A,表A中有Email和对应出现的次数。然后判断次数是否大于1
FROM (SELECT Email, COUNT(*) AS Sum
FROM Email
GROUP BY Email) AS A
WHERE A.Sum>1
2:利用HAVINGWHERE 关键字无法与聚合函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据。
GROUP BY Email
HAVING COUNT(*)>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
);
– 插入数据
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);
查询目标:name,population,area
查询范围:World表
查询条件:面积超过300万平方公里 或 人口超过2500万
#打卡规则#
本次任务需放上作业code及输出结果截图
学员微信群编号+姓名+CSDN博客或Github链接。
比如我是0号,打卡内容就是 000+杨煜+https://github.com/magicyang5000/
– 创建表
CREATE TABLE email (
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
)
– 插入数据
INSERT INTO email VALUES(‘1’,‘[email protected]’);
INSERT INTO email VALUES(‘2’,‘[email protected]’);
INSERT INTO email VALUES(‘3’,‘[email protected]’);
– 创建表
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
);
– 插入数据
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);
任务二是最最基础的查询语句,可以说学完本次课程,SQL语句就掌握了30%了。
语言规范非常重要,请大家认真仔细阅读。请记住,你写SQL需要考虑别人review时的心情。写的过于杂乱会分分钟造成暴力事件。
学习内容中函数部分,是让大家了解下MySQL可以怎样处理一些数据。了解些常用的,等实际中遇到了再回头查找详细就行。
祝大家学习开心。?