javaweb_day05(mysql基础)
1.查看所有数据:show databases;
2.切换数据库:use 数据库名称;
create table 表名(
字段名1 类型 约束,
字段名1 类型 约束,
...
字段名1 类型 约束
);
单表约束:
主键约束:primary key 一般主键约束和自动增长连用:auto_increment
非空约束:not null
唯一约束:unique
4.1、添加数据:
向某几列中添加值:insert into 表名 (列1,列2,....) values (值1,值2,...)
向每一列都添加值:insert into 表名 values (值1,值2,..); //添加了一行数据
一次性添加多行数据:insert into 表名 values (值1,值2,..),(值1,值2,...),(值1,值2,...),...;
注意事项:(一一对应)
4.2、修改数据
update 表名 set 列1=值1,列2=值2,... [where 条件]; 如果省略了where条件,那么就修改这一列的所有值
update user set password=”123”,age=20 where username=”aaa”;
4.3、删除数据
delete from 表名 [where 条件]
delete from user; //删除表中的所有数据 :将表中的数据一行一行的删 DML
delete from user where age > 20; //删除年龄大于20的用户信息
删除表中的所有数据:truncate table 表名 :将表删除,然后创建一张和之前表结构相同的新表 DDL
4.4、基本查询
最经典的查询语句:select * from 表名;
-- 1、 查询所有学生的考试信息
SELECT * FROM exam;
-- 2、 查询所有学生的姓名和英语成绩
SELECT NAME,english FROM exam;
-- 3、 查询英语成绩,要求不重复
SELECT DISTINCT english FROM exam;
-- 4、 查询所有成绩的总和
SELECT chinese+math+english FROM exam;
-- 5、 别名查询
SELECT chinese+math+english AS SUM FROM exam;
SELECT chinese+math+english SUM FROM exam;
4.5、条件查询
SELECT * FROM exam WHERE english >80;-- 带运算符 > < >= =< <> =
SELECT * FROM exam WHERE NAME LIKE "李_";-- 模糊查询之_
SELECT * FROM exam WHERE NAME LIKE "李%";-- 模糊查询之%
SELECT * FROM exam WHERE math IN (83,91,98);-- 把数学成绩是83,91,98的同学查到了。
SELECT * FROM exam WHERE math=83 OR math = 91 OR math=98;
SELECT * FROM exam WHERE english >86 AND english <100;
SELECT * FROM exam WHERE english BETWEEN 86 AND 100;-- between..and..:取介于两个值之间的数据;
-- and连接多个并列条件,查询数学大于80且姓李的同学成绩
SELECT * FROM exam WHERE NAME LIKE "李%" AND math >80;
-- 数学成绩不是83或者91或者98同学的信息
SELECT * FROM exam WHERE math NOT IN (83,91,98);
4.6、排序查询
order by 字段名1 [asc/desc],字段名2 [asc/desc], .....
select * from exam where name like “李%” order by english asc,chinese desc;
4.7、聚合函数
sum() :求和
avg() :求平均数
count(*) :统计个数 注意:得到的结果是一个bigint----》long
min() :求最小值
max() :求最大值
补充:ifnull(字段名,0) :如果该字段是null,那么就用0来代替null做运算;
length() : 计算字段值的长度 不属于聚合函数
4.8、分组查询
group by 字段名 [having 条件]
-- 案例4:按商品名称统计,统计每类商品花费的总金额在5000元以上的商品,并且按照总金额升序排序
SELECT SUM(price) FROM orderitem GROUP BY product HAVING SUM(price)>5000 ORDER BY SUM(price) ASC;
having关键字:当条件有聚合函数或者分组之后还需要筛选,那么就使用having来过滤 having是对结果进行筛选。
总结:
select * from 表名 [where 条件] [group by 字段名] [having 条件] [order by 字段名 asc/desc] ;
01、MySQL数据库的概述
02、MySQL的安装
在资料里面有安装图解,按照那个来就行了。
03、MySQL的数据库服务器的存储方式
一个数据库服务器中会存在很多数据库,一般一个应用就对应一个数据库;一个数据库中会有很多表,一般一个实体类就对应一张表,比如:商品、订单、用户信息等;一张表里面会有很多条数据,一般一个实体对象就对应一条数据。
总结一句话:数据在数据库里面是用表来存的。
04、SQL的概述
05、SQL操作数据库:对数据库进行CRUD的操作
1、推荐大家使用工具类操作:
第一次打开可能需要注册激活,那么大家key里面的内容对应复制就行了:
激活完成之后打开界面需要建立一个连接,让工具连接到mysql数据库:
2、对数据库进行CRUD的操作使用
-- 创建数据库 -- 语法:create database 数据库名 [character set 字符集 collate 字符集校验规则]; CREATE DATABASE db1;-- 创建一个数据库叫db1 CREATE DATABASE db2 CHARACTER SET gbk;-- 创建一个字符集为gbk的数据库叫db2 CREATE DATABASE db3 CHARACTER SET utf8 COLLATE utf8_bin;-- 创建一个字符集为utf-8,字符集校验为utf8_bin的数据库叫db3 -- 查看数据库(查看所有数据库、查看数据库的创建信息) -- 语法: -- 1、show databases; -- 2、show create database 数据库名; SHOW DATABASES;-- 查看所有数据库 SHOW CREATE DATABASE db2;-- 查看数据库db2的信息 SHOW CREATE DATABASE db3;-- 查看数据库db3的信息 -- 删除数据库 -- 语法:drop database 数据库名; DROP DATABASE db1;-- 删除db1数据库 SHOW DATABASES; -- 修改数据库的字符集 -- 语法:alter database 数据库名 character set 字符集 [collate 字符集校验规则]; ALTER DATABASE db2 CHARACTER SET utf8;-- 把db2数据库的字符集修改成utf8 SHOW CREATE DATABASE db2; -- 查看数据库结构 -- 其他数据库操作(切换正在使用的数据库、查看当前选择的数据库) -- 语法: -- 1、use 数据库名; -- 2、select database();括号必须要 USE db2;-- 切换(使用)db2数据库 SELECT DATABASE();-- 查看当前选择的数据库(也就是正在使用的数据库) |
06、SQL操作数据库中表:创建表之数据类型
Java中的类型 MySQL中的类型
byte/short/int/long tinyint/smallint/int/bigint
float float
double double
boolean bit
char/String char和varchar类型
char和varchar的区别:
* char代表是固定长度的字符或字符串。
* 定义类型char(8),向这个字段存入字符串hello,那么数据库使用三个空格将其补全。
* varchar代表的是可变长度的字符串。
* 定义类型varchar(8), 向这个字段存入字符串hello,那么存入到数据库的就是hello。
Date date/time/datetime/timestamp
datetime和timestamp区别
* datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中
* timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的系统时间存入到数据库中。
File BLOB/TEXT
07、SQL操作数据库中表:创建表之约束及建表
约束的作用:用来规范数据的完整性。
单表的约束分类:
主键约束:primary key
唯一性约束:unique
非空约束:not null
注意:一个表中的主键只有一个。
创建表需要注意:创建表之前要有数据库,并且通过use 数据库名”来使用一个数据库,再在这个数据库里面创建表:
08、SQL操作数据库中表:查看所有表和查看某个表结构
对应结果:
09、SQL操作数据库中表:删除表
10、SQL操作数据库中表:修改表
修改表名使用rename to,修改表的字符集 character set
4、改列的字段、字段长度、约束:alter table 表名 modify 列名 字段类型(长度) [约束];
5、表名:rename table 旧表名 to 新表名 或者 alter table 旧表名 rename to 新表名
6、表的字符集:alter table 表名 chatacter set 新字符集 [collate字符集校验规则]
11、SQL操作数据库中表的记录:添加记录
结果如下:
12、SQL操作数据库中表的记录:添加中文记录
查看数据库的字符集:show variables like ‘%character%’;
,
这样的弊端就是:我们以后通过程序向数据库中插入值,程序的工作空间必须是gbk,不方便,所以,配置文件中还是保持是utf8,使用SQLyog等工具向数据库中插入数据,不使用cmd窗口操作就行了。
案例:
结果如下:
13、SQL操作数据库中表的记录:修改记录
update 表名 set 列名1=值1,列名2=值2…[where条件];
如果没有带条件,那么就是把这一列的值都修改了。
案例1:
案例2:
案例3:
14、SQL操作数据库中表的记录:删除记录
delete from 表名:是DML语句,一条一条的删除数据,事务可以作用在DML语句上。
truncate table 表名:是DDL语句,先删除表,再创建一个跟之前表一样结构的新表,事务不能作用在DDL语句上。
案例1:根据条件删除一行数据
案例2:删除所有数据
15、SQL操作数据库中表的记录:查询操作、基本查询
select * from 表名----------------------------------------------->查询所有信息
select列1,列2…from 表名--------------------------------->查询某几列的信息
16、SQL操作数据库中表的记录:查询操作、条件查询
1、使用where关键字表示条件查询,里面可包含如下关键字:
> , < , >= , =< , <> , = !=
2、模糊查询使用like关键字
like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。_只能代表一个字符,而%可以代表任意个字符。
* like ‘李_’ :名字中必须是两个字,而且是姓李的。
* like ‘李%’ :名字中姓李的学生,李字后可以有1个或任意个字符。
* like ‘%四’ :名字中以四结尾的。
* like ‘%王%’ :只要名称中包含这个字就可以。
in:是在给定的几个值之间查询。
between.. and:取介于两个值之间的数据,是在一个范围内查询。相当于where xxx>a and xxx;
条件关联:and , or , not,可以连接多个条件
案例1:> , < , >= , =< , <> , =
案例2:like模糊查询
只能查到名字是两个字,且姓李的同学
只要包含李字,都能查到。
案例3:in:在给定的范围内查询
‘
案例4:between..and..:取介于两个值之间的数据
案例5:条件关联:and , or , not可以连接多个条件
17、SQL操作数据库中表的记录:查询操作、排序查询
语法结构:select * from 表名 [where 条件] order by 列名 asc/desc,列名 asc/desc …
案例1:升序查询
案例2:
案例3:
18、SQL操作数据库中表的记录:查询操作、聚合函数查询
sum(字段名); 查询某一列数据总和
案例1:查询所有学生英语成绩总和
案例2:获取所有学生的英语成绩总和和数学成绩总和
案例3:查询姓李的学生的英语成绩的总和
案例4:查询所有学生各科的总成绩
区别:SUM(english)+SUM(chinese)+SUM(math):是先计算每一列之和再求总和;
SUM(english+chinese+math):是先计算每个人的english、chinese、math之和再求总和
如何某个人的成绩存在null,这两种方式求总和就不一样了(null和一个数做算数运算等于null),但是我们可以使用ifnull函数
count(字段名),统计数量
案例1:获得学生的总数
===》
===》
注意:如果有null值,这不被计算。
===》
案例2:获得姓李的学生的个数
===》
max(字段名),计算最大值
案例:获得数学成绩的最高分
===》
min(字段名),计算最小值
案例:获得语文成绩的最小值
===》
avg(字段名),计算平均值
案例:获取语文成绩的平均值
===》
19、SQL操作数据库中表的记录:查询操作、分组查询
准备数据:
create table orderitem(
id int primary key auto_increment,
product varchar(20),
price double
);
insert into orderitem values (null,'电视机',2999);
insert into orderitem values (null,'电视机',2999);写博客
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'冰箱',3999);
insert into orderitem values (null,'冰箱',3999);
insert into orderitem values (null,'空调',1999);
案例1:按商品名称统计,每类商品所购买的个数:
===》
案例2:按商品名称统计,每类商品所花费的总金额:
===》
案例3:按商品名称统计,统计每类商品花费的总金额在5000元以上的商品:
2、注意:where子句不能使用聚合函数,如果现在使用带有聚合函数的条件过滤或者分组后过滤,使用having关键字
案例4:按商品名称统计,统计每类商品花费的总金额在5000元以上的商品,并且按照总金额升序排序: