MySQL从入门到放弃-查询

学习内容

  1. 导入示例数据库,教程
  2. SQL是什么?MySQL是什么?
  3. 查询语句 SELECT FROM
    语句解释
    去重语句
    前N个语句
    CASE…END判断语句
  4. 筛选语句 WHERE
    语句解释
    运算符/通配符/操作符
  5. 分组语句 GROUP BY
    聚集函数
    语句解释
    HAVING子句
  6. 排序语句 ORDER BY
    语句解释
    正序、逆序
  7. 函数
    时间函数
    数值函数
    字符串函数
  8. SQL注释
  9. SQL代码规范
    SQL编程格式的优化建议
    SQL Style Guide

导入示例数据库

第一种方法是在命令提示符中用source命令,详见教程
另外,我们可以在Navicat导入,先新建数据库如图:
在这里插入图片描述
在右键点击建好的数据库,运行SQL文件:
在这里插入图片描述
这样就导入成功啦~

SQL与MySQL

  • SQL(发音为字母 S-Q-L或 sequel)是 Structured Query
    Language(结构化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言。设计
    SQL的目的是为了简单有效地从数据库中读写数据。
  • MySQL是一种DBMS(数据库管理系统),可以完成数据的所有存储、检索、管理和处理等操作。

查询语句

Select productNAME
  from products;

productNAME是列名,用来选需要查询的列,如查询多列,用,隔开即可,products是表名。Selectform是SQL的关键字,也叫保留字,关键字有特殊含义,不来用来做表名和列名。
另外,SQL不区分大小写,也没有空格、提行等要求要求。我的习惯是和英语一致,语句首字母大写,后面小写,并且有一些提行,语句结束有分号。(和一般的关键字全大写不太一样)

Select distinct productline
  from products;

distinct是实现去除重复的关键字。

Select productline
  from products
 limit 1,5;

前N行用limit实现,1,5表示从第2行开始的前5行结果,(MySQL和C,python一样也是从0开始编号)。如果从1行开始,0可以不写。

   Select checkNumber,case when amount>1e5 then'优秀' 
    		 			   when amount<=1e5 then'良好' 
    				       end as '总计'
     from payments;

CASE…END判断语句,用来根据查询数据新建一列。

筛选语句

Select checkNumber,amount
  from payments
 where amount>1e4;

where是筛选的关键字,后面跟一个判断条件。SQL的使用=进行相等判断,不等用!=<>均可,另外还有betweenis null等和逻辑判断符and,or,in,not,xor等。(和其他语言也比较类似)

Select productCode
   from products
  where productCode like 'S1%9';

通配符%_like配合使用,%代替多个字符,_代替单个字符

分组语句

Select productline,count(*) as num 
  from products
 group by productLine
having count(*)>10;

简单看下输出
在这里插入图片描述
group by用来实现,count(*)用来计数,having子句一般用来过滤分组。

排序语句

Select productline,count(*) as num 
  from products
 group by productLine
 order by num desc;

刚才的例子小小的改一下,order by 是排序的关键词,默认是升序asc,降序用desc

函数

与其他大多数计算机语言一样,SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便。主要有时间函数、数值函数、字符串函数等类。一般根据实际使用查询即可,这有一个汇总的表可以参考。

SQL注释

SQL单行注释用#或者-- 注意后面有空格。多行注释用/*开始,*/结束。

SQL代码规范

代码规范资料有,一般要求易读就行。我的自己风格可能也并不好,不过全大写的化感觉怪怪的。嗯~

作业

项目一:查找重复的电子邮箱(难度:简单)
创建 email表,并插入如下三行数据
±—±--------+
| Id | c |
±—±--------+
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
±—±--------+
编写一个 SQL 查询,查找 Email 表中所有重复的电子邮箱。
根据以上输入,你的查询应返回以下结果:
±--------+
| Email |
±--------+
| [email protected] |
±--------+
说明:所有电子邮箱都是小写字母。

– 创建表

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]');

– 简单的查询语言可以实现,解答如下:

Select Email
  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 |
±-------------±------------±-------------+

– 创建表

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);

– 这道题也可以用简单查询实现:

Select  name,population,area 
  from World 
 where population>25000000 or (area>3000000 and gdp>20000000);

至此,MySQL的简单查询已经基本学会啦,后续还需要多加练习。

猜你喜欢

转载自blog.csdn.net/YukiNoo/article/details/88942052