总结:SQL相关知识

时间:2022-09-03 15:46:30

今天做笔试题目的时候,直接被SQL最简单的题目给搞抽抽了,所以我现在的打算是综合的学习一下SQL语句,其实按照网上的东西,SQL语句应该不是很难

SQL

在数据库上执行的大部分工作是由sql语句完成,例如:

SELECT lastname FROM Persons

====SQL对大小写不敏感====
SQL主要分为两个部分:数据操作语言(DML)和数据定义语言(DDL)
主要的DML语言有:
- SELECT:从数据库中获取数据;
- UPDATE:更新数据库表中的数据;
- DELETE:从数据库中删除数据;
- INSERT INTO:向数据库中插入数据

SQL中重要的DDL语句:

  • CREATE DATEBASE:创建新的数据库
  • ALTER DATEBASE:修改数据库
  • CREATE TABLE:创建新表
  • ALTER TABLE:变更数据表
  • DROP TABLE 删除表
  • CREATE INDEX 创建索引
  • DROP INDEX 删除索引

SQL SELECT语句

SELECT语法

SELECT 列名称 FROM 表名称

SELECT * FROM 表名称

SQL SELECT DISTINCT语句

主要的作用是返回这个表中有哪些数值,distinct主要是重复值
DISTINCT语法

SELECT DISTINCT 列名称 FROM 表名称

WHERE语句

主要的作用是有条件冲表中选取数据
WHERE语法

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

运算操作符主要有:

运算符 描述
= 等于
!= 不等于
> 大于
< 小于
=
大于等于
<= 小于等于
BETWEEN 在某个范围内
LINK 搜索某种模式

注意在SQL中单引号在环绕本文值,如果是数值,则不需要引号。

AND&OR运算符

AND和OR运算符可以在WHERE子句中把两个或多个条件结合起来
如果第一个条件和第二个条件都成立,则AND运算符显示一条记录
如果第一个条件和第二个条件中只要有一个成立,则OR运算符显示一条记录

SQL ORDER BY子句

ORDER BY语句
ORDER BY语句用于根据指定的列对结果集进行排序
ORDER BY语句默认按照升序对记录进行排序
如果希望按照降序对记录进行排序,可以使用DESC关键字
举例:以逆字母顺序显示公司名称,并以数字顺序显示顺序号

SELECT Company,OrderNumber FROM Orders BY Company DESC,OrderNumber ASC

SQL INSERT INTO语句

INSERT INTO语句用于向表格中插入新的行
语法:

INSERT INTO 表名称 VALUES(值1,值2,……)

也可以指定要插入数据的列:

INSERT INTO table_name(列1,列2,……)VALUES(值1,值2,……)

SQL UPDATE语句

update语句用于修改表中的数据
语法:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

SQL DELETE语句

DELETE语句用于删除表中的行
语法

DELETE FROM 表名称 WHERE 列名称=值

删除所有行的语法是

DELETE FROM table_name

或者

DELETE * FROM table_name

SQL TOP语句

TOP 子句*
TOP子句用于规定要返回的纪录的数目。
对于拥有数千条纪录的大型表来说,TOP子句是非常有用的。
语法:

SELECT TOP number|percent column_name(s) FROM table_name

举例:
从一个数据中选取规定数目的条目:

SELECT TOP 2 * FROM Persons

选取一定比例的条目:

SELECT TOP 50 PERCENT * FROM Persons

SQL LIKE 操作符

LIKE操作符用于在WHERE子句中搜索列中的制定模式。
语法:

SELECT column_name(s)
FROM table_name
WHERE colunm_name LIKE pattern

其实 LIKE操作符的操作精髓在制定模式,我们可以通过通配符,结合LIKE的功能,查找例如所有姓李的客户(”李%”)

SQL通配符

通配符 描述
% 替代一个或者多个字符
_ 仅替代一个字符
[charlist] 字符列中任一一个字符
[^charlist]或[!charlist] 不在字符列中的任意字符

SQL IN 操作符

IN 操作符允许我们在WHERE子句中规定多个值
SQL IN语法

SELECT colunm_name(s)
FROM table_name
WHERE ccolunm_name IN (value1,value2,……)

SQL BETWEEN 操作符

BETWEEN操作符在WHERE子句中使用,作用是选取介于两个值之间的数据范围
语法

SELECT column_name(s)
FROM table_name
WHERE colume_name
BETWEEN value1 AND value2

注意:一般情况下这个value是数字之类的能够有统一标准辨别的区间,虽然可以对字符之间的区间进行区别,但是不用的数据库之间还是有区别的。

SQL Alisa(别名)

通过使用Alisa,可以为列名称和表名称制定别名(Alisa)
相关语法
表的SQL Alisa语法

SELECT column_name(s)
FROM table_name
AS alisa_name

列的SQL Alisa语法

SELECT column_name AS alisa_name
From table_name

其实总结的来看 这个就是==AS==的功能

SQL JOIN

SQL join用于根据两个或者多个表中的列之间的关系,从这些表中查询数据
join有很多种类型,首先举一个例子:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

这里面就用到INNER JOIN(内连接),还有其他的,随后介绍

INNER JOIN

SQL INNER JOIN 关键字
在表中至少一个匹配时,INNER JOIN 关键字返回。
==INNER JOIN 和 JOIN 是相同的==
INNER JOIN 关键字语法

SELECT column_name(S)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

LEFT JOIN

SQL LEFT JOIN 关键字会从左表(table_name1)那里返回所有行,即使右表(table_name2)中没有匹配的行。
LEFT JOIN关键字语法

SELECT colunm_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.colunm_name

