mysql 查找属性并去重_MySQL入门(二):查询语句

这个系列是当时参加Datawhale MySQL 第五期的笔记

SQL是什么?MySQL是什么?

1.SQL

Structured Query Language(结构化查询语言)的缩写。它是一种专门用来与数据库沟通的语言。

2.MySQL

是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

一、导入数据库

第二步:将下载的文件解压缩到文件夹中(这里地址为D:\data\yiibaidb\yiibaidb.sql)

第三步:连接到MySQL服务器并创建数据库

1.连接数据库

找到MySQL Server 8.0\bin位置,然后打开命令提示符

cd C:\Program Files\MySQL\MySQL Server 8.0\bin

mysql -hlocalhost -uroot -p

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

2.创建数据库

mysql> CREATE DATABASE IF NOT EXISTS yiibaidb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

mysql> use yiibaidb;

3.导入数据

mysql> use yiibaidb;

mysql> source D:\data\yiibaidb\yiibaidb.sql

第四步:测试并导入结果

mysql> select city,phone,country from `offices`;

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

二、语句类型

本章节的展示基于Navicat 12.1

(一)查询语句 SELECT FROM

1.语句解释

从一个或多个表中检索信息。

2.通用语法

以下为在MySQL数据库中查询数据通用的 SELECT 语法:

SELECT column_name,column_name

FROM table_name

[WHERE Clause]

[LIMIT N][ OFFSET M]

查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。

SELECT 命令可以读取一条或者多条记录。

可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

可以使用 WHERE 语句来包含任何条件。

可以使用 LIMIT 属性来设定返回的记录数。

可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

3.操作示例

目标:查询 yiibaidb数据库customers表格的信息

SELECT * FROM customers ;

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1

4.特殊案例

4.1去重语句

(1)定义:在 SELECT 后面加入 DISTINCT 可筛选出不同的(具有唯一性)的值。

(2)目标:查询yiibaidb数据库customers表格中city值有哪些

SELECT DISTINCT city FROM customers ;

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

2

4.2 限制语句

(1)定义:使用 LIMIT 语句可以限制返回的条数,若同时使用 OFFSET 会加入偏移(即从第几行开始取)。

需要注意:第一个被检索的行是第 0行,而不是第 1行。例如,LIMIT 1 OFFSET 1会检索第 2行,而不是第 1行。

(2)目标:从3行开始选取yiibaidb数据库customers表5条数据。

SELECT * FROM customers LIMIT 5 OFFSET 3 ;

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

3

4.3 CASE.WHEN.END判断语句

(1)定义:CASE WHEN END 语法一般用于判断条件后返回对应的值

(2)分类:

-- 简单函数

CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END

-- 搜索函数

CASE WHEN [expr] THEN [result1]…ELSE [default] END

需要注意:case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

(3)目标:

对于简单函数

SELECT *,

CASE country

WHEN 'France' THEN '欧洲'

WHEN 'USA' THEN '美洲'

ELSE '其他'

END '大洲'

FROM customers ;

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

对于搜索函数

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

(二)筛选语句 WHERE

1.语句解释

实现有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

2.通用语法

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

3.操作符

以下为操作符列表,可用于 WHERE 子句中。

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

操作示例:

目标:查找yiibaidb数据库customers表中符合以下条件数据:国别是美国且creditlimit大于100000

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

4.通配符

在 SQL 中,通配符与 SQL LIKE 操作符一起使用。SQL 通配符用于搜索表中的数据。

在 SQL 中,可使用以下通配符:

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

操作示例:

目标:查找yiibaidb数据库customers表中符合以下条件数据:contactfirstname 是 J 开头

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

5.运算符

MySQL 主要有以下几种运算符:

算术运算符

比较运算符

逻辑运算符

位运算符

(1)算术运算符

MySQL 支持的算术运算符包括:

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL。

(2)比较运算符

SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

(3)逻辑运算符

逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

(4)位运算符

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

(三)分组语句 GROUP BY

1.语句解释

GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

2.通用语法

SELECT column_name, function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

3.操作示例

目标:统计yiibaidb数据库customers表中country类别数据

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

注意:在分组后的结果中,不可以使用 WHERE 对分组结果进行筛选,只能使用 HAVING 语句

(四)排序语句 ORDER BY

1.语句解释

对读取的数据进行排序,此时可以使用 MySQL 的 ORDER BY 子句来设定想按哪个字段哪种方式来进行排序,再返回搜索结果。

2.通用语法

SELECT field1, field2,...fieldN FROM table_name1, table_name2...

ORDER BY field1, [field2...] [ASC [DESC]]

ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。如果希望按照降序对记录进行排序,可以使用 DESC 关键字。

可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。

可以设定多个字段来排序。

可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。

可以添加 WHERE...LIKE 子句来设置条件。

3.操作示例

目标:对yiibaidb数据库customers表数据先按照customername排序,再按照customernumber排序

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

三、函数

MySQL 有很多内置的函数:

字符串函数

数字函数

日期函数

四、SQL注释

(一)单行注释

1.使用 #

#单行注释方法一

select * from customers;

或者

2.使用--

-- 单行注释方法二

select * from customers

注意:--后跟有一个空格

(二)多行注释

注释从 /* 开始,到 / 结束, / 和 */ 之间的任何内容都是注释。

/*

此处为注释....

*/

select * from customers;

五、SQL代码规范

可参看

练习

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

创建 email表,并插入如下三行数据

+----+---------+

| Id | Email |

+----+---------+

| 1 | a@b.com |

| 2 | c@d.com |

| 3 | a@b.com |

+----+---------+

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

根据以上输入,你的查询应返回以下结果:

+---------+

| Email |

+---------+

| a@b.com |

+---------+

说明:所有电子邮箱都是小写字母。

第一步:新建数据库

mysql> CREATE DATABASE IF NOT EXISTS emailtest DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

mysql> use emailtest;

第二步:新建数据表

mysql> CREATE TABLE email ( ID INT NOT NULL PRIMARY KEY, Email VARCHAR(255));

第三步:插入数据

mysql> INSERT INTO email VALUES('1','a@b.com');

mysql> INSERT INTO email VALUES('2','c@d.com');

mysql> INSERT INTO email VALUES('3','a@b.com');

第四步:查询数据

SELECT Email FROM email GROUP BY Email HAVING COUNT(Email)>1

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

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

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

+--------------+-------------+--------------+

第一步:新建数据库

mysql> CREATE DATABASE IF NOT EXISTS worldtest DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

mysql> use worldtest;

第二步:新建数据表

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

第三步:插入数据

mysql>INSERT INTO World VALUES( 'Afghanistan', 'Asia',652230,25500100,20343000);

mysql>INSERT INTO World VALUES( 'Albania', 'Europe' ,28748,2831741,12960000);

mysql>INSERT INTO World VALUES( 'Algeria', 'Africa' ,2381741,37100000,188681000);

mysql>INSERT INTO World VALUES( 'Andorra' , 'Europe' ,468,78115,3712000);

mysql>INSERT INTO World VALUES( 'Angola' , 'Africa' ,1246700,20609294,100990000);

第四步:查询数据

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

d0704e4c7df7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

在这里插入图片描述

参考资料:

1.MySQL导入示例数据库

2.MySQL命令行学习

3.MySQL命令行工具和基本操作

4.MySQL基础 - 查询语句

5.MySQL 教程

6.SQL的case when then else end语句的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值