SQL教程-关于SELECT的高级语法

一、TOP/LIMIT 取值第几行到第几行

#SQL Server / MS Access 语法
SELECT TOP 具体的行数|数据集的百分比 字段1, 字段2, ... FROM 数据表名

#MySQL 语法
SELECT 字段1, 字段2, ... FROM 数据表名 LIMIT 具体的行数

二、LIKE条件查询模糊或精准查询

使用 % 通配符找出所有名称以 "张" 开头的数据【%替代 0 个或多个字符】

SELECT * FROM 数据表名 WHERE 字段1 LIKE '张%'

使用 % 通配符找出所有名称以 "张" 结尾的数据

SELECT * FROM 数据表名 WHERE 字段1 LIKE '%张'

使用% 找出所有名称包含 "张三" 的数据【模糊搜索】

SELECT * FROM 数据表名 WHERE 字段1 LIKE '%张三%'

使用 _ 通配符找出所有名称以第二个字符为 "三" 的数据【_替代一个字符】

SELECT * FROM 数据表名 WHERE 字段1 LIKE '_三%'

使用REGEXP找出 所有以 A 到 H 字母开头的数据

SELECT * FROM 数据表名 WHERE 字段1 REGEXP '^[A-H]'

使用REGEXP找出 所有不以 A 到 H 字母开头的数据

SELECT * FROM 数据表名 WHERE 字段1 REGEXP '^[^A-H]'

或者

SELECT * FROM 数据表名 WHERE 字段1 REGEXP '^[!A-H]'

三、IN 在某些范围之间

查询字段1=值1和字段1=值2的所有数据

SELECT 字段1, 字段2, ... FROM 数据表名 WHERE 字段1 IN (值1, 值2, ...)

四、BETWEEN...AND... 在...和...之间

查询在两个值之间的数据范围内的所有数据

【注意】

                字符型: BETWEEN 'A' AND 'H'

                日期型: BETWEEN '2025-01-01' AND '2026-01-01'

                数字型: BETWEEN 1 AND 20

SELECT * FROM 数据表名 WHERE 字段1 BETWEEN 范围的起始值 AND 范围的结束值

查询不在两个值之间的数据范围内的所有数据

SELECT * FROM 数据表名 WHERE 字段1 NOT BETWEEN 范围的起始值 AND 范围的结束值

 查询字段1在两个值之间的数据范围内的所有数据并且字段2的值排除了张和王的所有数据

SELECT * FROM 数据表名 
WHERE (字段1 NOT BETWEEN 范围的起始值 AND 范围的结束值) 
AND 字段2 NOT IN('张','王')

五、AS 别名

#数据表的别名
SELECT * FROM 数据表名 AS 别名示例stu

#数据表的字段别名
【单个】
SELECT 字段1 AS 别名示例123 FROM 数据表名

【多个】
SELECT 字段1 AS 别名示例111,字段2 AS 别名示例222 FROM 数据表名

【结合】
SELECT 字段1, CONCAT(字段2, ', ', 字段3, ', ', 字段4) AS 别名示例new FROM 数据表名

【两个表A和B表】
SELECT A.字段1, A.字段2, B.字段1, B.字段2 
FROM A表 AS 别名示例A , B表 AS 别名示例B
WHERE A.字段1=B.字段2 AND A.字段2="条件值";

六、JOIN 连接

INNER JOIN 返回两个表中满足连接条件的记录(交集)/如果表中有至少一个匹配,则返回行

SELECT 要显示的字段或字段列表 
FROM 数据表名1 
JOIN 数据表名2 ON 数据表名1.字段=数据表名2.字段

或者

SELECT 要显示的字段或字段列表 
FROM 数据表名1 
INNER JOIN 数据表名2 ON 数据表名1.字段=数据表名2.字段

LEFT JOIN 返回左表中的所有记录,即使右表中没有匹配的记录(保留左表)

SELECT 要显示的字段或字段列表 
FROM 数据表名1 
LEFT JOIN 数据表名2 ON 数据表名1.字段=数据表名2.字段

或者

SELECT 要显示的字段或字段列表 
FROM 数据表名1 
LEFT OUTER JOIN 数据表名2 ON 数据表名1.字段=数据表名2.字段

RIGHT JOIN 返回右表中的所有记录,即使左表中没有匹配的记录(保留右表)

SELECT 要显示的字段或字段列表 
FROM 数据表名1 
RIGHT JOIN 数据表名2 ON 数据表名1.字段=数据表名2.字段

或者

SELECT 要显示的字段或字段列表 
FROM 数据表名1 
RIGHT OUTER JOIN 数据表名2 ON 数据表名1.字段=数据表名2.字段

FULL OUTER JOIN 返回两个表的并集,包含匹配和不匹配的记录

SELECT 要显示的字段或字段列表 
FROM 数据表名1 
FULL OUTER JOIN 数据表名2 ON 数据表名1.字段=数据表名2.字段

七、UNION 操作符合并两个或多个 SELECT 语句的结果并将结果集组合成一个结果集

【注意】使用 UNION 时,每个 SELECT 语句必须具有相同数量的字段,且对应字段的数据类型必须类似,请使用 UNION ALL 来选取重复的数据!默认UNION是选取不同的数据

SELECT 字段1, 字段2, ... FROM 数据表1
UNION
SELECT 字段1, 字段2, ... FROM 数据表2;

SELECT INTO从一个表复制信息到另一个表

【注意】也可以根据情况选择条件选择部分的数据到新表

                MySQL 数据库不支持 SELECT ... INTO 语句,但支持​ INSERT INTO ... SELECT   。

SELECT * INTO 新表 FROM 旧表

 INSERT INTO SELECT从一个表复制数据,然后把数据插入到一个已存在的表中。

【注意】目标表中任何已存在的行都不会受影响。

我们可以从一个表中复制所有的字段插入到另一个已存在的表中:

INSERT INTO 新表 SELECT * FROM 旧表

或者我们可以只复制指定的字段插入到另一个已存在的表中:

INSERT INTO 新表 (新表指定的字段列表) SELECT (旧表指定的字段列表) FROM 旧表

你可能感兴趣的:(SQL,sql,数据库)