
MySQL数据库语句详解(超详细+干货满满)
● DDL语句:数据定义语言,定义了不同的数据段,数据库,表,列,索引等数据库对象的定义。常用的关键字包括:create、drop、alter、rename、truncate● DML语句:数据操纵语言,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字有:insert、delete、update● DCL语句:数据控制语言,用于控制不同数据端直接的许可和访问级别的语句,这些
·
章节目录
MySQL语句的概念
- DDL语句:数据定义语言,定义了不同的数据段,数据库,表,列,索引等数据库对象的定义。常用的关键字包括:create、drop、alter、rename、truncate
- DML语句:数据操纵语言,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字有:insert、delete、update
- DCL语句:数据控制语言,用于控制不同数据端直接的许可和访问级别的语句,这些语句定义了数据库,表,字段,用户的访问权限和安全级别
- DQL语句:数据查询语句,用于从一个或多个表中检索信息,主要的语句关键字包括select
数据库的基本操作
创建数据库
create database 数据库名称;
//同时指定编码格式
create database db1 default charset=utf8;
//如果存在不报错
create database if not exists db1 default charset=utf8;
查询已创建数据库
//显示所有数据库
show database;
//显示某个数据库的数据结构
show create database 数据库名称;
修改数据库信息
alter database 数据库名称 default charset=新的编码格式;
删除数据库
drop database 数据库名称;
数据表的基本操作
数据表的创建
基本语法:
create table 数据表名称(
字段1 字段类型 [字段约束],
字段2 字段类型 [字段约束],
…
);
//案例:创建一个admin管理员表,拥有三个字段(编号,用户名称,用户密码)
mysql> use 数据库名称; #use在MySQL中的含义代表选择,use数据库名称相当于选择指定的数据库
mysql> create table tb_admin(
id tinyint,
username varchar(20),
password char(32)
) engine=innodb default charset=utf8;
tinyint:微整型,范围-128 ~ 127,无符号型,则表示0 ~ 255
表示字符串类型可以使用char与varchar,char代表固定长度的字段,varchar代表变化长度的字段
text:文本类型,一般情况下,用varchar存储不了的字符串信息,都建议使用text文本进行处理
查询已创建数据表
show tables #显示所有数据表(当前数据库)
show create table 数据表名称;
desc 数据表名称;
修改数据表信息
//数据表字段添加
mysql> alter table 数据表名称 add 新字段名称 字段类型 first|after 其他字段名称;
first:把新添加的字段放在第一位
after 字段名称:把新添加字段放在指定字段的后面
//修改字段名称或字段类型
mysql> alter table 数据表名称 change 旧字段名 新字段名 类型;
//仅修改字段的类型
mysql> alter table 数据表名称 modify 字段名 类型;
//删除某个字段
mysql> alter table 数据表名称 drop 字段名称;
//修改数据表引擎
mysql> alter table 数据表名称 engine=myisam;
//修改数据表的编码格式
mysql> alter table 数据表名称 default charset=gbk;
删除数据表
mysql> drop table 数据表名称;
数据的增删改查
数据的增加操作
//首先准备一个数据库表
mysql> use db1;
mysql> create table tb_user(
id int,
username varchar(20),
age tinyint unsigned, #unsigned代表无符号型,只有0-255
sex enum('男','女'), #enum代表枚举类型,多选一。只能从给定的值中选择一个
address varchar(255)
) engine=innodb default charset=utf8;
mysql> insert into 数据表名称([字段1,字段2,字段3...]) values (字段1的值,字段2的值,字段3的值.....);
//举例
mysql> insert into tb_user values (1,'小凯','18','男','北京朝阳');
mysql> insert into db_user(id,username,age) values (2,'小鹿','21');
数据的查询操作
mysql> select * from 数据表名称 [where 查询条件]; #*代表查询所有字段,也可以只查询某些字段
mysql> select id,username from 数据表名称 [where 查询条件];
//只查询id=2的小伙伴信息
mysql> select * from db_user where id=2;
//查询年龄大于17岁小伙伴信息
mysql> select * from db_user where age>17;
数据的修改操作
mysql> update 数据表名称 set 字段1=更新后的值,字段2=更新后的值,....where 更新条件;
//修改’username=小鹿’这条记录,将其年龄更新为22岁,家庭住址更新为广东省广州市
mysql> update tb_user set age=22,address='广东省广州市' where username='小鹿';
//过了一年,每个人的年龄都增加了一岁
mysql> update db_user set age=age+1;
数据的删除操作
mysql> delete from 数据表名称 [where 删除条件];
//删除tb_user表中,id=1的用户信息
mysql> delete from tb_user where id=1;
//清空数据库操作
mysql> delete from 数据表名称;
mysql> truncate 数据表名称;
数据类型
SQL查询语句
1.where 字句
2.group by 子句
3.having 子句
4.order by 子句
5.limit 子句
符号(where字句) | 说明 |
% | 匹配0个或任意多个字符 |
_ | 匹配单个字符 |
like | 模糊匹配 |
= | 等于,精确匹配 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!=和<> | 不等于 |
! 和 not | 逻辑非 |
|| 和 or | 逻辑或 |
&&和and | 逻辑与 |
between...and... | 两者之间 |
in(...) | 在... |
not in(...) | 不在 |
where
//% 表示任意字符
select * from tb_student where name like '张%';
//_ 表示任意的某个字符(只能匹配1个)
select * from tb_student where name like '张_';
//like表示模糊查询
select * from tb_student where name like '%晓%';
//获取年龄在19-20岁之间的同学的信息
select * from tb_student where age between 19 and 20;
//获取id为2,4,6同学的信息
select * from tb_student where id in (2,4,6);
//数据去重操作,加个distinct数据就去重了
select distinct age from tb_student;
group by
//作用:对数据进行分组操作,进行分组统计
//求tb_student表中一共有多少条记录
select count(*) from tb_student;
//求年龄的最大值与最小值
select max(age) from tb_student;
//求tb_student表中,男同学的总数量和女同学的总数量
select sex,count(*) from tb_student group by sex;
//求tb_student表中男同学年龄的最大值和女同学年龄的最大值
select sex,max(age) from tb_student group by sex;
常见统计函数(group by) | 说明 |
max | 求最大值 |
min | 求最小值 |
sum | 求和 |
avg | 求平均值 |
count | 求总行数 |
having
having 与 where类似,根据条件对数据进行过滤筛选
where针对表中的列发挥作用,查询数据
having针对查询结构集发挥作用,筛选数据
//求每个学科中,学科人数大于3的学科信息
//这里就不能使用where,因为where得用在group by之前
select subject,count(*) from tb_student group by subject having count(*) > 3;
order by
//主要作用:就是对数据进行排序(升序,降序)
//默认就是asc升序(从小到大)
//写了desc就是降序(从大到小)
//按照年龄进行排序(升序)
select * from tb_student order by age;
//加了desc就是倒序
select * from tb_student order by age desc;
limit
//limit 主要用于数据分页
mysql> select * from 数据表名称 .... limit n; #只查询满足条件的n条数据(限制数量)
或
mysql> select * from 数据表名称 .... limit m,n; #从偏移量为m开始查询,查询n条记录,m的值从0开始
//获取学生列表中,年龄最大的学员信息
select * from tb_student order by age desc limit 1;
SQL多表查询
union 联合查询
//作用:把多个表中的数据联合在一起进行显示
//应用场景:分库分表
举例:
select * from tb_student union select * from tb_student1;
内连接查询
//内连接查询,把两个表甚至多个表进行连接,然后拿表1中的每一条记录与表2中的每一条记录进行匹配,如果有与之对应的结果,则显示。反之,则忽略这条记录
mysql> select 数据表1.字段列表,数据表2.字段列表 from 数据表1 inner join 数据表2 on 连接条件;
//获取产品表中每个产品的分类信息
select * from tb_goods inner join tb_category on tb_goods.cid = tb_category.id;
外连接查询
//内连接查询要求:表1和表2中的每一条记录必须要一一对应,如果无法匹配,则这条记录会被忽略,那如果我需要保留表1和表2中的所有记录该怎么办? 答:可以使用外连接查询
//左外连接查询:把左表中的每一条数据都保留,右表匹配到结果就显示,匹配不到就显示为null
mysql> select 数据表1.字段列表,数据表2.字段列表 from 数据表1 left join 数据表2 on 连接条件;
//右外连接查询:把右表中的每一条数据都保留,左表匹配到结果就显示,匹配不到就显示为null
mysql> select 数据表1.字段列表,数据表2.字段列表 from 数据表1 right join 数据表2 on 连接条件;
别名机制
//demo
mysql> select g.*,c.name from tb_goods g left join tb_category c on g.cid=c.id;
更多推荐
所有评论(0)