一、概念解析
1.什么是数据库?
答:存储数据的仓库,数据是有组织的进行存储(DataBase,简称DB)
2.什么是数据库管理系统?
答:管理数据库的大型软件(DataBase Management System,简称DBMS)
例子:MySQL
3.什么是SQL?
答:操作关系型数据库的编程语言,是一种结构化查询语言(Structured Query Language,简称SQL)
4.什么是关系型数据库?
答:由多张能互相连接的二维表组成的数据库
优点:
(1)都是使用表结构,格式一致,易于维护
(2)使用通用的SQL语言操作,使用方便,可用于复杂查询
(3)数据存储在磁盘中,安全
5.SQL通用语句?
答:SQL可以单行或者多行书写,以分号结尾,不分大小写,关键字建议大写
单行注释:--注释内容或者#注释内容
多行注释:/*注释*/
6.名词解释
DDL:操作数据库等
DML:对表中的数据进行增删改
DQL:对表中的数据进行查询
DCL:对数据库进行权限控制
7.约束(列中的规则制定者)
(1)作用于表中列上的规则,用于限制加入的数据
(2)约束的存在保证了数据库中数据的正确性、有效性和完整性
分类:
非空约束:保证列中所有的数据不能有null值。
唯一约束:保证列中所有的数据各不相同
主键约束:主键是一列数据的唯一标识,一张表里面只能有一个。要求非空且唯一
检查约束:保证列中的值满足某一条件
默认约束:保存数据时,未指定值则采用默认值
外键约束:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
二、查
1.查询全部数据库
show databases;
2.查询正在使用的数据库。
select database();
3.查询所有表(当前使用的库中)
show tables;
4.查询单个表结构
格式为:desc 表名;
desc func;
5.查询全部列中的详细数据
格式为:select * from 表名;
select * from mm;
6.查询列中的数据
格式为:select 列名,列名 from 表名;
select id,username from mm;
7.查出列中的数据并且起别名
格式为:select 原列名 as 改后列名,原列名 as 改后列名 from 表名;
select id as 情侣,username as 名字 from mm;
8.查询列中的数据并且去除重复的
格式为: select distinct 列名 from 表名;
select distinct hobby from mm;
条件查询
9.根据条件查询表中的数据
格式为:select * from 表名 where 列名 条件
select * from mm where hobby = '步兵';
10.根据条件查询表中的数据之区间
格式为:select * from 表名 where 列名 between 条件区间 and 条件区间;
select * from mm where id between 3 and 5;
条件查询之模糊查询
11.查询列中指定数据开头的
格式为:select * from 表名 where 列名 like '指定数据%';
select * from mm where hobby like '步%';
12.查询列中指定位置匹配的数据(比如那列中第2个是3的全要了,几个下划线就代表几个空格)
格式为:select * from 表名 where 列名 like '截取的下划线 需要的数据%';
select * from mm where password like '__3%';
13.查询列中的关键字
格式为:select * from 表名 where 列名 like '%关键字%';
select * from mm where hobby like '%兵%';
运行结果:
原表:
查询后:
排序查询
14.查询列中从小到大排序(默认)--升序
格式为:select * from 表名 order by 列名 asc;
select * from mm order by id asc;
15.查询列中从大到小排序 --降序
格式为:select * from 表名 order by 列名 desc;
select * from mm order by id desc;
16.多种要求排序
格式为:select * from 表名 order by 列名1 升或者降 ,列名2 升或者降;
select * from mm order by id asc,password desc; --就是当第一个列条件相同时,才会排序第二个列条件
聚合函数 (数学运算)
17.统计表中有多少列数据
格式为:select count(*) from 表名;
select count(*) from mm;
18.对该列的数据进行各种计算
格式为:select 聚合函数名(列名) from 表名;
select avg(id) from mm;--例子 --count 统计数量 --max 最大值 --min 最小值 --sum 求和 --avg 平均值
分组查询
19.对表中的列进行聚合函数计算分组
格式为:select 分组的列,聚合函数(计算的列) from 表名 group by 分组的列;
select hobby,avg(id) from mm group by hobby;
20.对表中的列进行灵活分组查询
格式为:select 分组的列, 聚合函数(计算的列),count(*) from 表名 判断条件 group by 分组的列;
select sex, avg(math),count(*) from home where math >50 group by sex;
21.对表中的列进行灵活查询基础上,再进行分组筛选
格式为: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
分页查询
22.从索引值开始查多少条数据
格式为:select * from 表名 limit 起始值,查询条目数;
select * from home limit 0,3; --注意数据库的第一条是从索引值0开始的 --当上万条数据时需要按页面展示,只需要改变索引值就好了,索引值可以设置成一个动态的公式 --起始索引值 = (当前页码-1) * 每页显示的条数
23.查看外键名称
格式为: show create table 从表的表名;
show create table BM;--BM:从表的表名
运行结果:
多表查询
简介:多表查询有连接查询和子查询两种方式
(1)连接查询:内连接(即A和B的交集)、外连接
(2)子查询
24.隐式内连接查询 (即A和B两张表的交集)
格式为 :select * from 表1的表名,表2的表名 where 表1的表名.id = 表2的表名.id;
注意点:这个*号是表示交集里面全部查询出来,如果有需要查特定的,就把*号换成需要的表名.列名
select * from mm,home where mm.id =home.id;
25.显式内连接查询 (即A和B两张表的交集)
格式为:select * from 表1的表名 inner join 表2的表名 on 表1的表名.id = 表2的表名.id;
select * from mm inner join home on mm.id = home.id;
26.左外连接查询(即取A表所有部分和AB的交集)
格式为:select * from 表1的表名 left join 表2的表名 on 表1的表名.列名 = 表2的表名.列名;
select * from mm left join home on mm.id = home.id;
27.右外连接查询(即取B表所有部分和AB的交集)
格式为:select * from 表2的表名 right join 表1的表名 on 表2的表名.列名 = 表1的表名.列名;
select * from home right join mm on mm.id = home.id;