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
在这里插入图片描述

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`;
在这里插入图片描述

二、语句类型

本章节的展示基于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 ;

1

4.特殊案例
4.1去重语句
(1)定义:在 SELECT 后面加入 DISTINCT 可筛选出不同的(具有唯一性)的值。
(2)目标:查询yiibaidb数据库customers表格中city值有哪些

SELECT DISTINCT city  FROM customers ;

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 ;

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 ;
在这里插入图片描述

对于搜索函数


在这里插入图片描述

(二)筛选语句 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 子句中。


在这里插入图片描述

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


在这里插入图片描述

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

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


在这里插入图片描述

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


在这里插入图片描述

5.运算符
MySQL 主要有以下几种运算符:
  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

(1)算术运算符
MySQL 支持的算术运算符包括:


在这里插入图片描述

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

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

在这里插入图片描述

(3)逻辑运算符

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

在这里插入图片描述

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

在这里插入图片描述

(三)分组语句 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类别数据


在这里插入图片描述

注意:在分组后的结果中,不可以使用 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排序


在这里插入图片描述

三、函数

MySQL 有很多内置的函数:

  • 字符串函数
  • 数字函数
  • 日期函数

具体可查看MySQL 函数|菜鸟教程

四、SQL注释

(一)单行注释

1.使用 #

#单行注释方法一
select * from customers;

或者
2.使用--


-- 单行注释方法二
select * from customers

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

(二)多行注释

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

/*
此处为注释....
*/
select * from customers;

五、SQL代码规范

可参看

SQL编程格式的优化建议
SQL style guide by Simon Holywell

练习

练习一:查找重复的电子邮箱(难度:简单)
创建 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
在这里插入图片描述

项目二:查找大国(难度:简单)
创建如下 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);

在这里插入图片描述

参考资料:
1.MySQL导入示例数据库
2.MySQL命令行学习
3.MySQL命令行工具和基本操作
4.MySQL基础 - 查询语句
5.MySQL 教程
6.SQL的case when then else end语句的用法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容