SQL小小白

MySQL入门(二):查询语句

2019-06-14  本文已影响0人  凡有言说

这个系列是当时参加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]

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.....

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 关键字。

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语句的用法
上一篇下一篇

猜你喜欢

热点阅读