MySQL的初级和高级

本文深入介绍了MySQL数据库的基础和高级操作,包括数据类型如int和varchar的使用,date函数的差异,以及创建库、表的语法。详细讲解了增删改查的基本操作,并探讨了修改表结构的方法。此外,还涵盖了条件查询、聚合函数、分组、排序和分页等查询技巧,以及联结查询的不同类型,如inner join和outer join,为数据库管理和查询提供了全面指导。
摘要由CSDN通过智能技术生成


一、数据库的数据类型

在这里插入图片描述
最常用的还是int型
在这里插入图片描述

由于varchar可变,最常用的为varchar。
在这里插入图片描述
用的比较少,要在特定的地方使用
在这里插入图片描述
datetime使用的比较多,当要确定它在什么范围时,就要用datetime来确定,单纯的用date的话确定不了。


二、date函数

MySQL Date 函数
在这里插入图片描述
SQL Server Date 函数

在这里插入图片描述

使用不同的数据库他里面的调用方法也是不同的,如果想要查看其使用方法可以去w3c里去看。
链接:w3c的SQL

三、MySQL初级

1.创建库

create database 库名 default charset=utf8mb4;.

在这里插入图片描述

2.创建表

1、create table 表名( 字段名 类型 字段约束, 字段名 类型 字段约束, 字段名 类型 字段约束, )engine=innodb default charset=utf8mb4;

在这里插入图片描述

unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度

2、create table if not exists 表名(字段1 类型,字段2 类型);
在这里插入图片描述
3、一些关键字的意思

符号意思
show tables查看表
drop table 表名;删除表
show create table users;查看建标语句
unsigned无符号(给数值类型使用,表示为正数,不写可以表示正负数都可以)
not null不能为空,在操作数据库时如果输入该字段的数据为NULL ,就会报错
default设置默认值
primary key定义列为自增属性,一般用于主键,数值会自动加1
auto_increment定义列为自增属性,一般用于主键,数值会自动加1
unique唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度
符号意思

主键的创建

创建ID字段,为正整数,不允许为空 主键,自动递增

id int unsigned not null primary key auto_increment,  

3.修改表的结构

(1) 添加字段

语法格式:alter table 表名 action (更改的选项)

# 语法:alter table 表名 add 添加的字段信息 
//在 users 表中 追加 一个 num 字段 
alter table users add num int not null;
 
//在指定字段后面追加字段 在 users 表中 age字段后面 添加一个 email 字段 
alter table users add email varchar(50) after age;
 
// 在指定字段后面追加字段,在 users 表中 age字段后面 添加一个 phone 
alter table users add phone char(11) not null after age;
 
// 在表的最前面添加一个字段 
alter table users add aa int first;
// 删除字段 alter table 表名 drop 被删除的字段名 
alter table users drop aa

(2) 修改字段

语法格式: alter table 表名 change|modify 被修改的字段信息 change: 可以修改字段名, modify: 不能修改字段名。
 
// 修改表中的 num 字段 类型,使用 modify 不修改表名 a
lter table users modify num tinyint not null default 12;
 
// 修改表中的 num 字段 为 int并且字段名为 nn 
alter table users change num mm int;
 
// 注意:一般情况下,无特殊要求,不要轻易修改表结构

(3) 更改表中的自增的值

alter table users auto_increment = 1000;

3.增删改查

(1) 插入

//insert into 表名[(字段列表)] values(值列表...);
// 批量添加值 
 insert into stu values 
  (null,'zhaoliu',25,'w','lamp94'), 
  (null,'uu01',26,'m','lamp94'), 
  (null,'uu02',28,'w','lamp92'), 
  (null,'qq02',24,'m','lamp92'), 
  (null,'uu03',32,'m','lamp138'),   
  (null,'qq03',23,'w','lamp94'),  
  (null,'aa',19,'m','lamp138'); 
       

(2) 查询

由于MySQL高级详细地讲了查询的操作这里就不细写了
select * from 表名; select 字段1,字段2,字段3 from 表名;
select * from 表名 where 字段=某个值;

(3)修改

`

//update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 条件;
//将id值为12和14的数据值sex改为m,classid改为lamp92
update stu set sex='m',classid='lamp92' where id=12 or id=14
等价于下面
update stu set sex='m',classid='lamp92' where id in(12,14);`

(4) 删除

//delete from 表名 where 字段=某个值; 
 //删除stu表中id值为20到30的数据 
 delete from stu where id>=20 and id<=30; 

四、MySQLSQL高级

1、MySQL数据查询SQL

语法格式:

select 字段列表|*  
from 表名 
[where 搜索条件] 
[group by 分组字段 [having 分组条件]] 
[order by 排序字段 排序规则] 
[limit 分页参数]

