MySQL数据库基础-学习认识

MySQL数据库基础学习

什么是SQL?

在这里插入图片描述

SQL的分类

  • DDL:数据定义语言:
    create,drop,alter…
  • DCL:数据控制语言:
    grant,if…
  • DML:数据操纵语言:
    insert,update,delete…
  • DQL:数据查询语句:
    select…

SQL的使用:

SQL对数据库进行操作:
  • 创建数据库:
    语法:
    create database 数据库名称 [character set 字符集 collate 字符集校对规则];
    字符集校对规则主要用于数据库中数据进行排序的时候。
    在这里插入图片描述

  • 查看数据库:
    语法:
    查看数据服务器中所有的数据库:show databases;在这里插入图片描述
    查看某个数据库的定义信息:show create database 数据库名称;
    在这里插入图片描述

  • 修改数据库:
    语法:
    alter database 数据库名称 character set 字符据 collate 校队规则;
    在这里插入图片描述

  • 删除数据库:
    语法:
    drop database 数据库名称;在这里插入图片描述

  • 数据库的其他操作
    切换数据库:use 数据库名称
    在这里插入图片描述

查看当前正在使用的数据库名称: select database<>;
在这里插入图片描述

SQL对数据库表进行操作:
  • SQL创建表
    语法:
    create table表名称(名称字段 字段类型(长度) 约束,名称字段 字段类型(长度) 约束…);
    字段类型:一个实体对应一个表,一个实体属性对应表的一个字段。
Java中的类型MySQL中的类型
byte/short/int/longtinyint/smallint/int/bigint
floatfloat
doubledouble
booleanbit
char/stringchar和varchar

char和varchar的区别:
 char代表是固定长度的字符或者字符串。
  定义类型char(8),向这个字段存入字符串hello,那么数据库使用三个空格将其补全。
 varchar代表的是可变长度的字符串。
  定义类型varchar(8),向这个字段存入字符串hello,那么存入到数据库的就是hello。

datedate/time/datetime/timestamp

数据库中:
 date只有日期没有时间;
 time只有时间没有日期;
 datetime既有时间也有日期的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中。
 timestamp也是既有时间也有日期,如果没有向这个字段中存入值,数据库使用当前系统的时间存入到数据库中。

fileBLOB/TEXT

约束:
 约束作用:保证数据的完整性
 约束分类:
  主键约束:primary key 主键约束默认就是唯一 非空的
  唯一约束:unique
  非空约束:not null
建表语句:

create database web_test1;
use web_test1;
create table user(
	id int primary key auto_increment,	//auto_increment为自动增长
	username varchar(20) unique,
	password varchar(20) not null,
	age int,
	birthday data
);

在这里插入图片描述

  • SQL查看表
    查看某个数据库下的所有的表
    语法:
     show tables;
    在使用show tables;时我们一定要在当前需要查看的数据库下。
    在这里插入图片描述

查看某个表的结构
语法:
 desc 表名;
在这里插入图片描述

  • SQL删除表
    语法:drop table 表名;在这里插入图片描述
  • SQL修改表
    添加列:
     alter table 表名 add 列名 类型(长度) 约束;
    修改列类型(长度)和约束:
     alter table 表名 modify 列名 类型(长度) 约束
    删除列:
     alter table 表名 drop 列名
    修改列的名称:
     alter table 表名 change 旧列名 新列名 类型(长度) 约束
    修改表的名称:
     rename table 旧表名 to 新表名
    修改表的字符集:
    alter table 表名 character set 字符集;
SQL对数据库表的记录进行操作(重点)
  • SQL添加表的记录
    语法:
    向表中插入某些列:insert into 表名(列名1,列名2,列名3…)values(值1,值2,值3…)
    向表中插入所有列:insert into 表名 values(值1,值2,值3…);
    注意事项:
     1.值的类型与数据库中表列的类型一致。
     2.值的顺序与数据库中表列的顺序一致。
     3.值的最大长度不能超过列设置最大长度。
     4.值的类型是字符串或者日期类型,需要使用单引号引起来。
    添加记录:
     添加某几列
insert into user (id,username,password)values(null,'aaa','123');

在这里插入图片描述
 添加所有列

insert into user values(null,'bbb','123',23,'1993-04-07');

在这里插入图片描述
 添加中文记录

insert into user values (null,'张三','123',23,'1997-10-01');

在这里插入图片描述
直接向数据库中插入中文记录会出现错误!!!
解决办法:
 show variables like ‘%character%’;查看数据库中与字符集相关的参数;
 需要将MySQL数据库服务器中的客户端部分的字符集改为gbk;
 找到MySQL的安装路径:my.ini文件,修改文件中[client]下的字符集:
在这里插入图片描述
 重新启动MySQL的服务:
在Win+R命令下,service.msc,找到MySQL停止服务,然后重新启动。

  • SQL修改表的记录
    语法:update 表名 set 列名=值,列名=值, [where 条件];
    注意事项:
     1.值的类型与列的类型一致;
     2.值的最大长度不能超过列设置的最大长度;
     3.字符串类型和日期类型添加单引号;
    修改某一列的所有值的语句:
update user set password ='abc';

在这里插入图片描述

 按条件修改数据:

update user set password = 'xyz' where username = 'bbb';

在这里插入图片描述
 按条件修改多列:

update user set password = '123' ,age = 34 where username ='aaa';

在这里插入图片描述

  • SQL删除表的记录
    语法:delete from 表名 [where 条件];
    注意事项:
     1.删除表的记录,指的是删除表中的一条记录。
     2.删除如果没有条件,默认删除表中的所有记录。
    删除某一条记录:
delete from user where id = 2;

在这里插入图片描述
 删除表中的所有记录:

delete from user;

在这里插入图片描述
删除表中记录的两中方法:
delete from user;
 删除所有记录,属于DML语句,一条记录一条记录的删除。事务可以作用在DML语句上的。
truncate table user;
 删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL。

SQL查看表的记录
基本查询:
 语法:select[distinct] *或者列名 from 表 [条件];
环境准备:

create table exam(
	id int primary key auto-increment;
	name varchar(20);
	english int,
	chinese int,
	math int
);

insert into exam values (null,'张三',85,74,91);
insert into exam values (null,'李四',95,90,83);
insert into exam values (null,'王五',85,84,49);
insert into exam values (null,'赵六',75,79,76);
insert into exam values (null,'田七',69,63,98);
insert into exam values (null,'李老八',89,90,83);

 查询所有学生考试成绩信息:

select * from exam;

在这里插入图片描述
 查询所有学生的姓名和英语成绩:

select name,english from exam;

在这里插入图片描述
 查询英语成绩信息(不显示重复的信息):

select distinct english from exam;

在这里插入图片描述
 查看学生姓名和学生的总成绩:

select name,english+chinese+math from exam;

在这里插入图片描述
 别名查询:

select name,english+chinese+math as sum from exam;

在这里插入图片描述
条件查询:
 使用where子句
  >,<,>=,<=,<>,=
  like模糊查询
  in范围查询
  条件关联:and,or,not
 查询名字为李四的学生的成绩:

select * from exam where name = '李四';

在这里插入图片描述
 查询名字为李四且英语成绩大于90的学生:

select * from exam where name = '李四' and english > 90;

在这里插入图片描述
 查询姓李的学生的成绩:

//like可以进行模糊查询,在like子句中可以使用_或者%来作为占位符。_只能代表一个字符,而%可以代表任意个字符
select * from exam where name like '李%'

在这里插入图片描述
 英语成绩是69,75,89学生的信息:

select * from exam where english in <69,75,89>;

在这里插入图片描述

 排序查询:
   使用order by 字段名称 asc/dsc
 查询学生信息,并且按照语文成绩进行排序:

select * from exam order by chinese;

在这里插入图片描述
 查询学生信息,按照语文成绩进行倒序排序:

select * from exam order by chinese desc;

在这里插入图片描述
 查询学生信息,先按照语文成绩倒序排序,如果语文成绩相同,再按照英语成绩升序排序:

select * from oeder by chinese desc,english asc;

在这里插入图片描述
 查询姓李的学生的信息,按照英语成绩降序排序

select * from exam where name like '李%' order by english desc;

在这里插入图片描述

 分组统计查询:

 聚合函数的使用:
 sum();
  获取所有学生的英语成绩的总和:

select sum(english) from exam ;

在这里插入图片描述
    获取所有学生的英语成绩和数学成绩的总和:

select sum(english),sum(math) from exam;

在这里插入图片描述
 查询姓李的学生的英语成绩总和:

select sum(english) from exam where name like '李%';

在这里插入图片描述
 查询所有学生各科的总成绩:

select sum(english)+sum(chinese)+sum(math) from exam; 
//按照列的方式统计的,英语成绩的总和+语文成绩的总和+数学成绩的总和。

在这里插入图片描述

select sum(english+chinese+math) from exam;
//英语+语文+数学 然后再求和。

在这里插入图片描述
 两者的区别:
   当他们中有空值的时候,计算结果就会不相同。null+任何值都会为null。使用ifnull函数解决。
在这里插入图片描述
 count();
   获取所有学生的总数:

select count(*) from exam;

在这里插入图片描述
   获取姓李的学生的个数:

select count(*) from exam where name like '李%';

在这里插入图片描述

 max();
   获取数学成绩的最高分:

select max(math) from exam;

在这里插入图片描述

 min();
   获取语文成绩的最小值:

select min(chinese) from exam;

在这里插入图片描述

 avg();
   获取语文成绩的平均值:

select avg(chinese) from exam ;

在这里插入图片描述

分组查询
  语法:使用 group by字段名称;
  环境准备:

create table orderitem(
	id int primary key auto-increment;
	product varchar(20);
	price double;
);

insert into orderintem values (null,'电视机',2999);
insert into orderintem values (null,'电视机',2999);
insert into orderintem values (null,'洗衣机',1000);
insert into orderintem values (null,'洗衣机',1000);
insert into orderintem values (null,'电视机',1000);
insert into orderintem values (null,'冰箱',3999);
insert into orderintem values (null,'冰箱',3999);
insert into orderintem values (null,'空调',1999);

 按照商品名称统计,每类商品购买的个数:

select product,count(*) from orderitem group by product;

在这里插入图片描述
 按照商品名称统计,每类商品所花费的总金额:

select product,sum(price) from orderitem group by product;

在这里插入图片描述
 按照商品名称统计,统计每类商品花费的总金额在5000元以上的商品:

select product,sum(price) from orderitem group by product having sum(price) > 5000;

在这里插入图片描述
 按照商品名称统计,统计每类商品花费的总金额在5000元以上的商品并且按照总金额升序排序:

select product,sum(price) from orderitem group by product having sum(price) > 5000 order by asc;


总结:
  S(select)…F(from)…W(where)…G(group by)…H(having)…O(order by);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值