IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL复习1-95P框架前言 -> 正文阅读

[大数据]MySQL复习1-95P框架前言

复习前言导入

1-95集,基础入门篇章
在这里插入图片描述
为什么使用数据库及数据库常用概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
db数据库Database是实打实的存放的数据库文件
dbmsDatabaseManagementSystem数据库管理系统,所以我们的MySQL就是DBMS数据库管理系统
在这里插入图片描述
SQL是StructuredQueryLanguage结构化查询语言,专门用来与数据库通信的语言
在这里插入图片描述
RDBMS和非RDBMS的区别?
RDBMS是关系型数据库
关系型数据库的本质
1.实质:
这种类型的数据库就是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关系型数据库设计规则
在这里插入图片描述
在这里插入图片描述

ORM思想
Object Relational Mapping
数据库中的一个表<--->JavaPython中一个类存在对应关系
表中的一条数据<--->JavaPython中类的一个对象(或实体)
表中的一个列<--->JavaPython中类的一个字段(field)、属性

表的关联关系

  • 表与表之间的数据记录有关系,现实世界中的各种实体之间的各种联系均匀关系模型来标识
  • 四种:一对一关联、一对多关联、多对多关联、自我引用

一对一关联
在这里插入图片描述
在这里插入图片描述
一对多关系
在这里插入图片描述
多对多
在这里插入图片描述
自我引用
在这里插入图片描述
SQL概述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本的SELECT语句

最基本的查询结构
mysql可以忽略大小写,关键字和字段大小写不区分

SELECT字段,字段2...FROM表名...

如果查询后面只有一个 SELECT 1

select 1;

在这里插入图片描述
这里相当于调用了一个虚表进行的查询操作
同样

select 1+1,3*2;

在这里插入图片描述
上面的原理是调用了一个虚表进行的操作

SELECT 1+1,3*2 FROM DUAL;

如果字段是*则表示查询所有的字段(或列)

SELECT* FROM employees;

在这里插入图片描述

SELECT employee_id,last_name,salary
from employees;

列的别名
我们查询显示出来的字符段属性通常称为结果集Result
AS全称:alias(别名),可以省略

#第一种 "别名"
SELECT employee_id "工作者id",salary "工作者工资"
FROM employees;	
#第二种 别名
SELECT employee_id 工作者id,salary 工作者工资
FROM employees;
#第三种 AS 别名
SELECT employee_id AS 工作者id,salary AS 工作者工资
FROM employees;		
#写法有很多,可以直接 ''字符串形式,也可以不使用'',也可以直接AS表示列名
通常用第二用写法,第二种适合使用单个单词的别名
如果是 person id则无法使用第二用法,需要使用第一用法
使用双括号引起来 "person id"
select id person id ×
select id "person id" √
而第三种的写法则可读性更高
select id as "person id" √
列的别名使用一对""引起来,不要使用单引号
因为MySQL没有那么规范,对于ANSI规范并不严谨
使用单引号也可以
但是不建议使用单引号
字符串、日期时间类型的变量需要使用一对''表示
如果不小心写成双引号,则也没有问题,原因和上述一致

在这里插入图片描述
去除重复行
通过关键字 DISTINCT 实现去除重复行,来实现一些单条数据查询操作

#没有去重的情况
SELECT department_id  FROM employees ;
#查询员工表有哪些部门?只需要查询单个号即可
#去重的情况 通过 DISTINCT关键字来实现去重
SELECT DISTINCT department_id  FROM employees ;
#错误演示
#不去重的情况
SELECT salary,department_id
from employees;
SELECT salary,DISTINCT department_id
from employees;
如果出现DISTINCT在后面,则无法实现去重操作
#正确操作
SELECT DISTINCT department_id,salary
FROM employees;
此处的查询结果条数比较少,因为是整体的去重
包括了department_id和salary的重复
此处仅仅没有报错,但是结果并没有什么实际的意义

空值参与运算

#空值概念
#一个数值为Null就是空值,如果一个非0非Null的数值与为Null的数值进行计算则结果一定是Null
#Null不等同于0和'' Null只是表示不知道,而非是0
#空值参与运算
SELECT employee_id,salary "月工资",salary*(1+commission_pct)*12 "年工资"
FROM employees;

在这里插入图片描述
如何解决

#此处使用了函数IFNULL(expr1,expr2)
#如何参数1是空的
#则参数1替换成参数2的值,如果不为空则不作任何操作
SELECT employee_id,salary "月工资",salary*(1+IFNULL(commission_pct,0))*12 "年工资"
FROM employees;

着重号
着重号的作用是为了区分关键字和自定义字段,进行不突破

CREATE TABLE(
`date` DATE
 `asc` ASC
)
着重号在ESC键下方 ~`

实际作用
ORDER是排序关键字:ORDER BY
如果我们有一个表或者属性等,和SQL定义的关键字发生了冲突,并且没有添加着重号`,则查询或其他操作时会报错,普通字段或表名也是可以添加着重号,建议在和关键字重名时再添加着重号
在这里插入图片描述
使用着重号来解决冲突问题
在这里插入图片描述
不建议命名和关键字一样
在这里插入图片描述
查询常数

#查询常数 一共107行数据 字符串用单引号声明''
#每一行都会匹配常数
SELECT '尚硅谷','666',employee_id,last_name
FROM employees;

