SQL基础入门(理论篇)

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 from A_table inner join B_table on A.key=B.key

inner join

2、左连接(left join)

结果中除了包括满足连续条件的行外,还包括坐表中的所有行。

select from A_table left join B_table on A.key=B.key

left join

3、右连接(right join)

结果中除了包括满足连接的行外,还包括右表的所有行

select from A_table right join B_table on A.key=B.key

right join

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);

理论篇到此结束,与之匹配的代码篇会相继发出,有兴趣的可以对应着学习,效果更佳。欢迎关注哦!!!

呵呵

你可能感兴趣的:(SQL基础入门(理论篇))