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笔记心得(持续更新) -> 正文阅读

[大数据]MySQL笔记心得(持续更新)

一、什么是数据库

一、什么是数据库

保存数据发展方式:

1、绳子,打结法( 不容易记录内容、不易保存 ) --> 
2、石头、龟壳,甲骨文( 不易携带、象形 字 ) -->
3、竹简,文字( 材料不易获取、记录内容少 ) --> 
4、造纸术,文字( 容易携带、不易保存 ) -->
5、计算机、硬盘,文件( 不易查找数据 ) -->
6、数据库系统DBS database System ( 更便捷的查找数据 ) 

根据处理数据和数据之间关系将数据库划分:

  • 关系型数据库
  • 非关系型数据库**

关系型数据库: SQL所有的数据保存,都是以表的形式进行保存。一般用来保存文字数据

主流软件:MySQL  Oracle  SQLServer ( 学会一种,其他基本相同,每一种都会 有自己的方言 ) 	
有行 有列 , 
单表(一张表):一行中的数据,每一列都是相关联的;               
多表:一张表中的数据,使用的是其他表中的内容来进行编写的

非关系型数据库: NoSQL 数据与数据之间没有任何关系,保存 图片 音频 视频 等等

主流数据库:Redis MongoDB  每一种数据库都是一个独立的新数据库,没有任何相同点;

SQL : 结构化查询语言(Structured Query Language)

数据库: 查询数据、存储数据、修改数据等等; 对数据的增删改查 ; 

二.、为什么使用数据库

更加便捷的对数据进行管理、操作;

三、什么时间使用数据库

javaWeb Java的网页开发 ;            
页面中展示 HTML(静态资源文件) <-访问技术JavaWeb-> java程序 <- jdbc -> 数据 库获取新闻数据            
当页面中的数据会频繁变化的时候,通过访问数据库来进行修改; 

四、如何使用数据库 MySQL

  1. 安装
    安装mysql,详见安装文档;
  2. 卸载
1、打开控制面板找到mysql相关的进行卸载         
2、找到mysql的安装路径删除mysql的相关文件夹          
3、将文件夹的隐藏文件打开,在C盘找到programData文件夹,找到mysql文件夹 删除;        
4、搜索 注册表编辑器 --> Current_User:总用户--> SOFTWARE --> MYSQL相关的 删除  
Local_Machine:本地机器 --> SYSTEM   --> controlSet001 --> Service --> 搜mysql 相关 干掉 --> CurrentControlSet --> Service --> 
搜 mysql相关 干掉  重启电脑,服务会消失掉;            
5、如果上述操作不中,打开控制面板,卸载,将Microsoft visual c++ redistribution 干掉 之后重新安装; 

五、MySQL语句的分类
保存的数据都是以表的形式,进行存储;

**SQL语句的分类 **

    DDL: 数据定义语言 定义数据库中  数据库的名称  数据表的内容;           
    DCL: 数据控制语言 控制数据库、数据表 谁可以进行编辑、修改、查看、新增         
    DML: 数据操作语言 对数据表中的内容,进行 增加、修改、删除操作 ;       
    DQL: 数据查询语言 对数据表中的内容,进行查询 ;

六、操作MySQL

1、登录MySQL程序 ; 输入密码进入;     
    show databases;         展示当前数据库中所有的文件     
    use bank ;              使用当前所有文件中bank文件       
    show tables ;           展示当前文件中 有多少张表    
    select * from account ; 展示当前account表中的全部内容 

七、主机IP地址

	IP地址的组成 40~255 数字组成 IP会指定一台机器  
    内网ip: 192.168.xxx(网络字段).xxx     内网可以组成局域网     
    外网ip:由联通 电信 移动 分配给的网络ip   全球唯一  171.8.201.140       
    localhost 本机地址  192.168.15.51   等同 127.0.0.1 本机地址 

八、端口

  与一个程序进行绑定,每个机器中的应用端口都是唯一的; 192.168.15.51:110 

二、数据库、表

一、数据库的登录
三种方式

