sql 不包含某个字符串_关于SQL基础的认知总结

本文是关于SQL基础的认知总结,涵盖选择数据、LIKE命令与通配符、别名、JOIN类型、UNION操作、INSERT INTO、CREATE语句、约束、索引、视图、数据函数、NULL值处理、数据类型、SQL函数、事务处理、视图限制、集合运算、窗口函数、GROUPING函数和流程控制等核心概念。重点解析了LIKE操作符配合%和_通配符的使用,以及如何利用JOIN、UNION实现数据的合并和筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础的总结和解释(基于SQL Server):

先来个基础的导图,来源于脚本之家:

bbe00c913d96f07ee1e679e8cc0435dd.png

基础的语句总结和解释:

1.选择前百分之多少的数据:
SELECT TOP 50 PERCENT * FROM Websites;2.常用通配符:通配符 描述
%替代 0个或多个字符
_替代一个字符
[charlist]
字符列中的任何单一字符
[^charlist]

[!charlist]
不在字符列
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
‘_a_’ //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的

首先说下LIKE命令都涉及到的通配符:
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符
其中搭配以上通配符可以让LIKE命令实现多种技巧:
1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)3.别名:在下面的情况下,使用别名很有用:

  • 在查询中涉及超过一个表
  • 在查询中使用了函数
  • 列名称很长或者可读性差
  • 需要把两个列或者多个列结合在一起4.连接:不同的 SQL JOIN
    在我们继续讲解实例之前,我们先列出您可以使用的不同的 SQL JOIN 类型:
  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

5.Union 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
使用UNION命令时需要注意,只能在最后使用一个ORDER BY命令,是将两个查询结果合在一起之后,再进行排序!绝对不能写两个ORDER BY命令。
另外,在使用ORDER BY排序时,注意两个结果的别名保持一致,使用别名排序很方便。当然也可以使用列数6.SELECT INTO 实例
select * into employee_backup from employee where 1=2
INSERT INTO table2
SELECT * FROM table1;7.create 语句
CREATE DATABASE dbname;
CREATE TABLE 语句用于创建数据库中的表。
表由行和列组成,每个表都必须有个表名。8.约束 CONSTRAINT
在 SQL 中,我们有如下约束:

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。
  • DEFAULT - 规定没有给列赋值时的默认值。

9.索引
CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引
CREATE INDEX PIndex
ON Persons (LastName, FirstName)10.SQL AUTO INCREMENT
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。11.视图
视图是可视化的表,
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition12.Data函数
下面的表格列出了 SQL Server 中最重要的内建日期函数:函数描述
GETDATE()
返回当前的日期和时间
DATEPART()
返回日期/时间的单独部分
DATEADD()
在日期中添加或减去指定的时间间隔
DATEDIFF()
返回两个日期之间的时间
CONVERT()
用不同的格式显示日期/时间SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式:YYYY-MM-DD
  • DATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式:YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式:唯一的数字

注释:当您在数据库中创建一个新表时,需要为列选择数据类型! 13.NULL值
NULL 值代表遗漏的未知数据。
默认地,表的列可以存放 NULL 值。
本章讲解 IS NULL 和 IS NOT NULL 操作符。
--如果alexa列为null值,则赋予0,否则,取原值
select id,name,url,ifnull(alexa,0)from websites;
select id,name,url,COALESCE(alexa,0) from websites;14.SQL通用数据类型
CHARACTER(n) 字符/字符串。固定长度 n。
VARCHAR(n) 或
CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。
BINARY(n) 二进制串。固定长度 n。
BOOLEAN 存储 TRUE 或 FALSE 值
VARBINARY(n) 或
BINARY VARYING(n) 二进制串。可变长度。最大长度 n。
INTEGER(p) 整数值(没有小数点)。精度 p。
SMALLINT 整数值(没有小数点)。精度 5。
INTEGER 整数值(没有小数点)。精度 10。
BIGINT 整数值(没有小数点)。精度 19。
DECIMAL(p,s) 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数小数点后有 2 位数的数字。
NUMERIC(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同)
FLOAT(p) 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。
REAL 近似数值,尾数精度 7。
FLOAT 近似数值,尾数精度 16。
DOUBLE PRECISION 近似数值,尾数精度 16。
DATE 存储年、月、日的值。
TIME 存储小时、分、秒的值。
TIMESTAMP 存储年、月、日、小时、分、秒的值。
INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。
ARRAY 元素的固定长度的有序集合
MULTISET 元素的可变长度的无序集合
XML 存储 XML 数据15.SQL 函数SQL 函数
SQL 拥有很多可用于计数和计算的内建函数。SQL Aggregate 函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:

  • AVG() - 返回平均值
  • COUNT() - 返回行数
  • FIRST() - 返回第一个记录的值
  • LAST() - 返回最后一个记录的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回总和

SQL Scalar 函数
SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:

  • UCASE() - 将某个字段转换为大写
  • LCASE() - 将某个字段转换为小写
  • MID() - 从某个文本字段提取字符,MySql 中使用
  • SubString(字段,1,end) - 从某个文本字段提取字符
  • LEN() - 返回某个文本字段的长度
  • ROUND() - 对某个数值字段进行指定小数位数的四舍五入

SELECT ROUND(column_name,decimals) FROM table_name;

  • NOW() - 返回当前的系统日期和时间
  • FORMAT() - 格式化某个字段的显示方式

16.SQL事物处理
begin transaction
Update
Set
Where
commit
begin transaction
Update
Set
Where
rollback 17.视图
视图:从SQL的角度视图和表示相同的 两者的区别在于表中存数据,而视图中保存的是select语句
视图的限制
1.定义视图时不能使用orderby
2.视图的限制--对视图进行更新
a.select子句中未使用distinct
b.from子句中只有一张表
c.未使用groupby
d.未使用having 18.集合运算
表的加法---union
包含重复行的集合运算--union all
选取表中的公共部分---intersect
记录的减法----except 19.窗口函数
<窗口函数> over (
partition by a.associates order by a.associates) as number,a.*
from A as a

