小白学习数据库并编写博客想更加系统了解数据库。
首先是基本命令的关系图
一、建立
基本表、索引、视图的建立都是create
create table Persons(
Id_P int,
LastName varchar(255),
City varchar(255),
);
这里简单说明一下索引和视图,索引是作用于某一字段的,他以二叉树的形式将该字段的数据存储起来提高查询速度,视图则是用来存储某一种查询情况更方便查看。
二、增删查改
这里只说表中数据的增删查改.
insert into Persons values(123,'zdn','广州');
insert into Persons(Id_P) values (234); --仅增加Id_P的内容
delete from Persons; --清空,不释放空间
delete from Persons where City='广州';
truncate table Persons; --清空,释放空间
drop table Persons; --整表删除
select * from Persons;
select Id_P from Persons;
select distinct Id_P from Persons; -- 删去重复
select Id_P from Persons where Id_P <> 123; -- != 还有between like
update person set City='长沙' where LastName='z';
truncate就是用于清空表,drop不应该出现在这,因为他把整个表给删除了,但是常见就写上了,select是个重点,数据库的意义就是用来根据条件查询数据的,update用于修改,有一点不太好的地方是,只能根据条件固定改成一个值
三、表的增删改
区别上面,对字段操作都是alter
alter table Persons ADD( --增加字段
sex char(30));
alter table Persons drop column sex; --删除某字段
drop table Persons;
alter table Persons modify( --修改字段属性
Id_P int(10));
alter table Persons rename column Id_P to ID; --重命名某字段
alter table Persons rename to Person; --重命名表
这里主要是通过add,drop,modify,rename来区别操作。
四、where、having
都是用于用于获取表的时候过滤条件,having能对聚合函数操作
select count(distinct City)from(
select City from Persons
group by City
having count(Id_P) > 5);
--having对于聚合函数的操作:count() sum() avg()
select count(City) from Persons
where LastName = 'Wang';
这里第一段语句的意思是,对于select city from Persons……这个表里,获取对每一个城市计数的表,而()里面是获取人数个数大于5的城市列表。
五、in、exists
in对于某字段多值查询,exists对于获取的内表进行查询
select * from Persons
where City in ('广州','北京');
select * from Persons --对于外查询表的每一行,当exists条件成立的时候执行
where exists(
select * from Persons
where City = '广州'
or City = '北京') temp; --and or,与或关系
六、case when
这里想要详细谈谈这个强大语句
1、基本句式
case sex --规定某一字段
when '1' then '男'
when '2' then '女'
else '其他'
end
case --更灵活
when sex='1' then '男'
when sex='2' then '女'
else '其他'
end
2、顺序
就是if-elif-else或if-else if-else的顺序
3、不同用法
主要说select时的case when
(1)跟在select之后
--用于聚合函数的条件判断
select count(
case when City='广州' then '广州人口' end) 广州人口,count(
case when City='北京' then '北京人口' end) 北京人口
from Persons;
--用于条件分类
select Id_P,(
case
when score >= 90 then 'A'
when score >= 80 then 'B'
when score >= 70 then 'C'
when score >= 60 then 'D'
else 'E'
end) rank
from Persons;
--用于判断两表是否匹配
select Id_P,(
case
when Id_P in (
select Id from SC
)then 'match'
else 'not match'
end)
from Persons;
--case嵌套,嵌套条件获取
select Id_P,(
case
when count(*)=1 then class_id
else (
case when class_type = 'major'
then class_id
end)
end)
from Persons,SC
group by Id_P;
(2)跟在where之后
select * from Persons
where (
case
when sex='女' and City='广州' then 1
else 2
end) = 1;
看上去好像多此一举,但遇到更复杂的情况会很有用
(3)跟在group by之后
select (
case
when sex = '男' then 1
when sex = '女' then 2
else 3
end) as c_sex,count(*)
from Persons
group by c_sex;
这里group by后面没有直接跟case when,因为我懒,所以在select后面的case那直接用了代称
01 结