1、通过cmd进入之后,输入 mysql -uroot -p密码   想要使用这种方式,必须配置环境变量         window系统种, .exe文件,表示可执行程序,     
2、通过MySQL的客户端进行登录,输入密码即可进入;    
3、通过可视化工具,navicat 

二、数据语言分类:( 使用学生信息 做举例)

DDL:数据定义语言;用来确定数据库的名称、数据表的结构内容 ; 
1、新建一个excel文件(电脑已经开机)  对应 新建一个数据库名称(数据已经安装并且启动—— 在我电脑右键——管理——服务——Mysql右键启动)  
    create database 数据库名称;  
2、打开创建的数据库   打开excel文件    
    USE students ;
3、设置一个表(表的名称、列的名称、每一列输入内容具体什么 )  创建数据表 
create table student(         
    id int PRIMARY key ,       
    `name`varchar(12) not null ,     
    sex varchar(1) ,    
    tel int(11) ,           
    address varchar(32)        
 ); 

创建数据表的基本语法

CREATE TABLE 表的名称 ( 
    列名1 当前列的数据类型 [约束] , 
    列名2 当前列的数据类型 [约束] ,
    列名3 当前列的数据类型 [约束] , 
    列名4 当前列的数据类型 [约束] ,
    列名5 当前列的数据类型 [约束]
 );

三、数据类型:

数字类型    长度 可以设置也可以不设置 ,大小按照类型的最大长度而定 
    整数型:int         
    小数型:double float 
    文字类型    varchar(65535)  char(255)   **必须要设置长度**         
    时间类型    timestamp 时间戳 = date(--) 日期 + time(:::毫秒) 时间 
在创建数据表的时候, 整数类型使用 int   小数型 double   文本类型 varchar(长度)   时间 类型 timestamp

四、约束:

约束: 限制这个列的内容   
    主键约束:pk primary key 一个表一个主键,唯一非空,
使用将 primary key 放在 (列名 类型) 之后  一般主键会和 自增 auto_increment 搭配使用( 必须是数字类型 ) 

    非空约束:not null 表示当前列中的内容不能够为空 ;可是空格 但不能不输入内容         
    唯一约束:unique 表示当前列中的内容全部唯一,输入的内容唯一,如果没有内容,则可以,即 可以有多个null值         
    外键约束:fk 

主键自增 pk primary key

# 使用主键自增约束
create table tab(
id int primary key auto_increment
);

非空 not null

# 使用非空约束
create table tab(
id varchar(30) not null 
);

唯一 unique

create table tab(
id varchar(30) unique 
);

五、sql中的注释

注释:在执行SQL语句的时候,会自动忽略不执行 ,两种分类 
    单行注释: 只能注释一行内容       
        #   : 后面任意输入都是注释的内容;         
        --  : 后面必须有一个空格,和#使用相同
   多行注释: 可以注释多行内容          
        /*      
           ...  被注释内容        
        */       
    -- 注释的快捷键  
        Ctrl +  / 快速注释     
        Ctrl + Shift + / 解除注释

六、编码格式问题:

编码格式就相当于 字典 (新华出版社 人民出版社 )       
张三 --> hashcode值(ASCII码表) 180012 123123 --> 00000010100110011001 0101001010101010101            
    CPU计算,将二进制转换成十进制,再按照字典去找字    
        
常见编码格式:            
    ISO-8859-1  标准版 英文版 不支持中文 其中1个字符就占1个字节 
    GBK 支持中文 其中英文占1个字节 中文占2个字节             
    万国编码 UTF-8  大部分国家的语言都支持  英文占1个字节 中文3个字节          
    十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f 

修改数据库中的编码
两种方式:

1、通过可视化操作;    
    将数据库的属性中 字符集修改为 utf8,然后将库中表删除之后,重新创建;  
2、指令      
    通过alter语句,修改每一列的字符集 编码格式 ; 
    alter table 表名 change 要修改的列名  要修改的列名 列类型 (character set utf8) charset =utf8 [约束] ; 

在这里插入图片描述
七、数据库的三范式
用来规范创建数据表的,不一定必须遵循,根据情况自己选择遵循与否;

