Mysql(Linux数据库或者在Navicate中)

Mysql数据库组成

服务端:主要存储数据,并接收用户发过来的SQL语句,并执行结果返回给客户端

客户端:下发用户要执行的sql语句,并显示服务器返回的执行结果

命令行数据库连接方式

mysql -h 数据库 IP -P 端口号 -u 数据库登录用户名 -p 数据库登录密码
-h不加表示为本机,-P不加表示默认3306端口

数据类型

数字类型

 字符串类型

时间和日期类型

约束

命令行操作数据库、表

查看所有的数据库        show        database;

使用数据库        

use 数据库名;
查看当前使用的数据库select database();
创建数据库create database 数据库名 charset=utf8;
删除数据库drop database 数据库名;
查看数据库所有的表show tables;
查看数据库表的结构desc 表名;(desc =describe)
查看数据表的创建语句show create table 表名;

数据库表操作

1.创建数据库表

语法:

create table表名(

        字段名1 类型 约束,

        字段名2 类型 约束

        ... ... ...

)

例子:

创建一个学生表,字段要求:姓名(长度为10),年龄,身高(保留2位小数)

CREATE table students(id int UNSIGNED PRIMARY KEY auto_increment,name VARCHAR(20),height decimal(5,2))

2.删除数据库表

drop table 表名        (该命令将永久性删除表和其所有数据)

drop table if exists students (删除表之前检查表是否存在。如果表存在,则表会被删除;如果表不存在,则不会引发错误)

数据增删改查操作

增(insert):

1.1增加一行数据

insert into 表名 values(...)

例子:

insert into students values(0,'jingbeng',12.66);

//主键自增长可以用0或者NULL代替

另一种写法:

insert into students(name) values('nnn')

1.2增加多行数据

方式一:写多条insert语句,多条语句之间用";"隔开

insert into students(name) value ('jingbeng1');

insert into students(name) value ('jingbeng3');

insert into students values(0,'jingbeng2',23,167.56)

方式二: 通过一条insert语句插入多条数据,数据间用","分隔

格式一: insert into 表名 values (...), (...) ...

例: insert into students values(0,'亚瑟3',23,167.56),(0,'亚瑟4',23,167.56)

格式二: insert into 表名(字段名1,...) value(值1,...),(值1,...)...

例: insert into students(name) value ('老夫子5'),('老夫子6')

2.查(select):

1.1简单查询

select * from 表名;

例子:select * from students;

1.2查询部分字段数据

select 字段1,字段2... from 表名;

例子:select name,sex,age from students;

1.3起别名

表起别名:select 别名.字段1,别名.字段2... from 表名 as 别名;

例子:select s.name,s.age from students as s;

字段起别名:select 字段1 as 别名1,字段2 as 别名 from 表名

例子:select name as n,age as a from students;

1.4字段内容去重

select distinct 字段 from 表名;

1.5条件查询(where)

select 字段1,字段2... from 表名 where 条件;

例: select * from students where id=1;

说明: where支持多种运算符进行条件处理

比较运算

逻辑运算

模糊查询

范围查询

空判断

1.5.1条件查询-比较运算符

例1:查询小乔的年龄

select age from students where name='小乔’

例2:查询20岁以下的学生

select * from students where age<20

例3:查询家乡不在北京的学生

select * from students where hometown!='北京'

1.5.2条件查询-逻辑运算符

例1:查询年龄小于20的女同学

select * from students where age<20 and sex='女'

例2:查询女学生或'1班'的学生

select * from students where sex='女' or class='1班

例3:查询非天津的学生

select * from students where not hometown='天津'

1.5.3条件查询-模糊查询

关键字: like

% :匹配任意多个字符

- : 匹配一个任意字符

例1:查询姓孙的学生

select * from students where name like '孙%'

例2:查询姓孙且名字是一个字的学生

select * from students where name like '孙_'

例3:查询姓名以‘乔’结尾的学生

select * from students where name like '%乔'

例4:查询姓名中包含‘白’的学生

select * from students where name like '%白%'

1.5.4条件查询-范围查询

in表示在一个非连续的范围内

例:查询家乡是北京或上海或广东的学生

select * from students where hometown in('北京','上海','广东')

between ... and ...表示在一个连续的范围内

例:查询年龄为18至20的学生

select * from students where age between 18 and 20

1.5.5条件查询-空判断

注意:Mysql中空表示null,与 ‘’ (空)是不一样的。

判断为: is null

例:查询没有填写身份证的学生

select * from students where card is null

判断非空: is not null

例:查询填写了身份证的学生

select * from students where card is not null

1.6排序(降序需要加desc)

1 :查询所有学生信息,按年龄从小到大排序
select * from students order by age;
2 :查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
select * from students order by age desc,studentNo;

1.7聚合函数

使用聚合函数是为了方便进行数据进行统计

聚合函数不能在where中使用:

count():查询总记录数

max(字段名):查询最大值

min(字段名):查询最小值

sum(字段名):求和

avg(字段名):求平均数

1.8分组(group by)

按照字段分组,此字段相同的数据会被放到一个组中 .分组的目的是对每一组的数据进行统计( 使用聚合函数 )

语法:select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...

1.9分组后的筛选(having...)

语法: select 字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 条件

ps: 关键字 having 后面的条件运算符与 where 的相同
1 :查询男生总人数
方案一 :select count(*) from students where sex=' '
方案二 :select sex,count(*) from students group by sex having sex=' '

having和where的对比:

where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选。

having 是对 group by 的结果进行筛选。

having 后面的条件中可以用聚合函数,where后面不可以。

1.10分页-获取部分数据

语法:select * from 表名 limit start count

start表示开始位置,索引默认从0开始

count表示从start位置开始获取count条数据

例子:获取学生表的第2-4行的信息

select * from students limit 1,3;

1.10.1分页显示

分页查询:select * from students limit (n-1)*m,m

说明:n表示显示第几页的数据;m表示每页显示多少条数据

1.11连接查询

内连接(inner join...on...)

语法:

select * from 表1 inner join 表2 on 表1.列=表2.列;

select * from 表1,表2 where 表1.列=表2,列;

1 :查询学生信息及学生的成绩
方式一 : Select * from students stu inner join scores sc on stu.studentNo = sc.studentNo
方式二 :select * from students stu, scores sc where stu.studentNo = sc.studentNo
2 :查询课程信息及课程的成绩
select * from courses cs inner join scores sc on cs.courseNo = sc.courseNo
3 :查询王昭君的成绩,要求显示姓名、课程号、成绩
select stu.name, sc.courseNo, sc.score from students stu
inner join scores sc on stu.studentNo = sc.studentNo where
4: 查询学生信息及学生的课程对应的成绩
SELECT * FROM students stu INNER JOIN scores sc on stu.studentNo=sc.studentno INNER JOIN  courses cs on sc.courseNo=cs.courseNo;
5: 查询王昭君的数据库成绩,要求显示姓名、课程名、成绩
SELECT stu. name ,cs. name ,sc.score FROM students stu INNER JOIN scores sc on
stu.studentNo=sc.studentno INNER JOIN courses cs on sc.courseNo=cs.courseNo WHERE
stu. name =' 王昭君 ' and cs. name =' 数据库 ';
6: 查询男生中最高成绩,要求显示姓名、课程名、成绩
SELECT stu.NAME,sc.score,cs.NAME FROM students stu INNER JOIN scores sc on
stu.studentNo=sc.studentno INNER JOIN courses cs on cs.courseNo=sc.courseNo
WHERE stu.sex=' '
ORDER BY sc.score DESC
LIMIT 0,1;

左连接(left join...on...)

定义:(右连接反之)

  • 左连接是从左表(左侧的表)中选择所有的行,并包括符合连接条件的右表(右侧的表)中的匹配行。
  • 如果左表的某一行在右表中没有匹配的行,那么结果集中将会显示右表中对应列的值为 NULL。
  • 结果集中将包含左表中的所有行,而右表中不符合连接条件的行将被排除

语法:select * from 表1 left join 表2 on 表1.列=表2.列

1: 查询所有学生的成绩,包括没有成绩的学生
select * from students stu
left join scores sc on stu.studentNo = sc.studentNo 2: 查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
select * from students stu
left join scores sc on stu.studentNo = sc.studentNo
left join courses cs on cs.courseNo = sc.courseNo

右连接

语法 : select * from 表 1 right join 表 2 on 1. = 2.
1: 查询所有学生的成绩,包括没有成绩的学生
select * from scores sc
right join students stu on stu.studentNo = sc.studentNo
2: 查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
select * from scores sc
right join courses cs on cs.courseNo = sc.courseNo
right join students stu on stu.studentNo = sc.studentNo

ps:左右连接中谁左(右)哪个最长的表就放在左(右)边

1.14子查询

充当条件

1 :查询王昭君的成绩,要求显示成绩(标量子查询)
select * from scores where studentNo = ( select studentNo from students where name = ' 王昭君 ' )
例2:查询 18 岁的学生的成绩,要求显示成绩(列子查询)
select * from scores where studentNo in ( select studentNo from students where age= 18 )
例3:查询和王昭君同班、同龄的学生信息(行子查询)
select * from students where ( class ,age)=( select class ,age from students where name = ' 王昭君 ' )

充当数据源

