SQL,总览
SQL,基本介绍
SQL,定义】SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。设计SQL的目的是很好地完成一项任务,即提供一种从数据库中读写数据的简单有效的方法。SQL不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL,所以,学习此语言使你几乎能与所有数据库打交道。结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。其功能不仅仅是查询,而是包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。
数据操作:检索(即查询)和更新(即dml语言:事务操作语言(update,insert,delete))
基础:SHOW、USE
与数据库相关:show、use
域的数据类型
SOL标准支持多种数据类型,要注意,不同的关系数据库管理系统中支持的数据类型不完全相同。
表的定义、修改、删除
cache】
时间戳—创建时间DEFAULT CURRENT_TIMESTAMP。更新时间—DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
创建表语句CREATE TABLE,语法】
创建表语句CREATE TABLE,其中可能用到的关键字陈列】主键PRIMARY KEY、空NULL、非空NOT NULL、默认DEFAULT、自增AUTO_INCREMENT、外键FOREIGN KEY、约束CHECK(…)、REFERENCES、UNIQUE KEY、COMMENT
更改表结构 ALTER TABLE】
ALTER TABLE vendors ADD vend_phone CHAR(20);
这条语句给vendors表增加一个名为vend_phone的列,必须明确其数据类型。
ALTER TABLE vendors DROP COLUMN vend_phone;
删除vendors表一个名为vend_phone的列
用ALTER TABLE添加外键】
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES orders (order_num);
小心使用ALTER TABLE 使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份),数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们;类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。
复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:
用新的列布局创建一个新表;使用INSERT SELECT语句从旧表复制数据到新表。如果有必要,可使用转换函数和计算字段;检验包含所需数据的新表;重命名旧表(如果确定,可以删除它);用旧表原来的名字重命名新表;根据需要,重新创建触发器、存储过程、索引和外键。
DROP TABLE】
修改表语句update语句
select 查询语句
select:
cache–单个数据库表中检索数据的单条语句、嵌套查询、联结查询(又叫多表查询)、组合查询UNION
立)select语句】
select语句,/概述】整个SELECT 语句的含义是,根据 WHERE 子句的条件表达式从FROM子句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表。(mine:先是从where中挑出符合条件的元组,select会从这些元组中挑出某些属性形成表)一条SQL语句可以同时完成选择和连接查询,这时WHERE子句是由连接谓词和选谓词组成的复合条件。
SELECT子句的<目标列表达式>不仅可以是表中的属性列,也可以是表达式。
select语句一般格式】
select官方语法
列可以进行运算
在select语句中可使用as语句
select查询,分为单表查询和多表查询
select语句中可用的子句:from子句、where 子句、group by子句、having子句、order by子句、limit子句
select结合distinct关键字
连接查询(即联结查询)
连接查询(即联结查询),知识点概述】“联结”,基本介绍。联结查询的类别。连接条件/连接谓词。连接查询的思路。等值连接查询。自然连接查询。自身连接查询。外连接查询。用where联结两个表时的工作原理。
连接查询,基本介绍】
联结,基本介绍:如果数据存储在多个表中,怎样用一条 SELECT 语句就检索出数据呢?答案是使用联结。如果数据存储在多个表中,怎样用一条 SELECT 语句就检索出数据呢?答案是使用联结。简单说,联结是一种机制,用来在一条 SELECT 语句中关联表,因此称为联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。连接查询何时使用:使用要查的好几个字段不是在一个表中的。
联结查询的类型】
连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询等。连接运算中有两种最为重要也最为常用的连接,一种是等值连接(equijoin),另一种是自然连接(natural join)。
连接条件/连接谓词】
连接查询的 WHERE子句中用来连接两个表的条件称为连接条件或连接谓词。
连接查询的思路】Hou:依靠主键和外键的思想,主要是将多个表连起来,由多个表连成一个大表,从中挑出想要的字段
连接的形式:等值连接(即内部联结)、外部连接。
等值连接查询(即内连接查询)】
等值连接查询:当连接运算符为=时,称为等值连接。使用其他运算符称为非等值连接。等值联结和内联结可以达到完全相同的效果。等值连接语法:where。内联结的语法:inner join on。
自然连接natural join】
自然连接:若在等值连接中把目标列中重复的属性列去掉则为自然连接。
自身连接查询self-join】
自身连接查询:连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接。
外连接查询outer join】
外连接查询:左外连接列出左边关系中所有的元组,右外连接列出右边关系中所有的元组。
用where联结两个表时的工作原理】
用where联结两个表时的工作原理:在联结两个表时,实际要做的是将第一个表中的每一行与第二个表中的每一行配对。WHERE 子句作为过滤条件,只包含那些匹配给定条件(这里是联结条件)的行。没有 WHERE子句,第一个表中的每一行将与第二个表中的每一行配对,而不管它们逻辑上是否能配在一起。
嵌套查询
SQL嵌套查询,若子查询的查询条件不依赖于父查询,这类子查询称为不相关子查询,不相关子查询是较简单的一类子查询。如果子查询的查询条件依赖于父查询,这类子查询称为相关子查询(correlated subquery),整个查询语句称为相关嵌套查询。
子句
group by子句
看书《SQL必知必会》
group by子句
group by子句,概述/作用】GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。对查询结果分组的目的是为了细化聚集函数的作用对象。如果未对查询结果分组,聚集函数将作用于整个查询结果。分组后聚集函数将作用于每组,即每一组都有一个函数值。(mine:group by 并没有出现在select子句阐述的定义语句中,所以可能group by 是一个非必须的子句。使用group by子句好像大部分情况是前面只有select from ,一般好像没有where)
group by 语法】SELECT column1,column2 . column3 . . FROM table group by column 还可以后缀 having … 使用having子句对分组后的结果进行过滤
group by必须出现在WHERE子句之后,order by 之前
group by子句,是什么/作用】
having子句
HAVING语句】
having语句的作用】:数据分组后,过滤分组。如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。
having必须配合group by
having子句中支持的操作符和where子句的一样
having子句的位置:
where子句
where子句,是什么/简介:用来过滤的指定的行。where在数据分组前进行过滤。where子句用来查询满足条件的元组。
where子句的位置】在SELECT语旬中,WHERE子句在表名(FROM子句)之后给出,WHERE子句的位置在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,
where子句中常用的查询条件】比较(比较运算符),确定范围(between)、确定集合(谓词用:IN、NOT IN))、字符匹配(like通配符)、空值判断、多重条件(谓词AND、OR、NOT)
WHERE子句中是不能用聚集函数作为条件表达式的
一条SOL语句可以同时完成选择和连接查询,这时WHERE子句是由连接谓词和选择谓词组成的复合条件。
order by 子句
可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降(DESC)排列,默认值为升序。
order by子句必须在from子句之后
多列排序要求】
order by 列1,列2… asc;
limit子句
insert
update语句
update语句,知识点概述】update语句用来干什么:为了更新(修改)表中的数据,可使用UPDATE语句,可采用两种方式使用UPDATE:更新表中特定行、更新表中所有行。update语句的语法。
update语句的语法】基本的UPDATE语句由3部分组成,分别是: 要更新的表;列名和它们的新值;确定要更新行的过滤条件。UPDATE语句总是以要更新的表的名字开始,SET命令用来将新值赋给被更新的列。在更新多个列时,只需要使用单个SET命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。
delete语句
SQL,杂
常见的group by 结合having使用方法描述】先用group by子句按某一属性进行分组,再用聚合函数作用到每一组中,having短语给出了选择组的条件,只有满足条件的组才会被选出来
where子句和having短语的区别】WHERE 子句与 HAVING 短语的区别在于作用对象不同。WHERE 子句作用于基本表视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。
MySQL中的NOT :NOT对IN、BETWEEN和EXISTS子句取反
删除数据库语句(慎用,要备份)
备份数据库
实质:将数据库信息存储到文件中
恢复数据库
语句:(此语句进入Mysql命令再执行):Source 文件名.sql
将文件恢复到数据库中
流程控制语句: select if。select ifnull。select case when…
拼接sql语句时,注意是否加空格
primary key(…)
主键中只能使用不允许NULL值的列,允许NULL值的列不能作为唯一标识。
主键值必须唯一,即表中的每个行必须具有唯一的主键值,如果主键使用单个列,则它的值必须唯一;如果使用多个列,则这些列的组合值必须唯一。
PRIMARY KEY(…)
unique
UNIQUE 约束也称“唯一约束”,设置了 UNIQUE 约束的字段,每条记录的值都必须是唯一的,因此 UNIQUE 约束可以防止两条记录在某个字段上出现重复值,例如在 CUSTOMERS 表中,要防止两个或者多个顾客出现相同的姓名。
UNIQUE 可以约束表的一个字段,也可以约束多个字段,此外,设置了 UNIQUE 约束的字段可以出现 NULL 值。
UNIQUE(唯一约束)和 PRIMARY KEY(主键)非常相似,但是 UNIQUE 允许字段中出现一次 NULL 值,而 PRIMARY KEY 不允许出现 NULL 值;一张表可以包含多个 UNIQUE 字段,但是只能有一个主键。
SQL 索引
SQL视图
SQL模式
定义模式SQL语句
删除模式SQL语句
SQL函数
SQL函数,分类系统自带函数和自定义函数
SQL系统自带函数,有哪些:合计函数、Scalar 函数、数学函数、时间日期相关函数、加密函数、流程控制函数
SQL Aggregate 函数(又叫统计函数、合计函数)
聚集函数的使用位置】WHERE子句中是不能用聚集函数作为条件表达式的。聚集函数只能用于SELECT子句和 GROUP BY中的HAVING子句。
聚合函数不可以直接嵌套使用,比如: max(count(*))
SQL统计函数使用地点:select … from …
常见的SQL统计函数陈列:count(),sum(),avg(),max(),min()
count()函数】
count(*)和count(列)的区别
sum()函数
sum(数值类的列)
SQL数学函数
SQL数学函数,有哪些:ABS()、BIN()
Scalar 函数(即字符串相关函数)
视图
视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中;所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了;从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化;视图一经定义,就可以和基本表一样被查询、被删除;也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。
创建视图、查询视图、更新视图、删除视图
使用视图的好处】
视图相关的SQL】
存储过程
SQL游标
SQL 触发器
事务相关
事务的常用控制语句】
START TRANSACTION 或者 BEGIN,作用是显式开启一个事务。
COMMIT:提交事务。当提交事务后,对数据库的修改是永久性的。
ROLLBACK 或者 ROLLBACK TO [SAVEPOINT],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
SAVEPOINT:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
RELEASE SAVEPOINT:删除某个保存点。
SET TRANSACTION,设置事务的隔离级别。
SQL:grant、revoke
GRANT
REVOKE
动态SQL
dai看《数据库系统概论》265页
SQL,杂
某些数据库表可能某个字段交由数据库自动填值,举例:“创建时间”、"修改时间"这类的字段。
写出优质的SQL语句
尽量减少 I/O 操作。如说一份好的 SQL 执行计划就会尽量减少 I/O 操作,因为 I/O 是 DBMS 最容易出现瓶颈的地方,可以说数据库操作中有大量的时间都花在了 I/O 上。此外,你还需要考虑如何降低 CPU 的计算量,在 SQL 语句中使用 GROUP BY、ORDER BY 等这些语句会消耗大量的 CPU 计算资源,因此我们需要从全局出发,不仅需要考虑数据库的 I/O 性能,还需要考虑 CPU 计算、内存使用情况等。
MySQL正则表达式
schema是什么】模式schema: 关于数据库和表的布局及特性的信息。表具有一些特性,这些特性定义了数据在表中如何存储,包括存储什么样的数据,数据如何分解,各部分信息如何命名等信息。描述表的这组信息就是所谓的模式 ( schema ),模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。