一范式:不可分割     
    每一列中,要自己单独表示一个内容;设计数据库时,每一列的定义必须要保证最小;   
二范式:主键 (非空唯一)     
    在一范式的基础上,再保证数据库中每一条都是唯一的,并且当前行中所有内容都要和主键相关;  
三范式:设计多个表的情况下,除了主键之外,其他列不能和其他表产生关系     
    两个表之间,需要使用主键来建立关系;

数据库设计的三范式:

一范式:数据库设计时,每个字段()必须是单独,不可再分的; 
二范式:数据库设计时,每个表要有主键,每个列必须和主键有关系; 
三范式:数据库设计时,如果需要和其他表创建关系,必须通过主键;
三范式在数据库设计中,不是必须要遵循的;除非一些特殊情况,一般都要遵循

八、在电脑中 数据的大小问题

1024 *1024 kb = 1024 MB = 1 GB

电脑由二进制组成 0101010101

byte  1字节  -128~127 大小 256 28次方 00000011 硬盘中占8short 2字节  216次方 00000000 00000000 65536 -32768 ~32767
int   4字节  232次方 00000000 00000000 00000000 00000000 10-1xxx~(1xxx-1)
long  8字节  264次方 老大了

三、 MySQL操作数据表记录

一、MySQL语句的分类

DDL:数据定义语言

包含的关键字:
	create增 
	drop删 
	alter改

DML 数据操作语言

数据库中两个概念

表结构:
	通过DDL,进行对数据表的增、删、改;不会对数据的个数产生影响;   
表记录:
	实际保存在表中的内容,通过DML进行操作 增加表记录、删除表记录、修改表记录   

新增

增:        
    关键字:insert 
    
使用语法:            
插入的内容是固定的列:
    insert into 表名(列名1,列名2,列名3.... ) values (1对 应值1 ,2对应值2 ,3对应值3 ...) ;       
插入全部列:
    insert into 表名 values (按照建表的顺序填写对应列的值) ; 

删除

删:       
    关键字: delete       
使用语法:    
删除当前表中的全部数据 
    delete from 表名 ;  
删除一条、几条数据:  
    delete from 表名 where 条件( 列名 符号 具体值 ) ; 
条件:          
    符号:    
        判断符: = != > < >= <= 
        特殊单词:   列名 in (xx,xx) ;  列名 between xx and xx ; 
删除分两种:    
    delete删除:单纯的删除掉所有的表记录,主键的自增序列任然存在; —— 表记录 删除           
    truncate删除:不仅删除表记录,还删除自增序列;                —— 表结构 删除( drop table ; create table ) 
删库跑路; rm -rf 

修改

改:  
    关键字: update  
    使用语法: 
        update 表名 set 列名 =; 修改当前数据表中的一个列的内容为其他值; 影响全部记 录 
修改一条、几条数据: 
        update 表名 set 列名 = 值 where 条件(同删除) ;          
修改多个列的内容:   
        update 表名 set 列名=, 列名 = 值 where 条件 ;

案例


# create database db123 ; 创建一个数据库  
-- create database db123 ;  创建一个数据库  

/*
	这是多行注释
*/

-- 注释的快捷键  Ctrl +  / 快速注释     Ctrl + Shift + / 

-- 使用之前已经创建过的数据库 
-- use db4 ;
-- 创建学生信息表  
/*
create table student (
		id int primary key auto_increment ,
		name varchar(12) not null ,
		sex varchar(2) ,
		tel varchar(11) unique ,
		address varchar(32) ,
		major varchar(12) ,
		class varchar(12) ,
		bir timestamp ,
		balance double 
	);
*/