在这里插入图片描述
匹配概念
常量匹配我们的字段
在这里插入图片描述
显示表结构
使用关键字DESCRIBE
使用关键字缩写DESC
在这里插入图片描述

DESCRIBE `order`;
DESC `order`;

过滤数据
我们是会筛选数据的并不会每次都查询所有的数据,而是只需要查询出满足条件的数据
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件

  • 使用WHERE子句,将不满足条件的行进行过滤
  • WHERE子句紧随FROM子句
#查询90号部门的员工信息
SELECT *
FROM employees
#过滤条件
SELECT*
FROM employees
WHERE department_id = 90;
#查询last_name为'King'的员工信息
SELECT *
FROM employees
WHERE last_name = 'King';

SELECT小练习

#1.查询员工12个月的工资总和,并起名为ANNUAL SALARY
SELECT employee_id,last_name,(salary*12)AS "ANNUAL SALARY"
FROM employees;
#2.查询employees表中去除重复的job_id以后的数据
SELECT 	DISTINCT job_id
FROM employees;
#3.查询工资大于12000的员工的姓名和工资
SELECT last_name,salary
FROM employees
WHERE salary>12000;
#4.查询员工号为176的员工的姓名和部门号
SELECT last_name,department_id
FROM employees
WHERE employee_id = 176;
#5.显示表departments的结构,并查询其中全部的数据
DESC departments;
SELECT * 
FROM departments;

运算符
在这里插入图片描述
在这里插入图片描述

  SELECT *
  FROM employees
  WHERE commission_pct <=> NULL;
  安全等与专门为null而生

在这里插入图片描述

#IS NULL\IS NOT NULL\ISNULL
#查询奖金为空的员工名和工资
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;
#查询奖金不为空的员工名和工资
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
#查询奖金为空的员工名和工资 函数
SELECT last_name,salary,commission_pct
FROM employees
WHERE ISNULL(commission_pct);
NOT是否的意思,取反
#NOT 表示取反
SELECT last_name,salary,commission_pct
FROM employees
WHERE NOT commission_pct <=> NULL;
#LEAST()\GREATEST
#LEAST是取最小的意思,GREATEST是取最大的意思
SELECT LEAST('g','b','t','m'),GREATEST('g','b','t','m')
FROM DUAL;
#取出名字序列最小的名字
SELECT LEAST(first_name,last_name)
FROM employees;
#根据长度区分
SELECT LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;

运算符

#BETWEEN...AND
#查询工资在6000到8000的员工信息(查询条件1和条件2范围的数据,包含边界)
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000#不可以写成8000 - 6000

SELECT employee_id,last_name,salary
FROM employees
WHERE salary >=6000 && salary <=8000;

#查询工资不在6000到8000的员工信息
SELECT employee_id,last_name,salary
FROM employees
WHERE salary <6000 OR salary>8000;#小于6000或大于8000 表示不在6000-8000范围内 逻辑运算符
#--------------------------------------------
SELECT employee_id,last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6000 AND 8000;
#IN\NOT IN
#IN表示在或者是,是单个的
SELECT last_name,salary,department_id
FROM employees
#WHERE department_id = 10 OR department_id = 20 OR department_id = 30; 一定要写全了 
WHERE department_id IN (10,20,30);#NOT IN就是不在的意思
&& 且 大于1且小于10
or 或 大于1或小于10
NOT 非 不小于1或者不大于10
BETWEEN...AND... 两值之间的判断(包含边界值) 在110之内
IN 等于或在 id在10
NOT IN id不在10 
LIKE 模糊查询


ORDER BY实现排序操作

  • ASC(ascend):升序
  • DESC(descend):降序
    ORDER BY 子句在SELECT语句的结尾
    语法:关键字 ORDER BY 选择对象 … 排序方式 DESC倒序(默认ASC升序)
#如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的
SELECT*FROM employees;
SELECT employee_id,last_name,salary FROM employees;#默认只是按照添加顺序排序
#练习:按照salary从高到低的顺序去显示员工信息
SELECT employee_id,last_name,salary FROM employees ORDER BY salary DESC;#DESC表示倒序,从高到低排序
#练习:按照salary从低到高的顺序去显示员工信息
SELECT employee_id,last_name,salary FROM employees ORDER BY salary ASC;#默认升序ASC

列的别名只可以在ORDER BY中使用,不可以在WHERE中使用,因为流程是,先看查询哪个表,然后再过滤条件,最后再查询要查询哪些内容,这样做可以(where执行早,所以别名识别不到)。
在排序条件相同的情况下怎么办?
一级排序是根据查询字段

#练习:显示员工信息,按照department_id的降序排序,salary的升序排序
SELECT employee_id,salary,department_id
FROM employees
ORDER BY department_id DESC,salary ASC;
#如果条件是null那么会放在最前面,当一级排序后就行进行二级排序,二级排序的条件是符合一级排序的条件

在这里插入图片描述

LIMIT分页

#分页概念
#有时候我们查询数据不需要显示太多,这个时候就需要分页操作,将多条数据分页显示
#这样做可以减少与数据库的网络交互,达到节省资源消耗
#每页显示20条记录,此时显示第1页
SELECT employee_id,last_name
FROM employees
LIMIT 0,20;
/*
SELECT ...,...,...
FROM ...
WHERE ... AND / OR / NOT 
ORDER BY ... (ASC/DESC),...,...
*/

多表查询

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:35:41  更:2022-09-21 00:36:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:59:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码