首页 > 数据库 >Mysql

Mysql

时间:2023-09-22 16:57:00浏览次数:30  
标签:name 数据库 Mysql emp 表名 id select

Mysql

Mysql 介绍

数据库:存放数据的仓库 数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据 常见的数据库 Oracle :甲骨文公司的数据库产品,大型的收费的数据库。 盘符: 不区分大小写 d: \代表一个文件夹

Mysql:安装与卸载

安装

     1. MySQL的安装路径和数据的安装路径。
          安装路径不允许出现中文

MySQLServer mysql的安装路径 server data files 数据的安装路径。 需要你把这两个路径 记一下

mysql的专用端口号:3306 gbk是中文编码格式 utf8 万国码 是mysql数据库的 用户名称(user) root 密码password: 5534 如果没有选择运行窗口,用cmd启动时需要,找到mysql安装路径的bin文件夹,再用 mysql -u root -p 启动 mysql -u root -p

卸载:

1.停止服务 2.控制面板 卸载 3.删除文件夹

DML语句介绍

我们现在安装的是MySQL的服务器, 一个服务器可以有多个数据库 数据库里有多个表 表里面有多个数,表里面的一行称为一条数据或者一条记录。

DB:数据库

SQL: 结构化查询语言

特点: 非过程性语言

SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能 DDL (数据定义语言)用来定义数据库的对象,比如表 增create 删drop 改alter 查desc DML (数据操纵语言)数据库表中更新,增加和删除记录数据

insert into 表名 (字段名) values (对应的值)------部分增加 ​ insert into 表名 values(对应的值)------完全增加 ​ ​ delete from 表名-----全部删除 ​ delete from 表名 where 字段=字段值; ----删除对应的 ​ ​ update 表名 set 字段=新字段值,字段=新字段值 -----全部修改 ​ update 表名 set 字段=新字段值,字段=新字段值 where 字段名=字段值 -----删除对应的 ​ ​ DQL (数据查询语言) 一般来说它是针对表中的数据 ​ DCL (数据控制语言) 设置用户权限和控制事务语句

数据库操作语句

创建数据库

  CREATE  create:创建
 DATABASE DataBase:数据库

每一个单词都要用空格隔开 结尾最好用 ; 隔断 (代写 这个名字你可以随便写,不能写中文)

create database 数据库名称;

create database 数据库名称 charcter set utf8 collate utf8_bin;

CHARACTER SET:指定数据库采用的字符集character set

COLLATE:指定数据库字符集的比较方式collate

默认的字符集设置为utf8 DEFAULT CHARACTER SET utf8 defult 默认的 charcter 字符集 set 设置 如果你要在创建数据库的时间写了字符集格式建议要写字符集的比较方式 utf8 的比较方式 utf8_bin

查看数据库

展示的是多个的数据库

show databases;

显示数据库的定义信息:一个数据库

show create database 数据库名称;

删除数据库

drop database 数据库名称;

修改数据库

不用它改数据库名称 改的是字符集编码格式(utf8)和他的校验规则(utf8_bin)

alter database 数据库名称 character set gbk; 

切换数据库

use db_name;  

如果你不切换数据库的话 你无法对表进行操作

查看当前使用的数据库

select database();

表的操作

int 就是整数类型 varchar(写的是长度,包含文字的长度) 字符 它就是用来写汉字的也可以写英语 字母,各种的符号 如果写varchar() 必须写上长度

创建一个表

字段和字段类型中间用空格隔开 一个字段和一个字段类型是一组,组与组之间用逗号隔开,最后一组可以不写逗号

create table 表的名字(字段名 字段类型, 字段名 字段类型, 字段名 字段类型, 字段名 字段类型);
create table 表名 (id int,name varchar(500),sex varchar(20),age int,);

查看表结构

desc 表名;
show tables ; 查看当前库内所有表名
show create table 表名; 查看建表语句和字符集

删除表

drop table 表名;

修改表

增加一列 语法:

alter table 表名 add 字段名 字段类型(长度) 约束; 

多列:

alter table 表名 add (字段名 字段类型(长度) 约束,字段名 字段类型(长度) 约束);

修改表名

rename table 旧表名 to 新表名;  

修改现有列类型、长度:

alter table 表名  modify 字段名 新的类型(新的长度);

删除列 :

alter table 表名 drop 列名 ; 

修改现有列名称和类型 语法:

alter table 表名 change 旧列名 新列名  类型(长度) 约束;

mysql的数据类型 :

1.字符串型

字符:一个单独的汉字或者字母 字符串就是把字符给串连起来,多个的汉字或者字母varchar(常用 的): 长度是可变的,最大长度比char的长 char:长度是固定的