-- 展示创建表 student的 sql语句 
-- show create table student ;
/*
CREATE TABLE `student1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) NOT NULL,
  `sex` varchar(2) DEFAULT NULL,
  `tel` varchar(11) DEFAULT NULL,
  `address` varchar(32) DEFAULT NULL,
  `major` varchar(12) DEFAULT NULL,
  `class` varchar(12) DEFAULT NULL,
  `bir` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `balance` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tel` (`tel`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
*/
--  latin 表示西欧编码格式  
/*
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) CHARACTER SET latin1 NOT NULL,
  `sex` varchar(2) CHARACTER SET latin1 DEFAULT NULL,
  `tel` varchar(11) CHARACTER SET latin1 DEFAULT NULL,
  `address` varchar(32) CHARACTER SET latin1 DEFAULT NULL,
  `major` varchar(12) CHARACTER SET latin1 DEFAULT NULL,
  `class` varchar(12) CHARACTER SET latin1 DEFAULT NULL,
  `bir` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `balance` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tel` (`tel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
*/

-- DDL 删除数据库 删除表
-- drop database db6 ;
-- drop table student1 ;

# 通过sql语句 修改数据库、数据表的编码 
-- ALTER table student character set utf8 ;

# 单独修改每一列的编码格式
-- alter table student change major major varchar(12) CHARACTER SET utf8 NOT NULL ;

-- 查询专业为法学的
-- select * from student where major = '法学' ;


-- 直接创建编码格式为 utf8的数据库
CREATE DATABASE db9 CHARACTER SET utf8;

-- create database db10 charset = utf8 ;
-- 使用数据库
USE db9;

-- 创建数据库 
CREATE TABLE student (
	id INT PRIMARY KEY auto_increment,
	NAME VARCHAR (12) NOT NULL,
	sex VARCHAR (2),
	tel VARCHAR (11) UNIQUE,
	address VARCHAR (32),
	major VARCHAR (12),
	class VARCHAR (12),
	bir TIMESTAMP,
	balance DOUBLE
);

-- 向student表中添加一条数据 id:3 name:赵四 tel :110  
-- 使用语法:	
insert into 表名(列名1,列名2,列名3.... ) values (1对应值1 ,2对应值2 ,3对应值3 ...) ;
INSERT INTO student (NAME, tel) VALUES	('赵四', 123121);

-- 添加全部列的内容
INSERT INTO student VALUES(3,'尼古拉斯','男','17612341234','河南郑州','Java','4','2021-3-5 15:36:20',1000000);

-- 删除数据
DELETE FROM	student;

-- 带条件的删除 ,删除名称为赵四的数据
DELETE FROM	student WHERE	NAME = "赵四";

-- 删除余额多余10000元的 
DELETE FROM	student WHERE	balance > 10000;

-- 删除 性别不是男的数据
DELETE FROM	student WHERE	sex != '男';
-- 删除 没有性别的数据  is null  
DELETE FROM	student WHERE	sex IS NULL;
-- 删除 性别不是男的数据(null)
delete from student where sex !="男" or is null ;

-- 特殊单词:	列名 in (xx,xx) ;  列名 between xx and xx ; 
-- 删除id为910 11 的数据 
delete from student where id in (9 ,10 ,11 );
-- 删除余额在 10k~100k之间的  包含头和尾的内容;
delete from student where balance between 10000  and 100000 ;

-- 使用修改语句 将余额都设置为10000 ;
update student set balance = 10000 ;
-- 将尼古拉斯 的余额设置为100000 ;
update student set balance = 100000 where name = "尼古拉斯" ;
-- 将赵二 余额减少9999 并且性别改为女 
update student set balance = balance -9999 , sex = '女' where name = "赵二";

-- 删除自增记录
truncate table student ;

二、数据库的修改:

1、修改数据库的字符集

语法:alter database 库名 default character set 字符集;

修改数据库字符集:

alter database database_name default character set utf8 COLLATE utf8_general_ci;

2、修改表的字符集

语法:alter table 表名 convert to character set 字符集;

修改数据库表字符集

alter table database_name default character set utf8 collate utf8_general_ci;

3、修改字段的字符集

语法:alter table 表名 modify 字段名 字段属性 character set gbk;

修改字段字符集

alter table table_name change tid tid varchar(64) character set utf8 collate utf8_ge

4、查看数据库建表语句查询到使用的字符集:

show create table table_name

时间日期类型:

