1、什么是数据库
企业数据存储面临的问题:
--存储大量数据
--大量数据的检索和访问
--保证数据信息的一致和完整
--数据的共享和安全
--通过分析整合,产生新的有用的信息(如提供决策支持)
2、ROBMS
--关系数据库系统
--关系数据库:所有的数据存储在不同的表中,使用主键或者外键建立表之间的关系。
--ROBMS是这样一个软件:
----能让我们使用表、列和索引实现一个数据库
----保证各种表的行间的引用的完整性
----自动更新索引
----解释一个SQL查询和组合来自不同的表信息
-----SQL:结构化查询语言(Structured Query Language),在关系型数据库上执行数据库操作、数据检索以及数据维护的标准语言。
3、数据库基本结构
--数据库:数据库是表的结合,带有相关数据。
--表:一个表是多个字段的集合。
--字段:一个字段是一列数据,由字段名和记录组成。
3.1 数据库
创建数据库:create database 数据库名称;
--例:创建名为test的测试数据库 (create database test;)
查看创建好的数据库:show create database 数据库名称;
--例:查看创建好的test数据库 (show create database test;)
查看所有数据库列表:show databases;
使用数据库:use 数据库名称;
--例:使用创建好的test数据库 (use test;)
删除数据库:drop database 数据库名称;
--例:删除创建好的test数据库 (drop database test;)
3.2 数据表
--数据库是由多个数据表组成。
--每张数据表存储多个字段。
--每个字段由不同的字段名和记录组成,每个字段都有自己的数据结构以及约束条件。
创建数据表:crate table 表名;
--例:用SQL语句创建以下员工的信息表
部门ID 部门名称 员工数
P0001 财务部门 2000
P0002 销售部门 3000
P0003 内审部门 4000
1、使用test数据库:(use test;)
2、创建员工信息表:
create table emp(
depID varchar(10),
depname varchar(20),
peoplecount int);
3、查看表是否创建成功:(show tables;)
4、删除数据表:(drop table emp;)
3.2.1 数据类型(1)
数值类型:(整数和小数)
----INT:有符号的和无符号的。有符号的大小-2147483648~2147483647,无符号大小0~4294967259。宽度最多为11个数字-int(11)。整数(整数位数)
----TINTINT:有符号的和无符号的。有符号大小-128~127,无符号大小0~255.宽度最多为4个数字-tinyint(4)。
----SMAILLINT:有符号的和无符号的。有符号大小-32768~32767,无符号大小0~65535.宽度最多为6个数字-smallint(6)。
----MEDIUMINT:有符号的和无符号的。有符号大小-8388608~8388607,无符号大小位0~16777215.宽度最多为9个数字-mediumint(9)。
----BIGINT:有符号的和无符号的。宽度最多为20个数字-bigint(20)。
----FLOAT(M,D):只能为有符号的。默认为(10,2) 小数(整数位数,小数位数)
----DECIMAL(M,D):只能为有符号的。
----DOUBLE(E,D):只能为有符号的。默认为(16,4)
数据类型(2)
日期和时间类型:
----DATE:YYYY-MM-DD格式,位于1000-01-01~9999-12-31之间。例如:1937-10-01
----DATETIME:YYYY-MM-DD HH:MM:SS格式,位于1000-01-01 00:00:00 ~ 9999-12-31 23:59:59之间。例如:1937年10月1日下午3点10分。则在数据库中存储为:193710011510
----TIME:HH:MM:SS格式,
----YEAR(2|4):以2位或4位格式存储年份值。如果是2位,1970~2069;如果是4位,1901~2155。默认长度为4
数据类型(3)
字符串类型:
----CHAR(M):固定长度字符串,长度为1-255。如果内容小于指定长度,右边填充空格。如果不指定长度,默认为1。
----VARCHAR(M):可变长度字符串,长度为1-255,。定义该类型时必须指定长度。
其实在现实中,当数据类型为整数型一般使用int,当类型为小数型一般使用float,当类型为字符串时使用Varchar。之所以分那么细,是考虑计算机的内存问题,毕竟存储的数据和限制类型越匹配就会越节约内存,而现在的计算机内存都还是可以的,如果不是非常大的数据,其实倒不会考虑那么细。(仅代表个人建议)
3.2.2 约束条件
----约束是在表上强制执行的数据检验规则
----用来保证创建的表的数据完整和正确
----MYSQL数据库常用的约束条件
3.2.2.1 主键约束
主键约束:保证表中没行记录都不重复
主键,又称为“主码”,是数据表中一列或多列的组合。主键约束要求主键列的数据必须是惟一的,并且不允许为空。使用主键,能够唯一地标识表中的一条记录,并且可以结合外键来定义不同数据表之间的关系,还可以加快数据库的查询速度。
主键分为两种类型:
----单字段主键:
create table emp(
demp varchar(3) primary key,
depname varchar(20),
peoplecount int);
----多字段联合主键:
create table emp(
depid varchar(3) ,
depname varchar(20),
peoplecount int,
primary key(depname,depid));
3.2.2.2 非空约束
非空约束,指的是字段的值不能为空:
----语法:字段名 字段类型 not null
create table emp(
depid varchar(3) primary key,
depname varchar(20) not null,
peoplecount int);
3.2.2.3 唯一性约束
唯一性约束,要求该列的值必须是惟一的:
----允许为空,但是只能出现一个空值;
----一个表中可以有多个字段声明为唯一的;
----唯一约束确保数据表的一列或者几列不出现重复值;
----语法:字段名 数据类型 unique
create table emp(
depid varchar(3) primary key,
depname varchar(20) not null,
peoplecount int unique);
3.2.2.4 默认约束
默认约束,指定某个字段的默认值:
----如果新插入一条记录时没有为默认约束字段赋值,那么系统就会自动为这个字段赋值为默认约束设定值。
----语法:字段名 数据类型 defult 默认值
create table emp(
depid varchar(3) primary key,
depname varchar(20) not null defult '_',
peoplecount int unique);
3.2.2.5 自增字段
自增字段:一个表中只能有一个自增字段,自增字段必须是主键的一部分。默认情况下是从1开始自增。
例:创建包含各种约束条件的数据表
create table example(id int primary key auto_increnment,-创建整数型自增字段
name varchar(4) not null,-创建非空字符串字段
math int default 0,-创建默认值为0的整数型字段
minmax float unique);-创建唯一约束小数型字段
4、用insert into 语句为表插入数据
语法:insert into 表名(字段1,字段2,.....) values ......
----插入数据
insert into fruite(f_id,s_id,f_name,f_price) values ('a1', 101,'apple', 5.2);
insert into fruite(f_id,s_id,f_name,f_price) values ('a2', 102,'orrange', 5.1);
insert into fruite(f_id,s_id,f_name,f_price) values ('a3', 103,'banana', 5.0);
insert into fruite(f_id,s_id,f_name,f_price) values ('a4', 104,'grape', 5.5);
insert into fruite(f_id,s_id,f_name,f_price) values ('a5', 105,'lemon', 5.6);
insert into fruite(f_id,s_id,f_name,f_price) values ('a6', 106,'mango', 5.7);
5、导入外部数据
导入外部offline文本文件:
语法:load data infile '文本路径.txt'
into table 数据表名
fields terminated by '\t' ---分隔符
ignore 1 lines; ----忽略第一行(第一行为标题)
6、检查表数据
对导入表中的数据一般从导入内容,导入数据总行数以及表结构三方面进行检查
----检查导入内容 select * from 表名;
----检查导入数据的总行数 select count(*) from 表名;
----检查表结构 Desc 表名;
7、修改数据表
修改表指的是修改数据库中已经存在的数据表的结构:
----MySQL 使用alter table 语句修改数据表的结构,包括:修改表名,修改字段数据类型或字段名,增加和删除字段,修改字段的排列位置等
----1、例:将数据表emp改名为empdep
( alter table emp rename empdep; )
----2、例:将数据表empdep中depname字段的数据类型由varchar(20)修改成varchar(30)
( alter table empdep modify depname varchar(30); )
----3、例:将数据表empdep中depname 字段的字段名修改为dep
( alter table empdep change depname dep varchar(30) ; )
----4、例:将数据表empdep中dep字段的字段名改回depname,并将字段的数据类型改为varchar(20)
( alter table empdep change dep depname varchar(20); )
----5、例:将数据表empdep添加新字段maname,新字段数据类型为varchar(10),约束条件为非空
( alter table empdep add maname varchar(10) not null; )
----6、例:将数据表empdep中maname字段的排列顺序改为第一位
( alter table empdep modify maname varchar(10) first; )
----7、例:将数据表empdep中maname字段的排列顺序改到depid字段之后
( alter table empdep modify maname varchar(10) after depid; )
----8、例:删除maname字段
( alter table empdep drop maname; )
嘿嘿!在这里就不总结语法,相信小伙伴们从上面的语句中能总结出语法的!!!
8、SQL的数据查询功能
select 语句的语法:
select <目标列组>
from <数据源>
where <元祖选择条件>
group by <分列组> having <组选择条件>
order by <拍序列1>
----对大气质量表(Monthly_indicator)进行有选择的查询
select city_name,avg(pm25) as pm25_avg,avg(pm10) as pm10_avg
from Monthly_indicator
where pm25>50
group by city_name,month_key having city_name <>'北京'
order by avg(pm25) desc;
解读上面的语句:从大气质量表查询不同城市(除北京)、不同月份的pm25指标大于50的
Pm25与pm10的平均值,并以pm25降序排列。
9、Select语句的操作符
----算术操作符 : +(加号)、-(减号)、*(乘号)、/(除号)
----比较操作符: =(等于)、>(大于)、<(小于)、<=(小于等于)、>=(大于等于)、!=或<>(不等于)、!>(不大于)、!<(不下于),共9种操作符
----逻辑操作符: &(和)、|(或)
10、常用的聚合函数
更多的可以在网上搜索【SQL常用聚合函数】
11、表与表之间的连接方式
1、内连接(inner join)
按照连接条件合并两个表,返回满足条件的行。
select
2、左连接(left join)
结果中除了包括满足连续条件的行外,还包括坐表中的所有行。
select
3、右连接(right join)
结果中除了包括满足连接的行外,还包括右表的所有行
select
12、子查询
子查询,写在()中,把内层查询结果当做外层查询参照的数据表来用
例:用in操作符与子查询语句来查询f_id对应的f_price 在10元到20元之间的水果
select * from fruits where f_id in(select f_id from fruits where f_price between 10 and 20);
例:用any操作符与子查询语句来查询所有f_id对应的f_price在10元到20元之间的水果记录
select * from fruits where f_id = any(select f_id from fruits where f_price between 10 and 20);
例:用all操作符与子查询语句来查询所有f_price大于20元的所有水果记录
select * from fruits where f_price > all(select f_price from fruits where f_price <20);
例:用exists操作符与子查询语句来查询是否存在f_price大于30元的水果记录
select * from fruits where exists(select * from fruits where f_price >30);
理论篇到此结束,与之匹配的代码篇会相继发出,有兴趣的可以对应着学习,效果更佳。欢迎关注哦!!!