专用窗口函数:rank函数 dense_rank函数 row_number函数
20.GROUPING函数
ROLLUP:实现分类小计
GROUPING超级分组函数
CUBE:数据积木
GROUPING SETS:取得期望的积木 20.流程控制
Begin end:用于将多个SQL语句组合为一个逻辑块
IF 选择判断结构
IF ELSE
CASE WHEN
While 循环结构 配合begin end:while begin break continue end
Rerurn :从查询过程中无条件退出,位于其后的语句均不会被执行
Goto :改变程序的执行的流程,使程序跳转到标识符指定的程序往下进行
Waitfor:指定触发器存储过程或事物执行的时间时间间隔或事件,还可以用来暂时停止程序的执行,直到所设定的等待时间已过才继续往下执行
declare @name char(20)
set @name='静怡'
waitfor delay'00:00:05'
print '我最爱的电影是'+@name21.常用命令
DBCC
DBCCCHECKALLOC
DBCC SHOWCONTIG
CHECKPOINT:用于检查当前工作的数据库中被更改过的数据页或日志页
DECLARE
PRINT
RAISEERROR
READTEXT
BACKUP
RESTORE:数据库还原
Select 除了查询外还可以给变量赋值
Set 给变量赋值
Shutdown

SQL 语句	        语法

AND / OR	SELECT column_name(s)
	FROM table_name
	WHERE condition
	AND|OR condition
ALTER TABLE	ALTER TABLE table_name 
	ADD column_name datatype
	or
	ALTER TABLE table_name 
	DROP COLUMN column_name
AS (alias)	SELECT column_name AS column_alias
	FROM table_name
	or
	SELECT column_name
	FROM table_name AS table_alias
BETWEEN	SELECT column_name(s)
	FROM table_name
	WHERE column_name
	BETWEEN value1 AND value2
CREATE DATABASE	CREATE DATABASE database_name
CREATE TABLE	CREATE TABLE table_name
	(
	column_name1 data_type,
	column_name2 data_type,
	column_name2 data_type,
	...
	)
CREATE INDEX	CREATE INDEX index_name
	ON table_name (column_name)
	or
	CREATE UNIQUE INDEX index_name
	ON table_name (column_name)
CREATE VIEW	CREATE VIEW view_name AS
	SELECT column_name(s)
	FROM table_name
	WHERE condition
DELETE	DELETE FROM table_name
	WHERE some_column=some_value
	or
	DELETE FROM table_name 
	(Note: Deletes the entire table!!)
	DELETE * FROM table_name 
	(Note: Deletes the entire table!!)
DROP DATABASE	DROP DATABASE database_name
DROP INDEX	DROP INDEX table_name.index_name (SQL Server)
	DROP INDEX index_name ON table_name (MS Access)
	DROP INDEX index_name (DB2/Oracle)
	ALTER TABLE table_name
	DROP INDEX index_name (MySQL)
DROP TABLE	DROP TABLE table_name
GROUP BY	SELECT column_name, aggregate_function(column_name)
	FROM table_name
	WHERE column_name operator value
	GROUP BY column_name
HAVING	SELECT column_name, aggregate_function(column_name)
	FROM table_name
	WHERE column_name operator value
	GROUP BY column_name
	HAVING aggregate_function(column_name) operator value
IN	SELECT column_name(s)
	FROM table_name
	WHERE column_name
	IN (value1,value2,..)
INSERT INTO	INSERT INTO table_name
	VALUES (value1, value2, value3,....)
	or
	INSERT INTO table_name
	(column1, column2, column3,...)
	VALUES (value1, value2, value3,....)
INNER JOIN	SELECT column_name(s)
	FROM table_name1
	INNER JOIN table_name2 
	ON table_name1.column_name=table_name2.column_name
LEFT JOIN	SELECT column_name(s)
	FROM table_name1
	LEFT JOIN table_name2 
	ON table_name1.column_name=table_name2.column_name
RIGHT JOIN	SELECT column_name(s)
	FROM table_name1
	RIGHT JOIN table_name2 
	ON table_name1.column_name=table_name2.column_name
FULL JOIN	SELECT column_name(s)
	FROM table_name1
	FULL JOIN table_name2 
	ON table_name1.column_name=table_name2.column_name
LIKE	SELECT column_name(s)
	FROM table_name
	WHERE column_name LIKE pattern
ORDER BY	SELECT column_name(s)
	FROM table_name
	ORDER BY column_name [ASC|DESC]
SELECT	SELECT column_name(s)
	FROM table_name
SELECT *	SELECT *
	FROM table_name
SELECT DISTINCT	SELECT DISTINCT column_name(s)
	FROM table_name
SELECT INTO	SELECT *
	INTO new_table_name [IN externaldatabase]
	FROM old_table_name
	or
	SELECT column_name(s)
	INTO new_table_name [IN externaldatabase]
	FROM old_table_name
SELECT TOP	SELECT TOP number|percent column_name(s)
	FROM table_name
TRUNCATE TABLE	TRUNCATE TABLE table_name
UNION	SELECT column_name(s) FROM table_name1
	UNION
	SELECT column_name(s) FROM table_name2
UNION ALL	SELECT column_name(s) FROM table_name1
	UNION ALL
	SELECT column_name(s) FROM table_name2
UPDATE	UPDATE table_name
	SET column1=value, column2=value,...
	WHERE some_column=some_value
WHERE	SELECT column_name(s)
	FROM table_name
	WHERE column_name operator value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值