Datetime:时间日期,格式是YYYY-mm-dd HH:ii:ss,表示的范围是从10009999年,有0值:0000-00-00 00:0000Date:日期,就是datetime中的date部分。
Time:时间段,指定的某个区间之间,-时间到+时间。
Timestamp:时间戳,只是从1970年开始的YYYY-mm-dd HH:ii:ss 格式与datetime完全一致。
Year:年份,两种格式, year(2)year(4)19012156

四、 MySQL查询

一、DQL :数据查询语言

关键字:select
基础语法:       
    select 列名1 as '当前列的别名', 列名2 , 列名3 ,... from 表名 ;  
        as 是可以省略的     
    查询全部列的数据: select * from 表名 ;

条件查询

带条件查询: selct * from 表名 where 条件 ;            
条件 :                 
    精确条件: = > <  in between..and                   
    模糊条件: like 必须搭配 通配符使用                    
        通配符:                        
          % : 匹配0~n个字符                         
          _ : 仅匹配1个字符

除重查询

关键字:distinct 
    select distinct 列名1 , 列名2 ,... from 表名 ;

排序查询:按照数据进行升降序显示

关键字: order by    
使用语法:        
    select * from 表名 order by 列名 desc(降序)/asc(升序,默认值) ;        
多个列进行排序            
    select * from 表名 order by 列名1 desc , 列名2 desc ,... ;

分组查询:将相同的数据归为一组,进行合并展示

分组查询:将相同的数据归为一组,进行合并展示

关键字:group by     
使用语法:        
    select * from 表名 [where 条件] group by 列名 [having 条件];        
分组条件:            
    1、条件使用的列是表的原始列 ,使用where 作为条件关键字             
    2、条件使用的列是聚合函数生成的列 ,使用 having 作为关键字      
                   
搭配 聚合函数 使用        
    聚合函数: 数学算法,包含 求和 求平均数 求总数count(*) ,单独使用时,只会出现 1 行数 据            
        SUM(列名)     求当前 列 的总和值,只能对数字列进行操作            
        AVG(列名)     求当前 列 的全部数据的平均值,只能对数字列进行操作            
        MAX(列名)     求当前 列 中数据的最大值,如果是数字直接比大小,如果是字符则使用是 hashcode值
        MIN(列名)     求当前 列 中数据的最小值,如果是数字直接比大小,如果是字符则使用是 hashcode值
        COUNT(列名)   求有多少 行 数据;                
当聚合函数和分组搭配使用:数据可能会变成多行;        
    求的不再是当前列,而是当前组内的列 ;      

分页查询:MySQL分页

 关键字:limit        
 基本语法:            
     select * from 表名 limit 开始数据编号(不包含开始编号) , 显示条数 ;                
         如果剩余的数据不够显示条数,则有多少显示多少;

利用现有的表创建新的表

基础语法:        
  CREATE TABLE 新表名 AS SELECT 列名 FROM 旧表名;

总结

MySQL查询语句的汇总:        
  select  列名1,列名2,...           用展示的列        
  from 表名                         用来获取数据的表        
  where 条件(原表中的列作为条件)      用来设置查询条件        
  group by 列名                     用来设置分组        
  having 条件(聚合函数的值条件)      用来设置分组的聚合函数条件        
  order by 列名 asc/desc            用来进行数据排序的        
  limit 开始编号 , 显示条数 ;        用来进行数据切割

案例

-- 查询练习 
use mydb2 ;
create table exam(
		id int primary key auto_increment,
		name varchar(20) not null,
		chinese double,
		math double,
		english double
	);
	insert into exam values(null,'关羽',85,76,70);
	insert into exam values(null,'张飞',70,75,70);
	insert into exam values(null,'赵云',90,65,95);
	insert into exam values(null,'云',90,65,95);
	insert into exam values(null,'赵云云',90,65,95);
	insert into exam values(null,'赵赵云',90,65,95);
	insert into exam values(null,'赵赵云云',90,65,95);
	insert into exam values(null,'刘备',97,50,50);
	insert into exam values(null,'曹操',90,89,80);
	insert into exam values(null,'司马懿',90,67,65);

-- 查询表中全部数据 ;
-- select 列名1, 列名2 , 列名3 ,... from 表名 ;
select id ,name , chinese from exam ;
-- 查询表中全部列的数据
select * from exam ;

