知识永远学不完,但多懂一点知识就会让生活更轻松一点!
又是元气满满的一天,耶!
关于SQL的知识点
在讲SQL之前呢,我们先来了解一下什么是SQL?
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的结构化数据库查询语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。
SQL能做什么?
- 面向数据库执行查询 ;
- 从数据库中取出数据 ;
- 向数据库插入新的记录;
- 更新数据库中数据
- 从数据库删除记录;
- 创建数据库;
- 创建表
- 创建存储过程
- 创建视图
- 设置表、存储过程和视图的权限
数据库含义:
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。
数据库类型分类:
1、关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联的。常见的关系型数据库有Mysql,SqlServer等。
(关系数据库又分为两类:一类是桌面数据库,例如Access、FoxPro和dBase等;另一类是服务器数据库,例如SQL Server、Oracle和Sybase等。桌面数据库用于小型的、单机的应用程序,它不需要网络和服务器,实现起来比较方便,但它只提供数据的存取功能。服务器数据库主要适用于大型的、多用户的数据库管理系统,应用程序包括两部分:一部分驻留在客户机上,用于向用户显示信息及实现与用户的交互;另一部分驻留在服务器中,主要用来实现对数据库的操作和对数据的计算处理。)
2、非关系型数据库(NoSQL),指分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。
常用的关系数据库工具: Navicat(支持MySQL、Sql Server、 oracle、postgreaql、sqllite)
常用的非关系型数据库: Redis
MySQL数据库特点:
- 开源的,不需要支付额外的费用。
- 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
- 使用标准的 SQL 数据语言形式。
- 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和Tcl 等。 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
- 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
- MySQL 是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统。
缺点:性能相对缓慢, 并发能力不强(最大连接数量100)
oracle数据库:
优点:开发性好,几乎适合全平台;安全性高、性能高
缺点:价格昂贵,维护成本高,学习复杂,开发成本比较高
sql server
优点:学习简单
缺点:开发性差,只适合在windows上运行,风险大,没有任何安全证书
redis
优点: 数据结构多样化,支持数据持久化,不用担心数据丢失,单线程请求,不用担心数据一致性
缺点: 内存消耗大(string类型),数据关系性能差,尤其是对字符串数据进行检索时,单进程,性能受CPU限制
数据库有关权限的表都有哪几个
MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。下面分别介绍一下这些表的结构和内容:
user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
db权限表: 记录各个帐号在各个数据库上的操作权限。
table_priv权限表: 记录数据表级的操作权限。
columns_priv权限表: 记录数据列级的操作权限。
host权限表: 配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。
索引 是一种数据结构,数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据,简单来说索引相当于目录,方便查询。
**建立索引语句:**alter table 表名 add index(字段名)
SQL语句
1、sql对大小写不敏感 ,查询和更新指令构成了 SQL 的 DML(数据库操作语言) 部分:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
2、SQL 中最重要的 DDL(数据定义语言) 语句:
CREATE DATABASE - 创建新数据库
ALTER DATABASE- 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
SQL语句举例
精确查询: SELECTFROM hnjk_share_qa
.equipment_info
WHERE access_status = 1;(j接入充电桩数)
模糊查询: SELECTFROM hnjk_share_qa
.station_info_daily
WHERE Area_Code
LIKE ‘4601%’; (海口市下面的所有预接入充电站数)
单个字段去重查询: SELECT DISTINCT station_seq FROM hnjk_share_qa
.equipment_info
WHERE access_status = 1;(接入充电桩对应几个充电站)
多个字段去重统计: SELECT Station_Seq,org_id, SUM(charge_power) FROM hnjk_work_qa.charge_statistics_info WHERE statistics_time BETWEEN ‘2019-09-01’ and ‘2019-09-30’ GROUP BY Station_Seq ORDER BY SUM(charge_power) DESC;(统计每个站里面所有桩的充电量总和,并且根据总电量排序)
多表查询: SELECTFROM hnjk_share_qa
.station_info
a,hnjk_work_qa
.act_re_station_info b WHERE a.station_Seq = b.station_Seq AND b.access_status = 1; (查询已接入的充电站数)
嵌套查询: SELECTFROM hnjk_share_qa
.station_info_daily
a, hnjk_share_qa
.equipment_info_daily
b WHERE a.Station_Seq = b.Station_Seq AND Equipment_Seq in (
SELECT Equipment_Seq FROM hnjk_share_qa
.station_info_daily
a, hnjk_share_qa
.equipment_info_daily
b WHERE a.Station_Seq = b.Station_Seq AND a.Area_Code LIKE ‘4601%’) ;(海口市所有预接入充电桩)
后续补充~~