文章目录
一、数据库的数据类型
最常用的还是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;