2.数值型

int 整数型 double 小数类型

3.日期类型

date: 日期 写的是年月日 2019-10-16

time: 时间 写的时分秒 15:12:00

datetime: 写的是日期和时间 2019-10-16 15:12:00

约束:字段

作用:约束用来保证数据有效性和完整性

主键约束 primary key 作用:让数据不能为空,数据不能重复 一个表里面只能存在一个

唯一约束 unique 唯一 不能重复

非空约束: not null 非空 不能为空

null 空 没有

写约束的语法: 字符名 字段类型 约束(约束跟着字段的最后)

删除主键:alter table emp drop primary key

主键自动增长 :auto_increment

values 赋值

alter table studnet modify id int primary key;

对于数据操作

增 删 改 查

字符串类型和日期类型 写值的时间要加上一个 '' 把值包起来 日期类型的格式:年-月-日

查询

select * from 表名;

增加

1.增加:部分增加 字段和值都要写在 ( ) 里

insert into student (id,name,score,datas) values(1,'小红',59.5,'2019-10-23');
insert into studnet () values (1);

语法: insert into 表名 (字段名,字段名,字段名,字段名) values(对应的值,对应的值,对应的值,对应的值);

2.添加: 完全添加 必须把所有字段值都匹配上

insert into studnet  values (1,'小红',59.5,'2019-10-23');

语法: insert into 表名 values (对应的值,对应的值,对应的值,对应的值);

 

错误:1366 它是mysql中文乱码问题

解决办法:

第一步: 找到你mysql的安装路径,打开一个叫my.ini(mysql的配置文件)的文件 第二步: 找到以下的代码[client]port=3306[mysql]default-character-set=utf8 第三步: 把utf8改成gbk让他学会中文,保存 关闭 第四步:重启mysql的客户端,重启cmd

 

删除

我们一般删除一条数据,还是要根据提供的条件删除。这个条件一般来说是id 主键

 delete  from  student; 删除所以数据;
delete from student where id=1;

修改

数据: 我们一般修改一条数据,还是要根据提供的条件修改。这个条件一般来说是id 主键

 

update  student set name = '小明',score=60,dates='2000-01-01';
update student set name = '小白',score=90,dates='2001-02-02' where id=2;

1.练习+扩展

建表语句

create table student (id int, name varchar(50),math double, chinese double,english double);

增加语句

insert into student values(1,'小红',100,80,2);
insert into student values(2,'小明',100,120,120);
insert into student values(3,'小白',0,0,1);
insert into student values(4,'小he',50,80,90);

修改

update student set math=102 where id=1; 加where条件是对一条数据进行操作,不加是对全部进行操作

删除

delete from student where math=102;

查询:

* --- 所有的字段           ..count(*).. 在*前面加count是用来计数的 
select * from 表名;
select id,name,math,english,chinese from stu;

 

1.select *(所有的字段) | 单独的字段 from 表名; 查询这个表的全部数据

我想要查询id为2的stu的学生信息

select *from stu where id=2;

2.distinct 去重 去除重复

select distinct math  from stu;

3.查询表中所有学生的信息。

Select * from stu

4.查询表中所有学生的姓名和对应的英语成绩。

select name,english from stu ;

5.过滤表中重复数学数据。

select distinct math from stu;
insert into stu (name,math,english,chinese) values ('123',456,789,132);

6.select语句可以运算 我要看到所有学生的总分和姓名

select math+english+chinese,name from stu;

7.起别名 可以给字段起 也可以给表起

1). 用as 在要起别名的字段后空一格 写上 as 再空一格写上 别名

select math+english+chinese as zf,name from stu;

2)用空格 直接在你要起别名的字段后空一格 然后写上别名

select math+english+chinese zf,name from stu;

8.在所有学生的所有科目都上加10分特长分。

select name,math+10,english+10,chinese+10 from stu;

2.练习+扩展

create table aaa (id int primary key auto_increment,name varchar(50),math double,english double,chinese double);

1.查询英语成绩大于90分的同学

select * from stu where english < 90;

2.between …and .. 什么什么之间 显示的包含条件

查询英语成绩0到90分的同学

select * from stu  where english between 0 and 90;

3.in() 只显示括号里的值

查询英语成绩是0和90分的同学

select * from stu where english in (0,90);

4.like 模糊查询

我要找到这个表里name中有红字的学生; _ % 在like都代表是占位符 _代表一个字,或者说一位 % 代表多位也可以代表没有

select * from stu where name like '李%';

5.is null 显示的是为null的数据

select * from stu where name is null;

6.and 并且 or 或者 ont 非 查询英语成绩是80分和是90的同学

select * from stu where english = 80  and math =100;

