SQL 知识点学习汇总,SQL学习这一篇就足够了

SQL学习知识点汇总

1.SQL是什么?

  1. SQL其实是一种编程语言,用于访问和处理数据库的计算机语言
  2. 编程语言都有几个特性,有数据类型、可以做运算。
  3. 编程语言是为了编程而发明,而程序=数据+算法。所以编程语言是一定需要具备数据类型和运算能力的。
  4. 所以对比而言,html就不是编程语言,因为只有数据类型,而无法做运算。SQL是有数据类型,也可以做运算的。
  5. SQL,structural query language,结构化查询语言

2.SQL可以做什么?

  1. 可以访问数据库
  2. 可以对数据库做增删改查操作(数据创建、查询、删除、更新)等操作。
    数据库作用:
  • 存储数据的仓库,能够对数据进行条理化存储,方便后续查询、更新等操作
  • 能够更加快速便捷进行数据访问和处理

3.数据库类型

  1. 数据库可以从很多个维度进行划分。例如是关系型数据库还是非关系型数据库、是否是单机数据库还是分布式数据库等等
  2. 主要和常见的分类标准,划分是关系型数据库和非关系型数据库。
  3. 关系型数据库,可以简单类比Excel,为了客观地记录一类事物地信息,需要从很多个维度对这些事物进行数据描述,就需要建立多个表。一个数据库可以理解为一个excel文件,一个表就是一个excel地sheet。每个表中存储者从某个维度对这些事物地数据信息记录或者描述。例如一个人在电商公司数据库的信息,有基本的个人信息,有浏览网站和app的信息,有购买商品的信息,有收藏商品的信息。这么多维度的信息,一般都是放在不同的数据库表中进行存储。
  4. 非关系型数据库,这是由于数据本身各种各种,例如有些数据就是文件类型,就有文件型数据库。有些数据就是图片等数据,就会有对应类型的数据库来进行存储和管理。后续还会遇到各种各样的数据库,特别是一些小众或者应用相对狭窄的数据库类型。

4.SQL怎么使用?

4.1 使用前预备

  1. SQL是一种标准,ANSI(American National Standards Institute)制定的标准。顶级国家都是制定标准的国家,我们距离美国的国力差距还有很长的路要走,不骄傲,也不放弃,总会复兴的。
  2. 既然SQL是一种标准,那么就必然会发生遵守和不遵守这个标准和扩展这个标准的情况。所以SQL语句在很多数据库中并不是所有指令都能生效,但主要的指令会是一样的效果。如select、update、delete、insert、where
  3. 要使用SQL,首先需要安装一个数据库(相应的软件环境也需要安装好)。
  4. 数据库可以选择MySQL、microsoft access、sql server等等
  5. 这篇文章选择MySQL作为演示,
  6. MySQL在windows下安装,MySQL在windows下安装
  7. 关系型数据库都是以行跟列组合方式显示,跟excel形式是一样的。如下图
    在这里插入图片描述
  8. 数据类型
  • character(n), 字符/字符串。固定长度 n字符,不可变长度
  • varchar(n) 或 charactervarying(n) , 字符/字符串。可变长度。最大长度 n字符,在version5之后,就是按照字符来计算长度了。
  • binary(n), 二进制串,理论上任何数据都可以二进制形式存储。固定长度 n。
  • boolean, 存储 TRUE 或 FALSE 值
  • varbinary(n) 或 binaryvarying(n) 二进制串。可变长度。最大长度 n。
  • integer§, 整数值(没有小数点)。精度 p。
  • smallint,整数值(没有小数点)。精度 5。
  • integer, 整数值(没有小数点)。精度 10。
  • bigint, 整数值(没有小数点)。精度 19。
  • decimal(p,s), 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数,小数点后有 2 位数的数字。阿里巴巴的规范中强制要求浮点数都使用decimal来存储,使用float或者double存取时会有精度损失
  • numeric(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同)
  • float§ 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。
  • real 近似数值,尾数精度 7。
  • float 近似数值,尾数精度 16。
  • doubleprecision 近似数值,尾数精度 16。
  • date 存储年、月、日的值。
  • time 存储小时、分、秒的值。
  • timestamp 存储年、月、日、小时、分、秒的值。
  • interval 由一些整数字段组成,代表一段时间,取决于区间的类型。
  • array 元素的固定长度的有序集合
  • multiset 元素的可变长度的无序集合
  • xml 存储 XML 数据
  1. sql注释,单行和多行
# 这是单行注释

-- 这是单行注释

/*
这是多行注释
*/

4.2知识点分类

