SQL是什么

1 序言

1.1 数据库与数据库管理软件

  • 数据库(Database)
    以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,它具有完整性、共享性。
  • 数据库管理系统(Database Management System)
    一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性完整性、共享性等。

1.2 数据存储的发展阶段

  • 人工管理:数据保存在磁带上,顺序读写,不能共享,安全性差
  • 文件系统:以文件方式存储在本地磁盘,数据访问相对独立,数据冗余
  • 数据库:结构化数据模型,冗余度低,控制能力强
  • 大数据:数据量大,分布式计算

1.3 关系型数据库

建立在关系模型的基础上,借助于集合代数等数学概念和方法来处理数据库中的数据。具有实体跟实体间的关系。

2 SQL

2.1 什么是SQL

  • 结构化查询语言(Structured Query Language)
  • 结构化:按照一定规则安排和处理对实体进行处理

2.2 SQL的各种基础语法

select、insert、update、delete等基础增删改查操作

2.2.1 select查询语句基础

  • 投影:选择列
  • 选择:选择行
  • 连接:查询多表
  • 基本SQL语句 select * from table
  • 算数表达式和运算符优先级 select name,sal*12+100 from table
  • NULL值 既不是0也不是空格,表示缺省值
  • 列的别名 select name [as] "Name" from table
  • 级联操作 select name||sal from table(结果是将name与sal拼接在一起)
  • 消除重复行 select DISTINCT * from table
  • 查询语句的限制 select * from table where 条件
  • 将查询结果排序显示 select * from table order by 排序条目 [desc(降序)]

2.2.2 典型单行函数

  • 字符函数
    • 转小写 LOWER('字符串')
    • 转大写 UPPER('字符串')
    • 单词首字母大写 INITCAP('字符串')
    • 字符串拼接 CONCAT('字符串1','字符串2')
    • 取子串 SUBSTR('字符串',开始位置,结束位置)
    • 获得字符串长度 LENGTH('字符串')
    • 查找子串位置 INSTR('字符串','子串')
  • 常用数字函数
    • 四舍五入 ROUND(数字)
    • 直接删除保留有效数字 TRUNC(数字,保留小数点后位数)
  • 常用日期函数
    • 获取当前系统时间 SYSDATE()
  • 常用转换函数
    • 日期转字符 TOCHAR('日期','转换格式')
    • 数字转字符 TOCHAR('数字','转换格式')
    • 字符转数字 TONUMBER('字符')
    • 字符转日期 TODATE('字符','日期格式')

2.2.3 典型分组函数(多行函数)

对多行数据进行汇总处理,统计等操作

  • 分组函数
    • 求最大值 MAX(字段)
    • 求最小值 MIN(字段)
    • 求平均值 AVG(数字型字段)
    • 求和函数 SUM(求和字段)
    • 计数 COUNT(*(任意一列))
  • 分组子句
    • 按照字段进行分组 GROUP BY 字段
    • 对分组查询结果进行限制(只能跟在GROUP BY后面) HAVING 条件
    • 对分组结果进行排序 ORDER BY 字段

2.2.4 多表连接查询

  • 自连接:表自己与自己建立的连接
  • 等值连接:比较连接列的值显示最终结果
  • 外连接
    • 左外连接:以左表为准 FROM 表1,表2 WHERE 表1.数据 = 表2.数据(+)
    • 右外连接:以右表为准 FROM 表1,表2 WHERE 表1.数据(+) = 表2.数据
    • 全连接:显示所有记录 FROM 表1 FULL JOIN 表2 ON 表1.数据 = 表2.数据

2.2.5 典型子查询

一个查询的输出是另一个查询的输入,也称为嵌套查询

编号注意事项
1基于未知时考虑使用子查询
2子查询要用括号包在里面
3子查询放在主查询右边,提高可读性
  • 单行子查询:返回结果为一行且只有一列的查询,通过算数运算符=><进行条件选择
  • 多行子查询:返回结果有多行且只有一列的查询,通过in、any或者all进行条件选择
  • 空值子查询:返回结果为NULL

2.2.6 表结构操作

  • 创建表 CREATE TABLE 表名(列名 数据类型 约束,…)

  • 数据类型

    名称表示
    可变字符VARCHAR2(字符串长度)
    日期yyyy-MM-dd HH:mm:ss
    数值NUMBER(m,n),m表示整数长度,n表示小数长度
    布尔值BOOLEAN,true或者false
  • 列约束与表约束

    名称表示
    非空Not NULL,不能为空值 ,不为表约束
    唯一unique,不能有重复值
    主键Primary Key,表示唯一索引
    外键Foreign Key,多张表中都存在
    条件检查Check,进行检查
  • 增加列 ALTER TABLE 表名 ADD 列名 数据类型 约束

  • 删除列 ALTER TABLE 表名 DROP COLUMN 列名

  • 修改表名 ALTER TABLE 表名 RENAME TO 新表名

  • 增加列名 ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名

  • 删除表 DROP TABLE 表名 CASCADE CONSTRAINTS

  • 查看表结构DESCRIP 表名

2.2.7 数据操作语言(Data Manipulation Language, DML)

  • 增加新行到表中 INSERT INTO 表名 (列名,...) VALUES(列,...)

    编号关键点
    1字符串与日期类型需要用引号包含
    2新增的数据要与列一一对应
  • 修改表中的行 UPDATE 表名 SET 列名=新值 WHERE 条件

  • 删除表中的行 DELETE FROM 表名 WHERE 条件

2.2.8 事务操作语句

  • 事务

    • 数据库的一系列操作单元集合,要么全部完成,要么取消,保证操作一致性。
    • 执行数据操作语言(DML)时,事务开始
    • commit或者rollback等操作、DDL或者DCL等操作、系统崩溃时标志事务结束
  • 事务控制

    事务命令描述
    Commit提交事务
    RollBack回滚事务
    SavePoint事务标记点,可以使事务回滚到不同阶段
    Roll Back to savepoint回滚到标记点

2.3 SQL优化

处理原因
尽量避免使用**表示所有,耗费时间长,效率低
尽量使用表的别名编写语句时更加便捷
小范围的查询子句尽量放在右边WHERE子句的连接顺序是从右向左,所以更加高效
尽量使用>=代替>>=找到中间值直接就是目标值,效率高
用TRUNCATE代替DELETETRUNCATE是直接删除,不保存缓存区进行回滚,效率更高
尽量多使用COMMIT当使用命令较多而不提交时,会占用大量资源,降低效率,COMMIT会释放资源
避免在索引列上使用函数如果直接对索引列进行数学运算,其索引功能没有发挥作用,效率低下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值