读者手册(必读)_云边的快乐猫的博客-CSDN博客
一概念解析
1.什么是数据库?
2.什么是数据库管理系统?
3.什么是SQL?
4.什么是关系型数据库?
5.SQL通用语句?
6.名词解释
7.约束(列中的规则制定者)
二、查
1.查询全部数据库
2.查询正在使用的数据库。
3.查询所有表(当前使用的库中)
4.查询单个表结构
5.查询全部列中的详细数据
6.查询列中的数据
7.查出列中的数据并且起别名
8.查询列中的数据并且去除重复的
条件查询
9.根据条件查询表中的数据
10.根据条件查询表中的数据之区间
条件查询之模糊查询
11.查询列中指定数据开头的
12.查询列中指定位置匹配的数据
13.查询列中的关键字
排序查询
14.查询列中从小到大排序(默认)--升序
15.查询列中从大到小排序 --降序
16.多种要求排序
聚合函数 (数学运算)
17.统计表中有多少列数据
18.对该列的数据进行各种计算
分组查询
19.对表中的列进行聚合函数计算分组
20.对表中的列进行灵活分组查询
21.对表中的列进行灵活查询基础上,再进行分组筛选
分页查询
22.从索引值开始查多少条数据
23.查看外键名称
多表查询
24.隐式内连接查询
25.显式内连接查询
26.左外连接查询
27.右外连接查询
子查询
29.子查询之多行单列查询
30.子查询之多行多列查询
三、增
1.直接创建一个数据库
2.先判断该数据库是否存在再创建
3.创建一个表
4.表中加添一列
5.给表中添加数据
6.给表中大批量添加数据
四、删
1.直接删除某个数据库
2.先判断该数据库是否存在,再执行删除
3.删除表
4. 先判断表是否存在再删除
5.删除列
6.删除表中的数据
五、改
1.修改表名
2.修改表中列的数据类型
3.修改列名和数据类型
4.修改数据内容
六、其他操作
1.使用指定的数据库。
七、约束
1.约束格式
2.外键约束
============================================================================================================
答:存储数据的仓库,数据是有组织的进行存储(DataBase,简称DB)
答:管理数据库的大型软件(DataBase Management System,简称DBMS)
例子:MySQL
答:操作关系型数据库的编程语言,是一种结构化查询语言(Structured Query Language,简称SQL)
答:由多张能互相连接的二维表组成的数据库
优点:
(1)都是使用表结构,格式一致,易于维护
(2)使用通用的SQL语言操作,使用方便,可用于复杂查询
(3)数据存储在磁盘中,安全
答:SQL可以单行或者多行书写,以分号结尾,不分大小写,关键字建议大写
单行注释:--注释内容或者#注释内容
多行注释:/*注释*/
DDL:操作数据库等
DML:对表中的数据进行增删改
DQL:对表中的数据进行查询
DCL:对数据库进行权限控制
(1)作用于表中列上的规则,用于限制加入的数据
(2)约束的存在保证了数据库中数据的正确性、有效性和完整性
分类:
非空约束:保证列中所有的数据不能有null值。
唯一约束:保证列中所有的数据各不相同
主键约束:主键是一列数据的唯一标识,一张表里面只能有一个。要求非空且唯一
检查约束:保证列中的值满足某一条件
默认约束:保存数据时,未指定值则采用默认值
外键约束:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
show databases;
select database();
show tables;
格式为:desc 表名;
desc func;
格式为:select * from 表名;
select * from mm;
格式为:select 列名,列名 from 表名;
select id,username from mm;
格式为:select 原列名 as 改后列名,原列名 as 改后列名 from 表名;
select id as 情侣,username as 名字 from mm;
格式为: select distinct 列名 from 表名;
select distinct hobby from mm;
格式为:select * from 表名 where 列名 条件
select * from mm where hobby = '步兵';
格式为:select * from 表名 where 列名 between 条件区间 and 条件区间;
select * from mm where id between 3 and 5;
格式为:select * from 表名 where 列名 like '指定数据%';
select * from mm where hobby like '步%';
格式为:select * from 表名 where 列名 like '截取的下划线 需要的数据%';
select * from mm where password like '__3%';
格式为:select * from 表名 where 列名 like '%关键字%';
select * from mm where hobby like '%兵%';
运行结果:
原表:
查询后:
格式为:select * from 表名 order by 列名 asc;
select * from mm order by id asc;
格式为:select * from 表名 order by 列名 desc;
select * from mm order by id desc;
格式为:select * from 表名 order by 列名1 升或者降 ,列名2 升或者降;
select * from mm order by id asc,password desc;
--就是当第一个列条件相同时,才会排序第二个列条件
格式为:select count(*) from 表名;
select count(*) from mm;
格式为:select 聚合函数名(列名) from 表名;
select avg(id) from mm;--例子
--count 统计数量
--max 最大值
--min 最小值
--sum 求和
--avg 平均值
格式为:select 分组的列,聚合函数(计算的列) from 表名 group by 分组的列;
select hobby,avg(id) from mm group by hobby;
格式为:select 分组的列, 聚合函数(计算的列),count(*) from 表名 判断条件 group by 分组的列;
select sex, avg(math),count(*) from home where math >50 group by sex;
格式为:select 分组的列, 聚合函数(计算的列),count(*) from 表名 判断条件 group by 分组的列
分组条件;
select sex, avg(math),count(*) from home where math >50 group by sex having count(*)>2;
20和21的总语法结构
格式为: select 分组的列,from 表名 where 分组前条件限定 group by 分组的列 having 分组后条件筛选
注意:执行顺序:where>聚合函数>having
格式为:select * from 表名 limit 起始值,查询条目数;
select * from home limit 0,3;
--注意数据库的第一条是从索引值0开始的
--当上万条数据时需要按页面展示,只需要改变索引值就好了,索引值可以设置成一个动态的公式
--起始索引值 = (当前页码-1) * 每页显示的条数
格式为: show create table 从表的表名;
show create table BM;--BM:从表的表名
运行结果:
简介:多表查询有连接查询和子查询两种方式
(1)连接查询:内连接(即A和B的交集)、外连接
(2)子查询
格式为 :select * from 表1的表名,表2的表名 where 表1的表名.id = 表2的表名.id;
注意点:这个*号是表示交集里面全部查询出来,如果有需要查特定的,就把*号换成需要的表名.列名
select * from mm,home where mm.id =home.id;
格式为:select * from 表1的表名 inner join 表2的表名 on 表1的表名.id = 表2的表名.id;
select * from mm inner join home on mm.id = home.id;
格式为:select * from 表1的表名 left join 表2的表名 on 表1的表名.列名 = 表2的表名.列名;
select * from mm left join home on mm.id = home.id;
格式为:select * from 表2的表名 right join 表1的表名 on 表2的表名.列名 = 表1的表名.列名;
select * from home right join mm on mm.id = home.id;
注意点:左右外连接可以互换,A表也可以是B表,灵活变换,想让哪个是A表哪个就是A表呗。
子查询就是从表中查出初步的条件后,再用这个作为条件再进行查询
1.先写出子查询的语句,2.再嵌套到大的查询语句里面,例子:查询比虞姬大的年龄都有哪些 ?
那就先查询出虞姬的年龄,再嵌套到查询全部人的年龄里面比较
格式为:
第一步select 对比的列名 from 表名 where 对比条件;
第二步select * from 表名 where 对比的列名 >(第一步的子查询);
select age from home where name = '虞姬';--为第二步做准备的
select * from home where age >(select age from home where name = '虞姬');--把第一步嵌套到括号里面
运行结果:
原表:
第一步:
最终步骤
可以用来提取两个表中的两种列的信息,例子:查询表1中会舞剑的,在表2里面有几个
格式为:
select * from 表名2 where 表名2 in(select 根据什么提取的列名 from 表名1 where 要提取的列名 ='列中具体信息' or 要提取的列名 ='列中具体信息');
select * from home where name in (select username from mm where hobby='舞剑');
运行结果(原图参考上一题):
可以用来提取两个表中都符合条件的两个列信息,例子:根据id,提取出表中在1955-3-7后出生的人
格式为:
select * from (select * from 表1的表名 where 表1的列名>'列名具体条件')表1的表名 ,表2的表名 where 表1的表名.列名=表2的表名.列名;
select * from (select * from home where hire_date>'1995-3-7')home ,mm where home.id=mm.id;
运行结果 :
格式为:create database 数据库名;
create database love;
格式为: create database if not exists 数据库名;
create database if not exists dog;
解析,20代表username的这个字符数不能超过20,起到限制作用,其他的同理
mysql> create table people(
-> id int,
-> username varchar(20),
-> password varchar(24)
-> );
格式为:alter table 表名 add 列名 数据类型;
alter table bb add pig int;
格式为:insert into 表名(列名1,列名2,.....)values(数据值1,数据值2,.....);
insert into mm(id,username,password,hobby)
values(1,'张三','123456','踢足球');
格式为:insert into 表名(列名1,列名2,.....)values(数据值1,数据值2,.....),(数据值1,数据值2,.....);
insert into mm(id,username,password,hobby)
values(1,'张三','123456','打篮球'),
(2,'李四','6668888','踢足球');
格式为:drop database 要删除的数据库名;
drop database dog;
格式为:drop database if exists 要删除的数据库名;
drop database if exists love;
格式为:drop table 表名;
drop table people;
格式为:drop table if exists 表名;
drop table if exists cc;
格式为:alter table 表名 drop 要删除的列名;
alter table bb drop dog;
格式为:delete from 表名 where 列名 = '列名对应条件';
delete from mm where password = '123456';
格式为:alter table aa rename to 表名;
alter table aa rename to zz;
格式为:alter table 表名 modify 列名 char(50);
alter table bb modify pig char(50);
格式为:alter table 表名 change 列名 新列名 新数据类型;
alter table bb change pig dog int;
格式为: update 表名 set 列名 = '改后值' where 列名 = '列名对应数据';
update mm set username = '坏人' where id = '1';--判断条件设置不一样而已
update mm set username = '笨蛋' where hobby = '踢足球';---判断条件设置不一样而已
运行结果:
原:
第一次修改后:
第二次修改后:
格式为:use 要使用的数据库;
use love;
需要什么约束就在什么列里面加上约束就好了
非空约束:not null
唯一约束:unique
主键约束:primary key
检查约束:check
默认约束:default
foreign key--这个是表和表之间连接使用的
格式为:创建列值 约束,
create table wz(
id int primary key auto_increment,--非空且自增,非空是primary key 自增是auto_increment
name varchar(20) not null,--非空
girlfriend varchar(30) not null unique,--非空且唯一
parent varchar(20) unique,--唯一约束
money int default 0);--默认约束
建完表后添加非空约束
alter table 表名 modify 字段名 数据类型 not null;
删除约束
alter table 表名 modify 字段名 数据类型;
(1)外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
(2)外键就是让两个表之间的两个列建立绑定连接
(3)两张表之间可以有多个外键
(4)主表(别称为父表),从表(别称为子表)
注意点:
(1)主表必须有主键,从表有没有主键都可以,这样才可以创建外键连接。
(2)建表和添加数据时候都要先添加主表的,再添加从表的
建表时添加外键:
格式为:
1.先建立主表
2.在从表建表时最下面添加这个连接语句
constraint 自定义的外键名 foreign key(本表要绑定的列名) references 主表(主表要绑定的主键列名)
--主表(老大)
create table car(
id int primary key,
name varchar(20)
);
--从表(小弟)
create table BM(
my_id int ,
name varchar(30),
money int,
constraint zzzz foreign key(my_id) references car(id)
);
---zzzz是自己定义的外键名,要删除的时候用得着
建表后添加外键:
格式为:
alter table 从表表名 add constraint 自定义的外键名称 foreign key(从表列名) references 主表表名(主表的主键列名);
alter table BM add constraint hhhh foreign key(money) references car(id);
---hhhh:自己定义的外键名称,删除时候用得着
删除外键:
格式为:
alter table 从表的表名 drop foreign key 外键名;
alter table BM drop foreign key zzzz;
--zzzz:外键名,在创建时候就定义好了,如果不知道外键名可以在本文章中的查里面找找相关的查询语句