1.DDL,data definition language
1.1背景知识
  1. 这是数据定义语言,在关系型数据库中,数据库本身就是一个文件,例如我创建的一个数据库及一个数据库表,最终体现在windows中mysql安装目录下data目录下的一个文件夹
    在这里插入图片描述
  2. 一个数据库,database,可以看做是一个特殊文件夹。里面的数据库表,注意是由2部分数据组成,表结构和表数据。表结构就是常说的schema,表数据就是metadata。
  3. 关系型数据库存储的数据都是结构化数据,也就是在数据表定义时,就规定了有哪些字段,每个字段什么类型(存储是以多少个字节存储,什么格式读取和写入)。知道这些信息后,读取文件的元数据信息时,就可以拿着这些信息来读取数据,确保数据和字段正确匹配,并且正确被读取出来。
  4. sql语言中大小写不敏感,所以关键字大小写都ok,不过传统程序员一般都会将SQL的关键字大写,其他小写以示区分。不过目前一些公司内部并没有严格约束,一般这些关键字要么全部大写,要么全部小写,本身还是以代码运行起来为准。
  5. 大家看一些视频,资料时,会发现sql语言的关键字都是大写,本文也会采取这种方式。但需要知道,本身sql对大小写是不敏感的。
1.2建数据库

注意我们建立数据库或者表时,数据库一般以db_开头,数据表一般以tb_开头,算是一种命名风格,不过不同公司规范不一样,我说的这个只是一种命名规范。

CREATE DATABASE db_my;

-- 展示有多少个数据库
show databases;
1.3建数据库表
CREATE TABLE tb_person
(
person_id int primarykey auto_increment not null comment '用户id',
lastaname varchar(255) comment '姓,英文中姓名倒置',
firstname varchar(255) comment '名,英文中姓名倒置',
address varchar(255) comment '用户住址,会尽可能精确到省市区县乡村组级别',
province varchar(255) comment '所在省',
city varchar(255) comment '所在城市'
)charset=utf8;

-- 展示数据库表信息
show tables;

-- 显示数据库表结构信息
desc tb_person;
  1. 这里SQL语句命名有多种风格,一种是大驼峰法,就是数据库名字,数据库表名字,字段名都是大驼峰法。还有使用小驼峰法,我这里使用小写结合下划线的风格。具体使用看每个公司的规范和约束。
  2. 这里定义了person_id 、lastaname 、firstname 、address 、province 、city 6个字段,也就是数据库表中的列名。
  3. 这里涉及了几种数据类型,int就是32位整数,varchar就是可变字符串类型,这里指定字符串长度最长是255字节,comment就是字段注释,没错,sql中可以对每个字段加注释。
1.4.数据库规范
  1. 注意,sql正规的建表是需要遵守各个公司的规范。国内很多公司参考阿里巴巴的java开发手册,其中就有mysql的规范包括数据库建表规范。
    https://developer.aliyun.com/topic/java2020?spm=a2c6h.12873639.0.0.18e917d91067Lg
    在这里插入图片描述
    在这里插入图片描述
2.DML,data manipulation language
  • 数据操作,增删改查,不过需要注意,修改的时候Alter命令比较特殊,可以对数据库、数据库表、表字段都可以进行修改。
  • 数据查询,书写顺序 :
    select -> from ->join/union -> where -> group by -> having -> order by->limit by
    执行顺序:
    from ->join/union-> where -> group by -> having -> select -> order by->limit by
2.1 增加数据
  • 所有字段数据插入, 注意一行完整的sql语句结束后,一般都以分号;标识结束,和java语言是一样的
/*
所有字段数据插入,字段顺序和插入数据类型必须和数据库表定义时一样
person_id int ,
lastaname varchar(255) ,
firstname varchar(255) ,
address varchar(255) ,
province varchar(255) ,
city varchar(255) 
*/
INSERT INTO tb_person
VALUES (2, 'shen', 'lei', 'hunanshengchangshashiyueluqu','hunan', 'changsha');

# 插入多条数据
INSERT INTO tb_person
VALUES (3, 'bing', 'shao', 'hubeiwuhanhanyi','hubei', 'wuhan'), (4, 'zi', 'jiao', 'henanzhengzhouyixu','henan', 'zhengzhou');
  • 针对部分字段数据插入
-- 注意看,这时候字段顺序可以做调换,只要按照字段顺序进行值的插入即可
INSERT INTO tb_person (city,province,person_id)
VALUES ('guangzhou','guangdong', 5);
  • 从一个数据表中查询信息插入另外一个表来创建数据
# 这里,SELECT uid FROM tb_user WHERE id=1是一个数据集合,插入到tb_collect表中,插入时需要更新的字段是uid这个字段,当然可以是多个字段。
INSERT INTO tb_collect(uid)
SELECT uid FROM tb_user
WHERE id=1;
2.2查询数据
  • 针对某个字段做查询,注意这里没有使用约束条件如where、group by、having
SELECT person_id,city
FROM tb_person;
  • 针对所有字段做查询,注意这里没有使用约束条件如where、group by、having
SELECT * FROM table_name;
  • 针对字段值去重查询,以下语句会把数据库中所有city字段取出,同时去掉重复的数据。
SELECT DISTINCT city
FROM tb_person;
  • 针对查询做值约束, 以下语句意思是从数据库表中取出所有行数据中,city字段值是“changsha”的数据。*代表通配符,这一点在很多语言和场景下都适用,注意注意。
SELECT * FROM tb_person WHERE city='changsha';
  • 针对查询结果,做多条件判断,and就是同时满足的意思,or就是或
  • 4
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值