章节目录

MySQL语句的概念

数据库的基本操作

创建数据库

 查询已创建数据库

修改数据库信息 

删除数据库 

数据表的基本操作

数据表的创建

查询已创建数据表 

修改数据表信息 

删除数据表 

数据的增删改查

数据的增加操作

数据的查询操作 

数据的修改操作 

数据的删除操作

数据类型

SQL查询语句

where

group by

having 

order by 

limit 

SQL多表查询

union 联合查询

内连接查询 

外连接查询 

别名机制


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;
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