7.查询英语成绩是80分或者是90的同学

select *  from stu where english = 80 or english=1000;

8.查询英语成绩是0的同学

select * from stu where not (english = 0);

9.用字段名给表排序 order by 默认是升序 asc 降序是desc

select * from 表名 order by 字段名  desc/asc(asc 是默认 可写可不写) 

10.给表分组 group by

select * from 表名 group by 字段名

11.avg(列名) 求平均值 求一个班级数学平均分?

select avg(math) from student;

12.求一个班级总分平均分

select avg(ifnull(math,0)+english+chinese) from student;

13.max() 最大值 min()最小值

14.group by 分组 就是一类东西放在一起 这一类东西是你自己定义的

select * from student group by id having  id=1;

15.Having和where均可实现过滤,但在having可以使用函数,having通常跟在group by后,它作用于分组

select * from dept;
+----+------+
| id | name |
+----+------+
|  1 | 财务 |
|  2 | 人事 |
|  3 | 后勤 |
+----+------+
select * from emp;
+----+------+------+
| id | name | d_id |
+----+------+------+
|  1 | 美美 |    1 |
|  2 | 小黑 |    2 |
|  3 | 白白 |    3 |
+----+------+------+

16.笛卡尔积(了解): 就是把两张表的数据给全部的组合一遍 例如:

select * from emp,dept;
+----+------+------+----+------+
| id | name | d_id | id | name |
+----+------+------+----+------+
|  1 | 美美 |    1 |  1 | 财务 |

|  2 | 小黑 |    2 |  1 | 财务 |
|  3 | 白白 |    3 |  1 | 财务 |
|  1 | 美美 |    1 |  2 | 人事 |


|  2 | 小黑 |    2 |  2 | 人事 |


|  3 | 白白 |    3 |  2 | 人事 |
|  1 | 美美 |    1 |  3 | 后勤 |
|  2 | 小黑 |    2 |  3 | 后勤 |

|  3 | 白白 |    3 |  3 | 后勤 |
+----+------+------+----+------+

17.想要得要我们需要的结果,我们要加条件:

select * from emp,dept where emp.d_id = dept.id;
+----+------+------+----+------+
| id | name | d_id | id | name |
+----+------+------+----+------+
|  1 | 美美 |    1 |  1 | 财务 |
|  2 | 小黑 |    2 |  2 | 人事 |
|  3 | 白白 |    3 |  3 | 后勤 |
+----+------+------+----+------+

18.多表联查:

  1. 内连接 (隐式内连接和普通的内连接出来的结果是一模一样的,只是写法不同而已) 1.1 隐式内连接

    语法: select * from 表名,表名 条件;
    select * from emp,dept where emp.d_id = dept.id;

    1.2 普通内连接 关键字 inner join ..... on inner join 两头写的是表名 on 后写的是条件

    语法:select * from 表名 inner join 表名 on 条件;
    select * from emp,dept where emp.d_id = dept.id;
    select * from emp inner join dept on emp.d_id = dept.id;

    +----+------+------+----+------+ | id | name | d_id | id | name | +----+------+------+----+------+ | 1 | 美美 | 1 | 1 | 财务 | | 2 | 小黑 | 2 | 2 | 人事 | | 3 | 白白 | 3 | 3 | 后勤 | +----+------+------+----+------+

  1. 外连接

2.1: 左连接 (以左边的表为主表,把内容全部都要显示出来) 关键字 left [outer] join ..... on

 select * from emp left join dept on emp.d_id = dept.id;

2.2:右连接 (以右边的表为主表,把内容全部都要显示出来) 关键字 right [outer] join ..... on

select * from emp right join dept on emp.d_id = dept.id;

3.子查询

语法:select * from table where 条件 > (select * from table where 条件)
>any:大于子查询中的最小值。
>all: 大于子查询中的最大值。

 

19.查看所有人所属的部门名称和员工名称?

select e.name,d.name 
from emp as e inner join dept d on e.d_id = d.id;

+------+------+
| name | name |
+------+------+
| 美美 | 财务 |
| 小黑 | 人事 |
| 白白 | 后勤 |
+------+------+

20.统计每个部门的人数(按照部门名称统计)

select d.name,count(e.d_id)
from emp e right join dept d  on e.d_id = d.id group by d.name;

+------+---------------+
| name | count(e.d_id) |
+------+---------------+
| 人事 |             1 |
| 后勤 |             1 |
| 安保 |             0 |
| 财务 |             1 |
+------+---------------+

 

21.统计部门的平均工资(按部门名称统计)

1.查两个表

from emp e right join dept d on  e.d_id = d.id;

