Java

Java,第1张

Java_SQL语言常用语法规则

使用编译器:Intellij IDEA

  1. DDL:数据库定义语言,用于建库、建表、建约束
  2. DML:数据 *** 作语言,用于增删改表中的数据
  3. DQL:数据查询语言,用于查询数据
  4. DCL:数据控制语言,用于权限管理
A. DDL *** 作数据库

SQL中的注释是- -

1. 创建数据库

语法:
[ ]表示可选的

create database 数据库名字 [character set 字符集编码] [collate 校对规则];

案例

create database mall;

2. 查看数据库

a.查看所有数据库

show databases;
b.查看当前数据库结构、名字啥的
show create database 数据库名字;
c.修改数据库
alter database 数据库名字 character set 编码;
d.切换数据库
user 数据库名字;
e.查看当前使用的数据库
select database();
f.删除数据库
drop database 数据库名字;

3. DDL *** 作表

MySQL的常用数据类型
  • 数字类型
    • 整数 int和bigint
    • 小数 decimal(4,2)总长度4,小数后保留2位
  • 文本
    • CHAR 表示固定长度的,例如char(64),占据64个字符
    • VARCHAR 表示可变长度,例如varchar(64)存储abc,占据3个字符
    • TEXT 例如存储商品详情
  • 时间日期类型
    • DATE
    • DATATIME
MySQL的约束

约束就是规则,也叫限制。作用是保证用户插入的数据保存数据是符合规则的。
常见的约束:

  • 主键约束 primary key 表示非空+唯一,一般使用在ID列,每张表都会有ID这个列,ID就作为唯一的表示。

  • auto_increment 主键主动增长,必须设置 primary key以后才可以设置auto_increment,只有设置了auto_increment才可以插入null,主键ID的值有数据库自己维护,否则不设置auto_increment插入null就会报错。

  • 唯一约束 unique 字段的数据不能重复。

  • 非空约束 not null 即字段不能为空。

    a. 创建表
    表中一般包含很多列

create table 表名(
	列名(字段名) 数据类型 约束,
	列名(字段名) 数据类型 约束,
	列名(字段名) 数据类型 约束
);
b.查看表

查看所有表

show tables;

查看表的结构

desc 表名;
c.删除表
drop table 表名;
d.修改表

添加列

alter table 表名 add 字段 类型 约束;

例子:

alter table tbl_user add birthday date not null;

修改列的类型、约束

alter table 表名 modify 字段 类型 约束;

修改列的名称、类型、约束

alter table 表名 change 旧列名 新列名 类型 约束;

删除列

alter table 表名 drop 列名;

修改表名

rename table 表名 to 新表名;
e.删除表
drop table 表名;
f.清除表数据
truncate table 表名;
B. DML *** 作表记录

先准备一张测试表:

create table mall(
    ID int primary key auto_increment comment '商品id',
    name varchar(128) not null comment '商品名称',
    price decimal(10,2) not null comment '商品价格',
    product_date datetime not null comment '生产日期',
    stock int not null comment '库存',
    detail text comment '商品详情'
);
1. DML 增加表记录
方法一:插入指定的列
insert into 表名(列名,列名,列名) values(值,值,值)

列名和值要一一对应和匹配(数据类型)。如果表中得列没有列出来,那么会以null自动赋值。例子:

insert into mall(name,price,product_date,stock)
value ('mate40',8888.99,'2022-4-23 12:00:00',5000);


方式二:插入所有的列
必须要给表中的所有列进行赋值,如果不需要给值,要使用null占位置

insert into 表名 values(值,值);
-- 几个列就需要几个值

例子:

insert into mall values(null,'mate50',88888.99,'2023-4-23 12:00:00',10000,null);

2. 使用DML修改表记录

语法:

update 表名 set 列名=值,列名=[where 条件];

如果没有where条件,那么会默认是修改表中所有的记录。
例子:

