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学习之旅(二)—查询语句相关推荐

  1. 我的MYSQL学习心得(二)

    我的MYSQL学习心得(二) 原文:我的MYSQL学习心得(二) 我的MYSQL学习心得(二) 我的MYSQL学习心得(一) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...

  2. Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序

    Mysql学习总结十二:系统变量.用户变量.定义条件和处理程序 1.变量 1.1 系统变量 1.1.1 系统变量的分类 1.1.2 查看系统变量 1.2 用户变量 1.2.1 用户变量的分类 1.2. ...

  3. HALCON学习之旅(二)

    HALCON学习之旅(二) 文章目录 HALCON学习之旅(二) 1.HALCON用户界面操作符 2.HACLON基础语法 ①.运算符 ②.Tuple数组 ③.字符数字格式化 1.HALCON用户界面 ...

  4. SSE指令集学习之旅(二)

    SSE指令集学习之旅(二) 文章目录 SSE指令集学习之旅(二) 1.BGR->GRAY 2.summarize(归纳总结) 1.BGR->GRAY 知识来源:SSE图像算法优化系列一 代 ...

  5. MySQL学习(一)——常用语句

    1. 登录和退出MySQL服务器 # 登录MySQL mysql -u [用户名] -p[对应用户名密码] $ mysql -u root -p12345612# 退出MySQL数据库服务器 exit ...

  6. MySQL学习记录 (四) ----- SQL数据管理语句(DML)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  7. Mysql常规27种sql查询语句

    Mysql常规27种sql查询语句 话不多说,直接上干货 1.查询部分列 select 列名 from 表名 例:员工表中查询员工编号.名字.邮箱 select employee_id,employe ...

  8. MySQL 基础 (一)- 查询语句

    MySQL 基础入门 Day2 MySQL 基础 (一)- 查询语句 一.学习内容 1. 导入示例数据库 1.1 MySQL示例数据库结构 2. SQL是什么?MySQL是什么? 2.1 SQL 2. ...

  9. mysql 学习笔记(二)

    常用情景 标签:常见 面试 sql 习题 1.列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 创建表: mysql> CREATE TABLE employee921(i ...

最新文章

  1. 启动器和选择器学习-----(5)启动器
  2. 使用QT的一些小Tipster
  3. 翻译:集群索引:通往SQL Server索引级别3的阶梯
  4. php 中 t怎么打开,怎么在PHP项目中实现一个explort() 功能
  5. 服务器镜像工作原理,镜像服务器的原理是什么,怎么工作的
  6. 网络IO模型详细分析
  7. java spark 环境_在 IntelliJ IDEA 中配置 Spark(Java API) 运行环境
  8. CF321E Ciel and Gondolas BZOJ 5311 贞鱼
  9. linux如何正确关机,重启
  10. 使用pandas的merge出现Empty DataFrame 和 Index: []
  11. ADS 修改绘图单位
  12. ts保姆级教程,别再说你不会ts了
  13. c语言三角分解法解方程,用直接三角分解法解线性方程组.ppt
  14. 有关神经网络的训练算法,深度神经网络训练方法
  15. 《14天动手学深度学习》——语言模型
  16. 是CEE、DCB、DCE还是EEDC?
  17. 社会工程学攻击之网站钓鱼
  18. JAVA两个表相关联_java实现两张表的关联查询(非数据库语言)
  19. android蓝牙连接通信的实现
  20. python跟谁学_Python和Java学哪个更好?

热门文章

  1. 【Navicat】Cannot load OCI DLL, 87
  2. “中国探月工程”,“长征三号火箭”,“月球车”,英语怎么说?
  3. s5pv210 android4.0.3调试,如何去掉SGX540硬件加速
  4. 用非正式沟通减少需求和交互的矛盾
  5. Linux没有默认设置root密码
  6. 不自律的人,如何把一件事做成功?
  7. 云开发端午节包粽子送祝福语微信小程序源码
  8. JS 通过百度地图获取详细地址及经纬度
  9. ARCGIS中按照某字段属性批量导出shp ,即将一个shp图层分割成单个的shp
  10. windows端口被占用的解决方法