2.按照部门分组

 from emp e right join dept d on  e.d_id = d.id group by d.name;

22.求工资

select d.name,avg(e.salaly)

from emp e right join dept d on e.d_id = d.id group by d.name;

+------+---------------+
| name | avg(e.salaly) |
+------+---------------+
| 人事 |          3000 |
| 后勤 |          2000 |
| 安保 |          NULL |
| 财务 |          3000 |
+------+---------------+

部门的平均工资大于公司平均工资的部门

select d.name from emp e right join dept d on  e.d_id = d.id group by d.name having avg(e.salaly) >( select avg(salaly) from emp);

23.部门的平均工资:

select d.name,avg(e.salaly) from emp e right join dept d on  e.d_id = d.id group by d.name;

24.公司平均工资:

select avg(salaly) from emp;
 

标签:name,数据库,Mysql,emp,表名,id,select
From: https://www.cnblogs.com/yytzz/p/17722837.html

相关文章

  • [转]MySQL中 datetime类型精度提示:需要精确到微秒请不要直接使用datetime类型。
    MySQL中的默认的datatime类型所控制的精度是不包含到毫秒的,它即包含date,也包含time,即:'YYYY-MM-DDhh:mm:ss',取值范围为'1000-01-0100:00:00'到'9999-12-3123:59:59'那么问题来了:1.如果插入的数据带有毫秒,那么会成功吗?如果成功,毫秒部分如何处理?是直接丢弃还是舍入?2.......
  • php js+laravel+mysql手术麻醉临床信息系统
    医院手麻系统源码 技术架构:phpjs+laravel+mysql vue2elementB/S网页版手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字......
  • MySQL高级SQL语句之多表连接
    目录MySQL高级SQL语句1.实际操作1.1新建表1.2查看表及内容1.3通配符1.4函数1.4.1数学函数:1.4.2聚合函数:1.4.3字符串函数:1.5语句1.5.1GROUPBYsql语句的执行顺序1.5.2HAVING1.5.3别名1.6查询1.6.1子查询1.6.2EXISTS1.7表连接1.7.1innerjoin内连接1.7.2leftjoi......
  • MySQL中的Statistics等待
    【作者】吴宙旭,携程数据库专家【问题描述】线上我们偶尔会碰到MySQL的状态是statistics.但如果出现大量的statistics等待,会引起MySQL性能急剧下降。官方的文档对这个状态的解释如下:Theserveriscalculatingstatisticstodevelopaqueryexecutionplan.Ifathreadis......
  • nods中mysql时间相差8小时
    前言最近在做自己的一个记账项目,后端nestjs中使用typeorm的mysql。当添加记录时,发现所以时间都相差了8小时。后面查了一下资料发现因为默认timezone是用UTC的。所以只需要设置成我们自己的时区即可。解决方法ormconfig.json{"type":"mysql","host":"localhost","po......
  • MySQL 主从复制与读写分离
    MySQL主从复制与读写分离1、什么是读写分离?读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。2、为什么要读写分离呢?因为数据库的“写”(写10000......
  • docker 部署mysql8.3.0
    以下内容全部来源于https://blog.csdn.net/Weirdo_zhu/article/details/126358872?spm=1001.2014.3001.5501一、拉取镜像dockerpullmysql:8.0.30二、创建挂载路径 //根目录选择自身实际最大磁盘路径一般为/home或者定义/datamkdir-p/data/mysql/datamkdir-p/data/m......
  • 将hive数据库中的数据导入到mysql数据库中时需要注意到的问题
    在hive中使用jdbc将hive与mysql连接起来时一定要注意到每个数据库不同的字段个数,在打算直接复制时,不能只是修改表的名称和字段名称,还要记得修改几个?那里,个数要与字段名称保持一致!!!不然就会报错(比如我);......
  • 中国核动力研究设计院使用 DolphinDB 替换 MySQL 实时监控仪表
    随着仪表测点的大幅增多和采样频率的增加,中国核动力研究设计院仪控团队原本基于MySQL搭建的旧系统已经无法满足大量数据并发写入、实时查询和聚合计算的需求。他们在研究DB-Engines时序数据库榜单时了解到国内排名第一的DolphinDB。经过测试,发现其非常符合业务需求,并且在2022......
  • mysql 5.7在线开启/关闭GTID【转】
    一、在线开启gtid步骤步骤1到步骤5在每个mysql节点都执行,不可以单独某个库独立做完所有步骤再去操作其他节点;尤其注意不能先将主库打开gtid,从库任何参数不设置,这样将导致同步中断。1、检查数据库中是否有不支持gtid的操作设置ENFORCE_GTID_CONSISTENCY=WARN,运行一段时间,最好包......