update mall set stock=100; -- 将库存全部改成100

3. 使用DML删除表记录

方式一:使用delete删除

delete from 表名 [where 条件];

如果不加条件,会删除所有数据。
删除iphone

delete  from mall where name like 'iPHONE%';

删除前:

删除后:

方式二:受用truncate删除表
**会删除表中所有的记录。**不会再保留表结构,创建一个新表会从头开始,比如 ID 等。

truncate table 表名;

日常开始只做逻辑删除(给表加字段,status 1:启用,0:禁用,禁用表示逻辑上的删除),物理删除表示真正的删除,数据不再存在。delete是物理删除。

C. DQL查询表记录

1.使用DQL实现基本查询

select [*] [列名,列名] [列名 as 别名, 列名 as 别名] [distinct 列名] from 表名;
-- *表示所有的列
-- [] 表示可选的
a. 查询所有的列
select * from mall;


b. 查询指定的列

select id,name,price from mall;


c. 别名查询

select name as '商品名称' ,price as '商品价格',product_date as '出产日期' from mall;


d. 去重查询,表中某个列值重复,可以使用distinct去重

select distinct 列名 from 表名;
select distinct price from mall;


distinct再去重的时候,distinct前面不能有其他的列名。
e. 运算查询
运算就是java中的算术运算符
只有数值类型的数据才支持运算查询。

select id,name,price+500 as price,stock,product_date,detail from mall;


2.DQL实现条件查询
语法:

select [*] [列名,列名] [distinct 列名] from 表名 [where 条件];

条件:

  • 比较运算符,特殊的,不等于<>,等于=
  • between … and… 查询某个区间的值,包含头和尾
  • in(list),查询包含在in列表中的值,例如 in(1,2)
  • like模糊查询,_表示占一位,%表示占0位或者多位
  • is null 是否是空
  • 逻辑运算符 and,or,not
3. 使用DQL实现排序查询

可以使用order by字句实现排序,对查询结果进行排序。
语法:

select [*] [列名,列名] [distinct 列名] from 表名 [where 条件] order by 列名[asc|desc],列名[asc|desc];
  • asc 表示升序排序,默认是升序
  • desc 表示降序排序
select * from mall order by price;

4. MySQL聚合函数的使用

聚合是纵向查询,会对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值(null)。

常用的聚合函数:
-max(列名),求该列的最大值
-min(列名),求该列的最小值
-avg(列名),求该列的平均值
-sum(列名),求该列的和
-count(列名),求该列一共有多少条记录
语法:

select 聚合函数(列名) from 表名 [where 条件];

例子:

select max(score) from tb1_student;


聚合函数会忽略null,例如计算avg会出现问题。解决这个问题,可以使用ifnull(列名,默认值),如果是null,会返回默认值。

select avg(ifnull(score,0)) from tb1_student;
5.分组查询

使用group by来实现的。分组是将字符结果相同的作为一组,一般会和聚合函数一起使用。

select 聚合函数(列名) from 表名 [where 条件] group by 列名 [having 条件];

where子句和having子句的区别
having子句 是对分组之后的结果进行筛选,即分组之后过滤数据,先分组再过滤;having子句后可以使用聚合函数;
where子句 是对查询结果分组,将不符合where条件的行数据去掉,即在分组之前进行数据过滤,先过滤,在分组。where之后不可以使用聚合函数。

6. 分页查询

MySQL使用limit实现,限制查询记录的条数,实现分页。

select 列名 from 表名 [where 条件] limit a,b;

a表示开始的行数,从0开始计数,如果省略默认就是0,a=(当前页码-1)*b。
b表示查询的行数。即每一页显示的条数
分页主要关注页码(第几页)pageNo,每页显示的记录条数pageSize
分页查询的公式

select 列名 from 表名 [where 条件] limit (pageNo-1)*pageSize,pageSize;

推荐课程:B站:跟光磊学Java系列

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/724443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存