菜鸟的MySQL学习之旅(二)—查询语句
MySQL 基础 (一)- 查询语句
- 1. SQL是什么?MySQL是什么?
- 2. 导入示例数据库
- 3. 查询语句
- 3.1. SELECT语句简介
- 3.2. SELECT语句的语法
- 3.3. 实例
- 4. 排序语句 ORDER BY
- 4.1 基本语法
- 4.2 实例
- 5. 筛选语句 WHERE
- 5.1 语句解释
- 5.2 运算符/通配符/操作符
- 5.3 实例
- 5.4 WHERE组合检索实例
- 5.5 使用通配符进行过滤
- 6. 函数
- 6.1 文本处理函数
- 6.2 时间处理函数
- 6.3 数值函数
- 7. 分组语句 GROUP BY
- 7.1 聚集函数
- 7.2 GROUP BY 函数
- 7.3 HAVING子句
- 8. SQL注释
- 9. SQL代码规范
- 10. 实践项目
- 10.1 查找重复的电子邮箱
- 10.2 查找大国
- 实验数据来源
1. SQL是什么?MySQL是什么?
SQL(发音为字母 S-Q-L或 sequel)是 Structured Query Language(结构 化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言。与其他语言(如英语或 Java、C、PHP这样的编程语言)不一样,SQL 中只有很少的词,这是有意而为的。设计 SQL的目的是很好地完成一项 任务——提供一种从数据库中读写数据的简单有效的方法
MySQL是一个数据库管理系统,也是一个关系数据库。它是由Oracle支持的开源软件。
2. 导入示例数据库
- 在Navicat创建数据库,命令如下:
mysql> CREATE DATABASE IF NOT EXISTS yiibaidb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
- 导入数据库
右击表 ->选择运行SQL命令
3. 查询语句
3.1. SELECT语句简介
使用SELECT语句从表或视图获取数据。表由行和列组成,如电子表格。 通常,我们只希望看到子集行,列的子集或两者的组合。SELECT语句的结果称为结果集,它是行列表,每行由相同数量的列组成。
3.2. SELECT语句的语法
SELECT column_1, column_2, ...
FROMtable_1
[INNER | LEFT |RIGHT] JOIN table_2 ON conditions
WHEREconditions
GROUP BY column_1
HAVING group_conditions
ORDER BY column_1
LIMIT offset, length;
- 语句解释
SELECT 语句由以下列表中所述的几个子句组成:SELECT之后是逗号分隔列或星号(*)的列表,表示要返回所有列。
FROM 指定要查询数据的表或视图。
JOIN 根据某些连接条件从其他表中获取数据。
WHERE 过滤结果集中的行。
GROUP BY 将一组行组合成小分组,并对每个小分组应用聚合函数。
HAVING 过滤器基于GROUP BY子句定义的小分组。ORDER BY 指定用于排序的列的列表。
LIMIT 限制返回行的数量。
语句中的SELECT和FROM语句是必须的,其他部分是可选的。
3.3. 实例
- 检索某几列
SELECT lastName,officeCode
FROM employees;
- 检索所有列
SELECT *
FROM employees;
- 去重(DISTINCT)
注意不能部分使用 DISTINCT
SELECT DISTINCT officeCode
FROM employees;
- 前N个语句筛选
SELECT *
FROM employees
LIMIT 5 OFFSET 2; --5表示返回多少行,2表示从那一行开始
- CASE…END 判断语句
CASE
WHEN 条件1 THEN 结果1
...
ENDCASE
WHEN 条件1 THEN 结果1
...
ELSE 其他 END
4. 排序语句 ORDER BY
4.1 基本语法
SELECT column_1, column_2, ...
FROMtable_1
ORDER BY column_1 -- 指定用于排序的列的列表
4.2 实例
- 正序排列
SELECT lastName,firstName,officeCode
FROM employees
ORDER BY officeCode; --默认正序排列
- 逆序排列
SELECT lastName,firstName,officeCode
FROM employees
ORDER BY officeCode DESC; --逆序排列,DESC作用于其前面的列名
5. 筛选语句 WHERE
5.1 语句解释
SELECT column_1, column_2, ...
FROMtable_1
WHEREconditions
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。 WHERE子句在表名(FROM子句)之后给出。
5.2 运算符/通配符/操作符
参考该博客
5.3 实例
- 检索单个值
SELECT lastName,firstName,officeCode
FROM employees
WHERE officeCode = 4;
- 不匹配检查
SELECT lastName,firstName,officeCode
FROM employees
WHERE officeCode != 4;
- 范围值检查
SELECT lastName,firstName,officeCode
FROM employees
WHERE officeCode BETWEEN 5 AND 7;
5.4 WHERE组合检索实例
- AND/OR操作符
/* AND用法 */
SELECT officeCode,city,country
FROM offices
WHERE country = 'USA' AND city = 'NYC';
/* OR用法 */
SELECT officeCode,city,country
FROM offices
WHERE country = 'USA' OR city = 'NYC';
- IN/NOT操作符
/*IN的格式用法*/
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' ) --与OR结果一样
ORDER BY prod_name;
/*NOT的格式用法*/
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01' --与 != 效果一样
ORDER BY prod_name;
5.5 使用通配符进行过滤
- LIKE操作符
(1)百分号(%)通配符
%表示任何字符出现任意次数。
例1:WHERE prod_name LIKE ‘Fish%’;
表示找出所有以词Fish起头的产品
例2:WHERE prod_name LIKE ‘%bean bag%’;
表示匹配任何位置上包含文本bean bag的值,不论它之前或之后出现什么字符。
例3:WHERE prod_name LIKE ‘F%y’;
表示找出以F起头、以y结尾的所有产品
注意:%不能匹配NULL,即WHERE prod_name LIKE ‘%’
(2)下划线(_)通配符
下划线的用途与%一样,但它只匹配单个字符,而不是多个字符。
6. 函数
6.1 文本处理函数
- 常用的文本处理函数
SELECT firstName,UPPER(firstName) As firstName_up
FROM employees
ORDER BY firstName;
6.2 时间处理函数
可参考菜鸟教程:时间处理函数
6.3 数值函数
- 常用数值函数
7. 分组语句 GROUP BY
7.1 聚集函数
- 实例
SELECT COUNT(*) AS num_items, MAX(price) AS price_max,MIN(price) AS price_min,AVG(DISTINCT price) AS price_avg --DISTINCT表示去重
FROM price;
7.2 GROUP BY 函数
分组是使用SELECT语句的GROUPBY子句建立的,通过下面的示例来了解分组函数。
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
结果:
vend_id num_prods
------- ---------
BRS01 3
DLL01 4
FNG01 2
SELECT语句指定了两个列:vend_id包含产品供应商的 ID, num_prods为计算字段(用 COUNT(*)函数建立)。GROUP BY子句指示 DBMS按vend_id排序并分组数据。这就会对每个vend_id而不是整个 表计算 num_prods一次。从输出中可以看到,供应商 BRS01有 3个产 品,供应商DLL01有4个产品,而供应商FNG01有2个产品。
7.3 HAVING子句
- 作用
WHERE 过滤行,而HAVING过滤分组。 - 示例
SELECT officeCode,COUNT(officeCode) AS code_num
FROM employees
GROUP BY officeCode
HAVING COUNT(*) >= 4;
8. SQL注释
/* 这是一条注释,允许跨行注释 */
SELECT officeCode,city,country --这是一条注释
FROM offices #这是一条注释
WHERE country = 'USA' AND city = 'NYC';
9. SQL代码规范
SQL代码规范参考
10. 实践项目
10.1 查找重复的电子邮箱
创建 email表,并插入如下三行数据
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+
编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。
根据以上输入,你的查询应返回以下结果:
±--------+
| Email |
±--------+
| a@b.com |
±--------+
说明:所有电子邮箱都是小写字母。
第一步:在navicat命令行界面创建Email表
mysql> use test01;
Database changed
mysql> -- 创建表
CREATE TABLE email (
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
);
Query OK, 0 rows affected
mysql>
-- 插入数据
INSERT INTO email VALUES('1','a@b.com');
INSERT INTO email VALUES('2','c@d.com');
INSERT INTO email VALUES('3','a@b.com');
Query OK, 1 row affectedQuery OK, 1 row affectedQuery OK, 1 row affected
第二步:编写SQL查询
SELECT Email
FROM email
GROUP BY Email
HAVING COUNT(*) >= 2;
结果:
10.2 查找大国
第一步:在navicat命令行界面创建world表
mysql> use test01;
Database changed
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
);
Query OK, 0 rows affectedmysql>
-- 插入数据
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);
Query OK, 1 row affectedQuery OK, 1 row affectedQuery OK, 1 row affectedQuery OK, 1 row affectedQuery OK, 1 row affected
第二步:创建SQL查询
SELECT name,population,area
FROM world
WHERE area >= 3000000 OR population >= 25000000 AND gdp >= 20000000;
结果:
实验数据来源
易百教程MySQL示例数据库yiibaidb
菜鸟的MySQL学习之旅(二)—查询语句相关推荐
- 我的MYSQL学习心得(二)
我的MYSQL学习心得(二) 原文:我的MYSQL学习心得(二) 我的MYSQL学习心得(二) 我的MYSQL学习心得(一) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...
- Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序
Mysql学习总结十二:系统变量.用户变量.定义条件和处理程序 1.变量 1.1 系统变量 1.1.1 系统变量的分类 1.1.2 查看系统变量 1.2 用户变量 1.2.1 用户变量的分类 1.2. ...
- HALCON学习之旅(二)
HALCON学习之旅(二) 文章目录 HALCON学习之旅(二) 1.HALCON用户界面操作符 2.HACLON基础语法 ①.运算符 ②.Tuple数组 ③.字符数字格式化 1.HALCON用户界面 ...
- SSE指令集学习之旅(二)
SSE指令集学习之旅(二) 文章目录 SSE指令集学习之旅(二) 1.BGR->GRAY 2.summarize(归纳总结) 1.BGR->GRAY 知识来源:SSE图像算法优化系列一 代 ...
- MySQL学习(一)——常用语句
1. 登录和退出MySQL服务器 # 登录MySQL mysql -u [用户名] -p[对应用户名密码] $ mysql -u root -p12345612# 退出MySQL数据库服务器 exit ...
- MySQL学习记录 (四) ----- SQL数据管理语句(DML)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- Mysql常规27种sql查询语句
Mysql常规27种sql查询语句 话不多说,直接上干货 1.查询部分列 select 列名 from 表名 例:员工表中查询员工编号.名字.邮箱 select employee_id,employe ...
- MySQL 基础 (一)- 查询语句
MySQL 基础入门 Day2 MySQL 基础 (一)- 查询语句 一.学习内容 1. 导入示例数据库 1.1 MySQL示例数据库结构 2. SQL是什么?MySQL是什么? 2.1 SQL 2. ...
- mysql 学习笔记(二)
常用情景 标签:常见 面试 sql 习题 1.列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 创建表: mysql> CREATE TABLE employee921(i ...
最新文章
- 快速人体姿态估计--Pose Proposal Networks
- 【深度思考】javaweb框架技术心得
- ATEN命令--北大青鸟benet课程
- ClickHouse内核分析-MergeTree的Merge和Mutation机制
- Redis基础-下载安装配置
- qt5 窗体显示完毕信号_iPhone手机信号不好?试试这样设置,随时随地让你的手机信号满格...
- linux 混杂设备 miscdevice设备介绍
- OpenCV读取多幅图片,读取系列图片,读取文件夹中指定图像类型的系列图片
- 探究Windows内核你知多少
- 书山有路28期预告:《人性的枷锁》
- 如何在WP7中使用自定义字体
- 电子表格计算机操作题及素材,2015计算机应用基础-excel电子表格题目.doc
- DllMain 参数解释
- 个人博客项目之editormd实现文章详情页面预览
- oracle 9i for redhat9 下载,RedHat9上安装Oracle9i手记(原作:hotman_x)
- 推荐一个去广告的插件: Adblock Plus,非常好用
- 月中工作总结_在全职工作的9个月中,我是如何从新手转到软件工程师的
- steamvr2.0 vr模式下,多相机共存
- 实现手机浏览器跳转微信关注公众号
- Prescan 8.5.0 许可证过期(Could not checkout a valid license)
热门文章
- 全球名校AI课程库(27)| MIT麻省理工 · 数据结构与算法设计课程『Design and Analysis of Algorithms』
- Android Weekly - 42 : 打铁还需自身硬
- 【seo】网页开发 代码优化 3
- C++面向对象程序设计陈维兴版第四章所有例题
- 计算机无法连接iphone,iTunes不识别iPhone?iTunes无法连接iPhone怎么办
- ap计算机科学考题,把AP计算机A Free Response题做成阅读理解理解翻译题
- pytorch_nicp编译
- 不讲武德,Kubernetes 弃用 Docker刷爆了网络,我们公司也慌了!
- ant Design 表单以及表单验证
- 为什么没有参数的函数(与实际函数定义相比)会编译?