-- 查询 姓赵的 学生考试成绩 
select * from exam where name like "赵%";

-- 查询 名字中带有云的 
select * from exam where name like "%云%"  ;
-- 查询 名字以云结尾的
select * from exam where name like "%云" ; 
-- 查询名字第二位为 云的;
select * from exam where name like "_云%" ;
-- 查询名字第三位为 云的;
select * from exam where name like "__云%" ;
-- 查询名字倒数第二位为 云的;
select * from exam where name like "%云_" ;
--查询所有姓刘两个字的学生成绩。
 SELECT * FROM exam where name like "刘_";

-- 查询全部的语文成绩 ( 不带重复的 )
select distinct chinese , math from exam ; 

-- 排序查询 
-- 查询学生id name math ,并且按照数学成绩进行排名
select * from exam order by chinese desc ;

-- 查询学生全部信息,按照语文成绩进行排名,语文成绩相同的按照数学成绩排名,数学成绩相同的按照英语成绩排名
select * from exam order by chinese desc  , math desc ,english desc ;

-- 查询语文成绩 在90~95之间的学生信息及成绩
select id ,name , chinese from exam where chinese between 90 and 95 ;
select id , name ,chinese from exam where chinese >= 90 and chinese <= 95 ;

-- 查询数学成绩为 90,75,65,50的学生信息及成绩
select id , name ,math from exam where math in (90,75,65,50);
select id , name ,math from exam where math = 90 or math = 75 or math = 65 or math = 50 ;

-- 查询 学生姓名 及 总成绩 
select name '学生姓名' , chinese + math + english  '总成绩' from exam e;

-- 查询 学生姓名 及 平均成绩
 select name '学生姓名' , (chinese + math + english)/3  '平均成绩' from exam e;

-- 通过原有的学生成绩表, 创建一个新的 学生平均成绩表 id name 平均成绩
-- CREATE TABLE 新表名 AS SELECT 列名 FROM 旧表名;
create table score as select id , name ,(chinese + math + english)/3 score  from exam ;

select name , score  from score ;

-- 分组查询
-- 学生的语文成绩总共有多种分数 
select distinct * from exam ;
select * from exam group by chinese ;

-- 查询学生的语文成绩总共有多种分数,每种分数有多少人
select chinese , count(*) from exam group by chinese ;

-- 查询全部学生的 数学总成绩 ,语文平均成绩 ,英语的最高分,英语的最低分 ,总学生人数
select SUM(math)'数学总成绩',AVG(chinese)'语文平均成绩',
MAX(english)'英语的最高分',MIN(english)'英语的最低分',COUNT(*) '总人数' 
from exam ;


select min(name) from exam ;

-- 当聚合函数和分组搭配使用
select SUM(math)'数学总成绩',AVG(chinese)'语文平均成绩',
MAX(english)'英语的最高分',MIN(english)'英语的最低分',COUNT(*) '总人数'   from exam group by chinese ;

-- 查询英语成绩有多少种成绩,并统计出总人数
select english , count(*) from exam group by english ;

-- 查询成绩在60分以上的,英语成绩有多少种成绩,并统计出总人数
select english , count(*) from exam where English >60 group by english ;

-- 查询英语成绩有重复分数的成绩 及人数 ;
select English , count(*) from exam  group by english having count(*) > 1;

-- 查询exam 表中的前三条数据
select * from exam limit 0 , 3;
-- 从第四条开始展示5条数据
select * from exam limit 3 ,5 ;

五、 MySQL多表查询

在实际开发中,数据不会保存在一张表上,每张表在设计的时候,只会关注一个业务点。

在一些复杂业 务上, 会涉及到多个表同时查询来完成一个业务内容;
交叉查询

将两个表的数据,进行交叉关联,会产生笛卡尔积( 两个集合相乘之和 );    
    关键字: [CROSS] JOIN         
基本语法    :            
    select * from 表名1 CROSS JOIN 表名2 where 条件;        
    对实际开发没有意义,尽量减少使用