其实这个理解也不是很难,就是左表中的所有数据 即便是没有跟右表匹配,也应该连接一下。

RIGHT JOIN

SQL RIGHT JOIN其实和LEFT JOIN想法,应用参考LEFT JOIN 相关的知识。

FULL JOIN

SQL FULL JOIN 其实就是参考了LEFT 和RIGHT 只要是左右表中的数值,都会出现在最终表中。

SQL UNION 和 UNION ALL操作符

SQL UNION操作符用于合并两个或多个select语句的结果集
==注意==UNION 内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
同时每条SELECT语句中的列的顺序必须相同。
SQL UNION语法

SELECT column_name(s)FROM table_name1
UNION
SELECT colunm_name(s)FROM table_name2

==注释==默认情况,UNION操作符选择不同的数值,需要重复数值,则用UNION ALL
SQL UNION ALL语法

SELECT column_name(s)FROM table_name1
UNION ALL
SELECT c olunm_name(s)FROM table_name2

SQL SELECT INTO语句

SQL SELECT INTO语句可用于创建表的备份文件
SQL SELECT INTO语法:

SELECT *(colunme_name)
INTO new_table_name[IN externaldatabase]
FROM old_table_name

==注== select后面的语句是希望整个表备份还是某个列备份。
这个语句后面可以带有WHERE子句、连接语句等
==其实我个人的理解就是,其实这个INTO语句后面可以按照SQL的复杂度进行添加子句==

SQL CREATE DATABSAE语句

CREATE DATABASE语句用于创建数据库
用法:

CREATE DATABASE database_name

SQL CREATE TABLE语句

CREATE TABLE语句用于创建数据库中的表
相关用法

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
……

SQL 约束

SQL约束用于限制加入表的数据类型,主要的约束有:

  • NOT NULL 约束强制不接受空值
  • UNIQUE 约束唯一标识数据库表中的每条记录
  • PRIMARY KEY 约束唯一标识数据库表中的每条记录(主键必须包含唯一值,不能包含NULL值,每一个表都应该有一个主键,也只能有一个主键)
  • FOREIGN KEY 一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY
  • CHECK CHECK约束用于限制列中的值的范围,如果对单个列定义CHECK约束,那么只允许特定值,如果对一个表定义CHECK约束,那么约束会在特定列中对值进行限制
  • DEFAULT DEFAULT约束用于向列中插入默认值,如果没有规定其他值,那么将会添加到所有的新记录。

SQL CREATE INDEX语句

CREATE INDEX语句用于在表中创建索引,在不读取整个表的情况下,索引使数据库应用程序可以更快的查找数据。
SQL CREATE INDEX语法
在表上创建一个简单的索引,允许使用重复值:

CREATE INDEX index_name
ON table_name(colunm_name)

SQL相关的删除操作

通过使用DROP语句,可以轻松的删除索引,表和数据库。

DROP INDEX/TABLE/DATABASE 相对应的名称

==SQL TRUNCATE TABLE==
如果我们仅仅需要删除表内的数据,但不删除表本身,使用TRUNCATE TABLE命令

TRUNCATE TABLE 表名称

SQL ALTER TABLE 语句

ALTER 用于在已有表中添加,修改或删除列
相关的语法

ALTER TABLE table_name
ADD coluMN_name datatype
DROP COLUMN column_name
ALTER COLUNM column_name datatype

SQL AUTO INCREMENT字段

AUTO INCREMENT字段:
我们通常希望在每次插入新记录时,自动的创建主键字段的值
==用法==
其实我们在使用的时候 类似的可以在创建的时候,在主键设计相关的值,也可以后期通过alter等相关的操作进行修改。

SQL VIEW 视图

视图是可视化的表。
SQL CREATE VIEW语法

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_nmae
WHERE condition

==使用视图可以更方便我们以后的查找==
SQL 更新视图

SQL CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

其实就是我们日常操作数据库或者表的时候的语法,注意前面写成VIEW即可
SQL撤销视图

SQL DROP VIEW Syntas
DROP VIEW view_name

SQL 函数

SQL 内建函数的使用方法:

SELECT function(列)FROM

相关函数的用法
AVG()
计算平均值,其输出是一个数值
COUNT()
返回的是制定条件的的行数
FIRST()/LAST()
返回表格的第一(最后)个记录的值
MAX()/MIN()
返回一列中的最大(最小)值,NULL不计算其中
SUM()
SUM函数返回数值列的总和
GROUP BY
GROUP BY函数用于合计函数,根据一个或者多个结果集进行分组。
GROUP BY语法

SELECT colume_name,func(colume_name)
FROM table_name
WHERE colume_name operator value
GROUP BY colume_name

HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
HAVING的语法如下:

SELECT column_name, 合计函数(column_name)
FROM table_name
WHERE column_name 操作方法
GROUP BY column_name
HAVING 合计函数(column_name) 操作值

UCASE
UCASE 函数把字段的值转换为大写。
LCASE
LCASE函数把字段值转换为小写
LEN
LEN 函数返回文本字段中值的长度。
ROUND
ROUND 函数用于把数值字段舍入为指定的小数位数。
SQL ROUND()语法如下:

SELECT ROUND(column_name,decimals) FROM table_name

decimals字段就是控制小数位数。
NOW
返回当前的时间和日期
FORMAT
FORMAT 函数用于对字段的显示进行格式化。
SQL FORMAT()语法如下:

SELECT ROUND(column_name,format) FROM table_name

其他知识

相关范式:

范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。

第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。
简而言之,==第一范式就是无重复的列==。
第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。
简而言之,==第二范式就是非主属性非部分依赖于主关键字==。
第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
简而言之,==第三范式就是属性不依赖于其它非主属性==。