本文是对之前学习 MySQL 的一个总结,使用思维导图的方式将涉及到的知识点罗列出来,一方面作为自己对于知识点的归纳,另一方面也便于日后查询。

在该篇文章中将对 MySQL 的基本使用、检索基本数据、数据排序和过滤数据部分做一小结,具体见图。

  • 单行注释
    – 注释
    MySQL 中也可以使用 # 单行注释
  • 多行注释
    /* 多行注释 */

1. 连接、创建、选择、显示数据库

数据库(Database)由一组相关的对象组成,主要包括表、索引、视图、存储过程等。为了方便对象的管理和访问,数据库通常使用模式(Schema)来组织这些对象;模式是一个逻辑单元,或者一个存储对象的容器。

一个数据库由多个模式组成,一个模式由许多对象组成;在不同模式中可以创建同名的对象。

MySQL 中的模式和数据库是相同的概念,一个数据库对应一个同名的模式。

删除数据库使用 DROP DATABASE <数据库名称> ;

1.1 管理模式

1.1.1 创建模式

创建了数据库之后,还需要创建模式才能够存储数据库对象。

创建模式 CREATE SCHEMA 命令用于创建一个新的模式:

-- SQL Server 以及 PostgreSQL 实现
CREATE SCHEMA hr[AUTHORIZATION user1];

以上语句创建一个名为 hr 的模式,可选的 AUTHORIZATION 表示为该模式指定一个拥有者 user1,拥有者是一个已经存在的数据库用户。

  • SQL Server 创建数据库时会自动创建一个名为 dbo 的模式;
  • PostgreSQL 创建数据库时会自动创建一个名为 public 的模式。
  • MySQL 中的模式等价于数据库,因此 CREATE SCHEMA 等价于 CREATE DATABASE
  • Oracle 中的模式等价于用户,因此使用 CREATE USER 命令创建用户时就相当于创建一个同名的模式:
CREATE USER hrIDENTIFIED BY xxx;

Oracle 也提供了 CREATE SCHEMA 命令,但不是用于创建模式,而是用于在模式中创建表、视图以及执行授权操作。

1.1.1 删除模式

不需要的模式可以使用 DROP SCHEMA 命令删除:

-- SQL Server 以及 PostgreSQL 实现
DROP SCHEMA hr;

MySQL 中的模式等价于数据库,因此 DROP SCHEMA 等价于 DROP DATABASE

Oracle 中的模式等价于用户,因此使用 DROP USER 命令创建用户时就相当于创建一个同名的模式:

-- Oracle 实现
DROP USER hr;

如果模式中存在对象,则无法删除该模式;可以先删除其中的对象,再删除模式。某些数据库支持级联删除:

-- PostgreSQL 实现
DROP SCHEMA hr CASCADE;-- Oracle 实现
DROP USER hr CASCADE;

CASCADE 表示删除模式的同时,删除该模式中的所有对象。

2. 查询检索单列、多列、不重复数据及限制返回个数


SQL 使用 DISTINCT 关键字去除查询结果中的重复数据。注意两点:

  1. DISTINCT 位于 SELECT 之后而不是像其他过滤条件一样位于 WHERE 之后;
  2. 查询结果中重复的记录只会出现一次。
  • 为列设置别名
SELECT product_id AS id, product_name AS name FROM product;
  • 为表设置别名
SELECT p.product_id AS id, p.product_name AS name FROM product AS p;

3. 查询结果排序

  1. ORDER BY 用于指定排序的字段;
  • ASC 表示升序排序(Ascending),
  • DESC 表示降序排序(Descending),默认值为升序排序。

多列排序是指基于多个字段或表达式的排序,使用逗号进行分隔。多列排序的语法如下:

SELECT col1, col2, ...FROM tORDER BY col1 ASC, col2 DESC, ...;

首先基于第一个字段进行排序;对于第一个字段排序相同的数据,再基于第二个字段进行排序;依此类推。

  1. 对于含有空值 NULL 的排序,不同数据库有区别:
  • MySQL 和 SQL Server 认为空值最小,升序时空值排在最前,降序时空值排在最后;
  • Oracle 和 PostgreSQL 认为空值最大,升序时空值排在最后,降序时空值排在最前;同时支持使用 NULLS FIRST 和 NULLS LAST 指定空值的顺序。

解决空值的排序问题还有一个更通用的方法,就是利用 COALESCE 函数将空值转换为一个指定的值。例如,将奖金为空的数据转换为 0,这样升序排序时一定在最前:

