#作业#
项目一:查找重复的电子邮箱(难度:简单)
创建 email表,并插入如下三行数据
+----+---------+
| Id | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
+----+---------+
编写一个 SQL 查询,查找 Email 表中所有重复的电子邮箱。 根据以上输入,你的查询应返回以下结果:
+---------+
| Email |
+---------+
| a@b.com |
+---------+
说明:所有电子邮箱都是小写字母。
解决步骤;
建立数据库->建立表->添加纪录->查询;
注意:每进行一步最好进行验证,该步骤是否有问题;
建立数据库-创建表
错误点1:建立数据库后,没有使用该数据库,导致建表操作失败;
+:通过上下按键可以快速获得之前输入的语句;
添加记录
一次添加一行&一次添加多行;
错误点2:VALUES,拼写错误
查询重复记录
思路:条件为Email值计数大于1,返回Email值/Email值+重复次数;使用GROUP BY,结合HAVING+count()函数;
SELECT Email FROM email GROUP BY Email HAVING count(*)>1;
SELECT Email,count(*) FROM email GROUP BY Email HAVING count(*)>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 |
+--------------+-------------+--------------+
解决步骤:建立表-插入记录-查询
查询:多条件查询,A或(B且C)=A OR ( B AND C)、
创建表
插入记录
查询
使用表的别名能够大大加快查询速度;
SELECT name,population,area FROM world WHERE area>3000000 OR (population>25000000 AND gdp>20000000);
SELECT w.name,w.population,w.area FROM world as w WHERE w.area>3000000 OR (w.population>25000000 AND w.gdp>20000000);
2019/5/12 23:30
学习任务&笔记(以下内容整理自网络&书上)
1.1 MySQL 软件安装及数据库基础
#学习内容#
1.软件安装及服务器设置。
2.(选做,但是强烈建议) 使用图形界面软件 Navicat for SQL
3.数据库基础知识
数据库:存放数据的仓库。长期存储在计算机内、有组织的、可共享的大量数据的集合。
关系型数据库:关系模式再某一时刻对应的关系的集合。
二维表:每个关系的数据结构是一张规范的二维表。
行:数据的一条记录
列:一个字段;
主键:PRIMARY KEY,唯一标识符,在其表内不可有重复值。
外键:FOREIGN KEY,关联表的主键;
4.MySQL数据库管理系统
视图:视图是从一个或几个基本表(或视图)导出的表,是一个虚表。
存储过程:是由过程化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中。
1.2 MySQL 基础 (一)- 查询语句
#学习内容#
1-导入示例数据库
CREATE Database;
USE Database;
SOURCE D:/bin1/bin2/database.sql;
2-SQL是什么?MySQL是什么?
SQL:Structured Query Language,结构化查询语言;
MySQL:是一个关系型数据库管理系统(DMS)
3-查询语句 SELECT FROM
1)SELECT语句
SELECT 字段1,字段2...
FROM 表1,表2...
JOIN 表3 ON conditions(连接条件)
WHERE conditions(查询条件)
GROUP BY column1(按column1的值分组)
HAVING group_conditions(过滤器,基于GROUPBY定义的分组)
ORDER BY column1 ASC|DESC(按column1的值升序/降序,默认升序)
LIMIT offset,length(限制返回行的数量,offset默认0)
2)重复数据
---统计重复数据(利用COUNT(*)、GROUPBY、HAVING)
---过滤重复数据(DISTINCT/GROUP BY)
SELECT DISTINCT coulum1 FROM table1;
SELECT column1 FROM table1 GROUP BY column1;
4-筛选语句 WHERE
1)运算符:
算数运算符:+、-、*、/(DIV)、%(MOD)
比较运算符:=(等于)、<>/!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、<=>(严格比较两个NULL是否相等)
BETWEEN、NOT BETWEEN、IN、NOT IN、LIKE、REGEXP(RLIKE)、IS NULL、IS NOT NULL
逻辑运算符:NOT(!)、AND、OR、XOR(异或)
位运算符:&、|、^、!、<<、>>
2)通配符(%、_)
%代表零个或多个字符;
_代表单个字符;
5-分组语句 GROUP BY
按照某列的值进行分组,相同值的为一组;
HAVING子句用来限制分组后的条件,理解为第二个WHERE,GROUPBY分组后需要再筛选,但是不能再写WHERE,用HAVING来限定条件。
6-排序语句 ORDER BY
正序ASC、逆序DESC
7-函数
1)时间函数
now(),返回当前日期和时间;
timediff(),计算两个TIME或DATETIME之间的差值
2)数值函数
avg(),取平均值
count(),计数
sum(),求和
3)字符串函数
format(),格式化
length(),char_length(),按字节和字符获取字符串长度
substring(),从某个长度开始取子串;
8-SQL注释
--这是单行注释
/*这是
多行
注释*/
9-SQL代码规范
命名:可读性强,字母数字下划线组成
格式:关键字全大写,表名字段名小写,适当用空格、缩进、回车;
格式化代码工具/插件:SQLinForm、Sublime添加zsong/SqlBeautifier插件
2019年5月13日 21点44分