SQL
一、SQL基础
1.1 认识数据库
数据库按类型可分为关系型数据库和NoSQL数据库,关系型数据库由数据表组成,数据表之间可能存在关联关系,因此称之为关系型数据库,或者关系型数据管理系统(RDBMS)。关系型数据库的代表有MySQL、Oracle、SQLServer等,它们支持SQL语句。NoSQL数据库没有数据表,也不支持SQL语句,有着自己的查询和操作方式,典型的代表是Redis数据库。
1.2 常见的数据库操作命令
数据存储在数据表(table)中,数据表在数据库(database)中,我们想要存储数据,首先需要创建数据库,常用的与数据库相关的SQL命令如下图所示:
1.show databases; 查看当前用户下所有的数据库
2.create database test (set utf8); 创建一个叫test的数据库,字符集编码方式为utf-8
3.drop database test;删除一个叫test的数据库
4.use test;选中数据库 ,在建表之前必须要选择数据库
5.show databases like '%dbdx%';模糊查询数据库,列出所有含有dbdx的数据库
6.show create database test;查看数据库test创建详细信息
1.3 常见的数据库表的操作命令
我们经常需要创建数据表,下面是对数据库中表格的常用操作:
1.create table 表名 (字段 类型 约束,字段2 类型2 约束2, ...);创建数据表
2.drop table 表名;删除数据表
3.alter table 表名 add 字段 字段类型;添加新的字段
4.alter table 表名 modify 字段 字段类型;修改字段类型
5. alter table 表名 drop 字段名;删除表字段
6.show tables;查看当前数据库下的所有数据表
7.desc table 表名;查看数据表的结构
8.show create table 表名;查询创建表时的语句
1.4 常见的对数据的操作命令
在日常的工作中,对数据的操作命令的使用频率是最高的,除了能对数据进行增删改查操作,还能进行排序查询、分组查询、统计查询、分页操作、还能联表查询等,常用对数据的操作命令如下图所示:
1.增加数据(insert)3种方式
1.1 insert into 表名 values(值1,值2,...)(很少用)
1.2 insert into 表名(字段1,字段2...) values(值1,值2,....);(较常用)
1.3 insert into 表名(字段1,字段2...) values(值1,值2,....),
(值1,值2,....),(值1,值2,....);
2.删除数据(delete) delete from 表名 where 条件 注意:where 条件必须加,否则数据
会被全部删除。
3.更新数据(update) update 表名 set字段1 = 值1, 字段2 = 值2 where 条件
4.查询数据(select)
4.1 查询表中的所有数据 select * from 表名
4.2 指定数据查询 select 字段 from 表名
根据条件查询出来的数据 select 字段 from 表名 where 条件 (最常用的)
where 条件后面跟的条件
关系:>,<,>=,<=,!=
逻辑:or, and
区间:id between 4 and 6 ;闭区间,包含边界
5.排序
select 字段 from 表 order by 字段 排序关键词(desc | asc)
排序关键词 desc 降序 asc 升序(默认)
5.1 通过字段来排序
例如 :select * from star order by money desc, age asc;
5.2 多字段排序
select 字段 from 表 order by 字段1 desc |asc,...字段n desc| asc;
6.常用的统计函数 sum,avg,count,max,min
只分组:select * from 表 group by 字段
例子: select count(sex) as re,sex from star group by sex having re > 3;
分组统计: select count(sex) from star group by sex;
7.分组 select * from 表名 limit 偏移量,数量
说明:
7.1.不写偏移量的话就是默认的为0
7.2.实现分页的时候必须写偏移量
偏移量怎么计算?:
limit (n-1)*数量 ,数量
8.联表查询
8.1 内连接 INNER JOIN 就类似取两个表的交集部分
SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult` FROM student AS s INNER JOIN result AS r ON s.studentNo = r.studentNo;
8.2 右连接 显示从表数据,join后的表
SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult` FROM student AS s right join result AS r ON s.studentNO = r.studentNo;
8.3 左连接 显示主表数据,from后的表
SELECT s.studentNo,`StudentName`,`SubjectNo`,`StudentResult` FROM student AS s LEFT JOIN result AS r ON s.studentNo = r.studentNo;