SELECT emp_name, COALESCE(bonus, 0) AS bonusFROM employeeWHERE dept_id = 2ORDER BY COALESCE(bonus, 0);

4. 过滤数据(where 子句)


判断是否为 NULL 时,只能使用特定的谓词 IS NULL 或者 IS NOT NULL

  • 选取 NULL 的记录使用 is NULL
SELECT product_name, purchase_price FROM product WHERE purchase_price is NULL;
  • 选取非 NULL 的记录使用 is not NULL
SELECT product_name, purchase_price FROM product WHERE purchase_price is not NULL;

MySQL 学习笔记(1)— 创建/连接/选择/显示数据库(表) 查询单列(多列/所有列)/查询返回特定的行数 各种排序(单列/多列/降序/组合排序) 过滤数据相关推荐

  1. PHP + MySQL 学习笔记(三)--- 分页显示 MySQL 资料表,使用 PHP 程式做分页 page 画面输出,PHP\HTML\MySQL 的穿插使用

    我在 "PHP + MySQL 学习笔记(一)- 延续前期 HTML + CSS 规划 插入 PHP 程式做画面输出" 这篇笔记里做了一个卜卦的 HTML 画面,也做了一个 MyS ...

  2. MySQL学习笔记8:权限管理、数据库备份与设计

    1.前言 学习视频源自:[狂神说Java]MySQL最新教程通俗易懂 B站视频链接:https://www.bilibili.com/video/BV1NJ411J79W [狂神说Java]MySQL ...

  3. MySQL学习笔记_3_MySQL创建数据表(中)

    MySQL创建数据表(中) 三.数据字段属性 1.unsigned[无符号] 可以让空间增加一倍 比如可以让-128-127增加到0-255 注意:只能用在数值型字段 2.zerofill[前导零] ...

  4. MySql学习笔记(一):创建数据库,创建表,加载数据,数据检索

    一.准备工作 1.1 安装mysql 一路next的操作这里就不做记录了. 1.2 配置mysql 安装完成后,将下面路径C:\Program Files\MySQL\MySQL Server 5.7 ...

  5. MySQL学习笔记_4_MySQL创建数据表(下)

    MySQL创建数据表(下) 五.数据表类型及存储位置 1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎. 2. showengines ...

  6. MySQL学习笔记_2_MySQL创建数据表(上)

    MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...

  7. MySQL学习笔记(8) 创建用户和赋权,备份与恢复,日志

    1. 背景 一般在开发中,我们需要新建一个账户,并赋予某个数据库的访问权限.本文说下操作方法. 2.创建用户和赋权 创建用户 CREATE USER 'zyf'@'%' identified by ' ...

  8. mysql 学习笔记 02创建表

    表结构的创建 比如: create table userinfo (id int unsigned comment 'id号'name varchar(60) comment '用户名'passwor ...

  9. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

最新文章

  1. 题目1000:计算a+b
  2. 语义分割--Attention to Scale: Scale-aware Semantic Image Segmentation
  3. 【鸿蒙 HarmonyOS】UI 布局 ( 网格布局 TableLayout )
  4. OS_CORE.C(总结)
  5. 通过对代码进行调试讲解缓冲区溢出原理
  6. 系统思考与《第五项修炼》
  7. ADS_LPC2103开发板SPI 4位数码管测试试验
  8. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)
  9. Android实现ListView异步加载图片总结
  10. Word 重新设置页码
  11. linux设置系统时间
  12. 中小企业SAAS产品选型之分析自己的需求
  13. 离散数学及其应用 第一章:集合论
  14. 智能汽车软件关键技术及应用趋势
  15. python编程实战(一):用户登录模块,用户注册、登录、信息管理、功能设计与实现!
  16. win10系统Nessus下载插件错误
  17. C语言输出一个菱形图案,最优方案,不需要分上下两部分输出
  18. 3511. 倒水问题
  19. android app 退出功能,Android 完美退出 App (Exit)
  20. 一步步教你轻松学关联规则Apriori算法

热门文章

  1. 2022-2028年中国装配式装修行业市场研究及前瞻分析报告
  2. 2022-2028年中国钛合金行业深度调研及投资前景预测报告
  3. Redis 笔记(01)— 安装、启动配置、开启远程连接、设置密码、远程连接
  4. 判断两个树是否相等和判断tree1是否包含tree2 python实现
  5. 【牛腩新闻发布系统】整合前台04
  6. python打包成exe可执行文件指定进程名字
  7. python编程问题---第一次
  8. pytorch lstm crf 代码理解 重点
  9. Java OOP(Object Oriented Programming)个人理解及总结
  10. Arm Cortex-M3 MCU性能