1)Where 条件查询

//可以在where子句中指定任何条件 
//可以使用 and 或者 or 指定一个或多个条件 
//where条件也可以运用在update和delete语句的后面 
//where子句类似程序语言中if条件,根据mysql表中的字段值来进行数据的过滤
// 查询users表中 age > 22的数据 
 select * from users where age > 22; 
//查询 users 表中 name=某个条件值 的数据 
select * from users where name = '王五';
 
//查询 users 表中 年龄在22到25之间的数据 
select * from users where age >= 22 and age <= 25; select * from users where age between 22 and 25;
 
//查询 users 表中 年龄不在22到25之间的数据 
select * from users where age < 22 or age > 25; select * from users where age not between 22 and 25;
 
//查询 users 表中 年龄在22到25之间的女生信息 
select * from users where age >= 22 and age <= 25 and sex = '女';
 

2)like句子

 //查询name字段中包含五的  
 select * from users where name like '%五%';
 //查询name字段中最后一个字符 为 五的  
  select * from users where name like '%五';
//查询name字段中第一个字符 为 王 的  
  select * from users where name like '王%';  
  
//使用 _ 单个的下划线。表示一个任意字符,使用和%类似
//查询表中 name 字段为两个字符的数据  
  select * from users where name like '__'; 
//查询 name 字段最后为五,的两个字符的数据  
  select * from users where name like '_五';

3)MySQL的聚合函数

max(),min(),count(),sum(),avg()
注意:在使用聚合函数时要记得分组,要不然会报错

 //计算 users 表中 最大年龄,最小年龄,年龄和及平均年龄 select 
 max(age),min(age),sum(age),avg(age) from users; 
 //上面数据中的列都是在查询时使用的函数名,不方便阅读和后期的调用,可以通过别名方式 美化 
 select max(age) as max_age, 
 min(age) min_age,
 sum(age) as sum_age, 
 avg(age) as avg_age ,
 count(id) as num
 from users
 group by id;
 

4)Group BY 分组

group by 语句根据一个或多个列对结果集进行分组
一般情况下,是用与数据的统计或计算,配合聚合函数使用

//可以使用分组进行统计,更方便 
select sex,count(*) from users group by sex;
//统计1班和2班的人数 
select classid,count(*) from users group by classid; 
//分别统计每个班级的男女生人数 
select classid,sex,count(*) as num from users group by classid,sex; 
// 注意:在使用group by分组时,一般除了聚合函数,其它在select后面出现的字段列都需要出现在grouop by后面
//having时在分组聚合计算后,对结果再一次进行过滤,类似于where
//where过滤的是行数据,having过滤的是分组数据

5) Order by 排序

Asc 升序,默认
desc降序

//按照年龄对结果进行排序,从大到小
select * from users order by age desc;
 //从小到大排序 asc 默认就是。可以不写 
 select * from users order by age;
//也可以按照多个字段进行排序 
  select * from users order by age,id; 
//先按照age进行排序,age相同情况下,按照id进行排序 
select * from users order by age,id desc;

6) Limit 数据分页

limit n 提取n条数据,
limit m,n 跳过m跳数据,提取n条数据

 //查询users表中的数据,只要3条 
 select * from users limit 3;
//跳过前4条数据,再取3条数据 
select * from users limit 4,3;
// 提取 user表中 年龄最大的三个用户数据 怎么查询? 
select * from users order by age desc limit 3;

在这里插入图片描述

2、联结关系

那什么是外部联结呢?
left join : 是以 left join 左侧表为基准,去关联右侧的表进行联结,如果有未关联的数据,那么结果为null
right join :是以 right join 右侧表为基准,去关联左侧的表进行联结,如果有未关联的数据,那么结果为null

内部联结: where, inner join(join)
自联结 : 是在一个sql中,用当前这个表,连接自己这个表进行关联查询
外部联结: left join,right join
以用户表为基准,去关联查询 订单表数据

//外部联结
select customers.cust_id,
orders.order_num
from customers 
left join orders
on customers.cust_id = orders.cust_id;

select customers.cust_id,orders.order_num
from orders 
right join customers
on customers.cust_id = orders.cust_id;
//where的写法
select prod_name,vend_name,prod_price,quantity
from orderitems,products,vendors
    where products.vend_id = vendors.vend_id
    and orderitems.prod_id = products.prod_id
    and order_num = 20005;
//改写为 join 的语法
select prod_name,vend_name,prod_price,quantity
from orderitems
inner join products 
on orderitems.prod_id = products.prod_id
inner join vendors 
on products.vend_id = vendors.vend_id
where order_num = 20005;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值