美文网首页SQL语言基础
SQL基础入门(理论篇)

SQL基础入门(理论篇)

作者: LSim | 来源:发表于2020-03-22 13:39 被阅读0次

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

    inner join

    2、左连接(left join)

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

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

    left join

    3、右连接(right join)

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

    select <select_list> 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基础入门(理论篇)

        本文链接:https://www.haomeiwen.com/subject/txfpyhtx.html