例1:查询数据库和系统测试的课程成绩
Select * from scores s inner join ( select * from courses where name in ( ' 数据库
' , ' 系统测试 ' )) c on s.courseNo = c.courseNo

改(update)

语法:update 表名 set 字段名1=新值1,字段名2=新值2....where 条件

: 修改 id 5 的学生数据,姓名改为 狄仁杰,年龄改为 20
update students set name=' 狄仁杰 ',age=20 where id=5

删(delete)

语法:delete from 表名 where 条件;

: 删除 id 6 的学生数据
delete from students where id=6
注意 : 此方法为物理删除,工作中大部分使用逻辑删除。
逻辑删除是指通过设定一个字段来标识当前记录已经删除。
is_delete 字段来标识, 1 代表删除, 0 表示未删除。
ps:delete 删除所有数据时,自增长字段不会从 1 开始

删除数据其他方式(truncate/drop)

truncate table 表名
: 删除学生表的所有数据 ( 保留表结构 )
truncate table students
drop table 表名
删除学生表 ( 包括所有数据和表结构 )
drop table students

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-String、StringBuffer、StringBuilder区别及相关面试题

目录 一、引言二、String类的基本介绍2.1 创建String对象2.2 字符串的拼接和连接2.3 字符串的比较2.4 字符串的截取和替换2.5 字符串的查找和匹配2.6 创建格式化字符串API文档 三、StringBuffer类的基本介绍3.1 创建StringBuffer对象3.2 字符串的拼接和连接3.3 字符串的插入和删…

简单易用多git服务器ssh密钥配置管理

文章目录 前言一、什么是ssh-key二、配置步骤添加ssh-key配置多ssh-key 总结 前言 快速理解如何配置管理多个git服务器的ssh&#xff0c;当我们有多个git帐号时会涉及如何管理不同的remote使用不同的git账户登陆推送 当前repo的origin remote是github&#xff0c;我们在推送时…

pytorch量化库使用(2)

FX Graph Mode量化模式 训练后量化有多种量化类型&#xff08;仅权重、动态和静态&#xff09;&#xff0c;配置通过qconfig_mapping &#xff08; prepare_fx函数的参数&#xff09;完成。 FXPTQ API 示例&#xff1a; import torch from torch.ao.quantization import (ge…

【MySQL数据库 | 第十九篇】SQL性能分析工具

目录 前言&#xff1a; SQL执行频率&#xff1a; 慢查询日志&#xff1a; profile&#xff1a; profile各个指令&#xff1a; 总结&#xff1a; 前言&#xff1a; 本篇我们将为大家讲解SQL性能的分析工具&#xff0c;而只有熟练的掌握了性能分析的工具&#xff0c;才可以更…

C语言学习(二十九)---内存操作函数

在上一节内容中&#xff0c;我们学习了有关字符串操作的函数&#xff0c;其中分为了限制长度和不限制长度两种方式&#xff0c;虽然上节内容已经在很大程度上有助于程序的实现&#xff0c;但是其有一个致命的缺陷&#xff0c;聪明的你一定已经猜到了吧&#xff0c;对的&#xf…

一面、二面、三面有什么区别?

很多公司面试都分一面、二面、三面甚至更多&#xff0c;大家可能会好奇&#xff0c;为什么要面这么多面&#xff0c;每一面又有啥区别呢&#xff1f; 首先我来回答下为什么要这么多面&#xff0c;最核心的是最后3点&#xff1a; 如果光是一个人面&#xff0c;担心会看走眼&…

Python强类型编程

Python是一门强类型的动态类型语言&#xff0c;具体如下特性&#xff1a; 可以动态构造脚本执行、修改函数、对象类型结构、变量类型但不允许类型不匹配的操作 第一个例子体现动态性&#xff1a;用字符串直接执行代码&#xff0c;动态构建了一个函数并执行&#xff0c;甚至给…

IDEA创建一个Servlet项目(tomcat10)

一、创建maven项目 org.apache.maven.archetypes:maven-archetype-webapp 二、增加Servlet依赖 tomcat9及以前依赖 <!--加入servlet依赖&#xff08;servlet的jar&#xff09;--><dependency><groupId>javax.servlet</groupId><artifactId>ja…

设计模式-抽象工厂模式

抽象工厂模式 1、抽象工厂模式简介2、具体实现 1、抽象工厂模式简介 抽象工厂模式(Abstract Factory Pattern)在工厂模式尚添加了一个创建不同工厂的抽象接口(抽象类或接口实现)&#xff0c;该接口可叫做超级工厂。在使用过程中&#xff0c;我们首先通过抽象接口创建不同的工厂…

NoSQL之 Redis配置与优化

文章目录 一、关系数据库与非关系型数据库关系型数据库&#xff1a;非关系型数据库关系型数据库和非关系型数据库区别&#xff1a;非关系型数据库产生背景 二、Redis简介Redis 具有以下几个优点&#xff1a;使用场景&#xff1a;哪些数据适合放入缓存中Redis为什么这么快 三、R…

4、数据库操作语句:聚合函数

目录 1、定义 2、常用的聚合函数 1&#xff09;Avg/sum&#xff1a;只适用于数值类型的字段&#xff08;或变量&#xff09;。 2&#xff09;Max/min:适用于数值类型、字符串类型、日期时间类型的字段&#xff08;或变量&#xff09; 3&#xff09;Count&#xff1a; ①作…

SpringBoot自定义starter之接口日志输出

文章目录 前言文章主体1 项目全部源码2 项目结构介绍3 starter 的使用3.1 配置文件 application,yml的内容3.2 启动类3.3 控制器类 4 测试结果 结语 前言 本文灵感来源是一道面试题。 要求做一个可以复用的接口日志输出工具&#xff0c;在使用时引入依赖&#xff0c;即可使用。…