内连接查询
内连接展示的数据:必须是满足连接条件的数据 ;

通过条件限制,将笛卡尔积中符合使用的数据挑选出来;    
关键字:[inner] join        
    条件关键字: on         
基本语法:            
    select * from 表名1  inner join 表名2 on 连接条件 ; 官方写法     
显示内连接:可以使用on/where 作为连接条件的关键字         
    当把sql写出来之后,就可以看出是内连接的方式,出现 join  on 这两个关键字 ;             
隐式内连接:不能用on 作为连接条件的关键字        
基本语法:
    select * from 表名1 , 表名2 where 连接条件 ;             
在一条查询语句中 on where 都可以作为条件关键字出现,但位置必须保证 on 在前  where 在后
 

外连接查询

以某一个表为基表(这个表中的数据会全部展示),另一个表为辅表(这个表中的数据,满足条件的展示, 不满足的不展示),来进行展示数据;    
关键字:left [outer] join  、   right [outer] join        
    条件关键字: on         
基本语法:            
    select * frorm 表名1 left outer join 表名2 on 连接条件 ;     
左外连接:左表为基表,右表为辅表;     
右外连接:右表为基表,左表为辅表;

**子查询 **

基础查询中,都只包含一个 select 关键字,    
子查询: 将一次查询的结果,当成另外一次查询的 列、表、条件 使用        
基本使用情况:都会放在where中使用;        
例: 一条查询语句中, 子查询会优先于外层查询,先执行;             
    select * from user where class in (select id from class where name = 'java') ;                
当将子查询查询出来的数据当成一个表来使用时,必须给这个表一个别名;

六、 MySQL视图

视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询 基础上

视图中并不存放数据,而是存放在视图所引用的原始表(基表)中

同一张原始表,根据不同用户的不同需求,可以创建不同的视图

关键字: view 

基本语法:           
    create view 视图名称 as select 语句 
 创建完成的视图,在使用上和基础表的使用方法相同,使用select进行查询 
 视图自己不保存数据,数据内容都是从原表中查询的;     
 对视图数据进行操作时,修改update、删除delete的都是原表中的数据;   
  
 对视图的操作在一些特殊情况下,无法进行
    1、当视图中包含了聚合函数时,不能使用删除、修改操作         
    2、当视图中包含了group by limit 等条件时 也不能使用删除、修改操作        
    3、当视图中包含了关联查询,也不能使用修改、删除操作 
    
删除视图
        
基本语法: 
    drop view 视图名 ;    
    
修改视图      
  
基本语法: 
    alter view 视图名 as select 语句 ;             
重新设置视图的列名        
    create view 视图名(列名1, 列名2, 列名3 ...) as select 列1 ,2 ,3 ...

七、 MySQL存储过程

MySQL的存储过程,就相当于学习Java的中函数,方法;

存储过程
将一些复杂的SQL封装好( 封装进存储过程中 ),当需要使用时,直接调用存储过程即可;

  1. 一组可编程的函数,是为了完成特定功能的SQL语句集
  2. 通常情况下,MySQL在执行SQL语句时,会先进行编译,然后再在数据库中进行执行;
  3. 存储过程只在第一次创建的时候进行编译,执行时是直接调用的;
  4. 存储过程就是具有名字的一段代码,用来完成一个特定的功能。
  5. 创建的存储过程保存在数据库的数据 字典中

存储过程的优点:

  1. 将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
  2. 批量处理
  3. 统一接口,确保数据的安全

存储过程的使用

基本语法: 
CREATE PROCEDURE 名称() 
    BEGIN 
    sql语句 
    END $$
-- 调用存储过程 call 名称();
    call 名称();
-- 查看所有数据库中全部存储过程 
    SHOW PROCEDURE STATUS; 
-- 查询本数据库中的存储过程 
    SHOW PROCEDURE STATUS WHERE db = 'mydb2'; 
-- 查询存储过程的创建语句 
    show create procedure pro_emp ; 
-- 删除存储过程 
    drop PROCEDURE pro_emp ;
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:14:50  更:2021-09-26 10:15:51 
 
开发: 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 23:32:47-

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