1.什么是数据库
数据库就是一个文件系统,需要通过标准SQL语句才能访问.
2.什么是SQL
SQL,结构化查询语言
3.SQL的分类
DDL(Data Definition Language)
数据定义语言,用来定义数据库对象:库、表、列等
create,alter,drop
DML(Data ManipulationLanguage)
数据操纵语言,用来定义数据库记录(数据)
insert,delete,update
DCL(Data Control Language)
数据控制语言,用来定义访问权限和安全级别
if,grant
DQL(Data Query Language)
数据查询语言,用来查询记录(数据)
select
4.操作数据库:
创建
格式:
createdatabase 数据库名称;
删除
格式:
dropdatabase 数据库名称;
常用的命令:
查看所有的数据库: show databases;
5.操作表:
创建表
格式:
createtable 表名(字段描述,字段描述);
字段描述:
字段名称字段类型 [约束]
例如:
createtable user(
idint primary key auto_increment,
usernamevarchar(20)
);
createtable user1(
idint primary key auto_increment,
usernamevarchar(20)
);
修改表
格式:
altertable 表名 ....
修改表名:
altertable 旧表名 rename to 新表名;
例如:
altertable user1 rename to user10;
添加字段:
altertable 表名 add [column] 字段描述;
例如:
altertable user add password varchar(20);
修改字段名:
altertable 表名 change 字段名称新字段描述;
例如:
altertable user change password pwd varchar(20);
修改字段描述:
altertable 表名 modify 字段名称字段类型 [约束];
例如:
altertable user modify pwd int;
删除字段:
altertable 表名 drop 字段名;
例如:
altertable user drop pwd;
删除表
格式:
droptable 表名
6.插入:
格式1:
insertinto 表名 values(字段值1,字段值2...,字段值n);
注意:
默认插入全部字段,
必须保证values后面的内容的类型和顺序和表结构中的一致
若字段类型为数字,可以省略引号
例如:
insertinto user values(1,'tom');
insertinto user values('2','tom');
insertinto user values('3');-- 错误的
格式2:
insertinto 表名(字段名,字段名1...) values(字段值,字段值1...);
注意:
插入指定的字段
必须保证values后面的内容的类型和顺序和表名后面的字段的类型和顺序保持一致.
例如:
insertinto user (username,id) values('jack',4);
insertinto user (username) values('jack',5);-- 错误的
7.修改:
格式:
update表名 set 字段名=字段值,字段名1=字段值1... [where 条件];
例如:
updateuser set username='jerry' where username='jack';
8.删除:
格式:
deletefrom 表名 [where 条件];
例如:
deletefrom user where id = '2';
turncat、drop、delete的区别
1.TRUNCATE(DDL语句)
删除表的数据,表结构还在,如果有自增种子重置为1,数据无法恢复,执行速度中等
2.DELETE(DML语句)
每次从表中删除一行(没有where条件则删除所有的数据),并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,执行速度最慢,但是安全性最高
3.DROP
直接删除表结构的文件和数据文件,执行速度最快
9.查询:
格式:
select... from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段 ase|desc
注意:
where和having区别:
1.where是对分组前的数据进行过滤 ;having 是对分组后的数据进行过滤
2.where后面不能使用聚合函数,having可以
内连接:
格式1:显式的内连接
select a.*,b.* from a [inner] join b onab的连接条件
格式2:隐式的内连接
select a.*,b.* from a,b where ab的连接条件
外连接:
左外连接:
select a.*,b.* from a left [outer] joinb on 连接条件;
先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展示出来,不符合以null值展示.
右外连接:
select a.*,b.* from b right [outer]join a on 连接条件;
先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示.
子查询:
一个查询依赖另一个查询.
10.约束:
主键约束(primary key)
被修饰过的字段唯一非空(一张表只能有一个主键,这个主键可以包含多个字段)
方式1:建表的同时添加约束格式: 字段名称字段类型 primary key
create table pk01(
id int primarykey,
usernamevarchar(20)
);
方式2:建表的同时在约束区域添加约束格式: primary key(字段1,字段2)
create table pk01(
id int,
usernamevarchar(20),
primary key(id)
);
方式3:建表之后,通过修改表结构添加约束格式: alter table 表名add primary key(字段名1,字段名2..)
create table pk02(
id int,
usernamevarchar(20)
);
alter table pk02 addprimary key(id,username);
唯一约束(unique)
被修饰过的字段唯一(一张表能有几个唯一字段允许为空,和主键作用类似)
非空约束(not null)
被修饰过的字段不能为空
外键约束(foreign key)
为了保证数据的有效性和完整性
格式:
altertable 表名称 add foreign key(外键名称) references 表名称(主键);
添加了外键约束之后有如下特点:
1.主表中不能删除从表中已引用的数据
2.从表中不能添加主表中不存在的数据
11.自增
auto_increment
要求:
1.被修饰的字段类型支持自增. 一般int
2.被修饰的字段必须是一个key 一般是primary key
12.给表起别名:
as 别名
13.排序查询:
1.查询所有的商品,按价格进行升序排序.
select * from productsorder by price (asc);
2.查询名称有新的商品的信息并且按价格降序排序.
select * from productswhere pname like '%新%' order byprice desc;
14.聚合函数:
对一列进行计算
sum(),avg(),max(),min(),count();
1.获得所有商品的价格的总和:
select sum(price) fromproducts;
2.获得商品表中价格的平均数:
select avg(price) fromproducts;
-- round(值,保留小数位)
selectround(avg(price),2) from products;
3.获得商品表中有多少条记录:
select count(*) fromproducts;
15.分组:
使用group by
1.根据cno字段分组,分组后统计商品的个数.
select cno,count(*)from products group by cno;
2.根据cno分组,分组统计每组商品的总数量,并且总数量>200;
select cno,sum(pnum)from products group by cno;
select cno,sum(pnum)from products group by cno havingsum(pnum)>200;