SQL语句之高级使用
1、select top
1 | SELECT TOP 50 PERCENT * FROM Websites; |
Oracle语法:
1 2 3 | SELECT * FROM Persons WHERE ROWNUM <=5; |
MySQL语法:
1 2 3 | SELECT * FROM Persons LIMIT 5; |
2、like
语法:
1 2 3 | SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern; |
3、SQL通配符
1 2 | 1、通配符可用于替代字符串中的任何其他字符。 2、在 SQL 中,通配符与 SQL LIKE 操作符一起使用 |
例:
1 2 | SELECT * FROM Websites WHERE name REGEXP '^[GFs]' ; |
4、in
语法:
1 2 3 | SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...); |
例:
1 2 | SELECT * FROM Websites WHERE name IN ( 'Google' , '菜鸟教程' ); |
in和=对比:
1 2 3 4 5 6 7 8 | IN SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);<br> = SELECT column_name(s) FROM table_name WHERE column_name=value1; |
5、between
1 2 3 | SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2; |
如需显示不在上面实例范围内的网站,使用 NOT BETWEEN:
1 2 | SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20; |
6、SQL别名
语法:
1 2 | SELECT column_name AS alias_name FROM table_me; |
例:
1 2 3 4 5 6 7 8 | SELECT name AS n, country AS c FROM Websites; 把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名: SELECT name , CONCAT(url, ', ' , alexa, ', ' , country) AS site_info FROM Websites; |
表的SQL别名语法:
1 2 | SELECT column_name(s) FROM table_name AS alias_name; |
例:
1 2 3 | SELECT w. name , w.url, a. count , a. date FROM Websites AS w, access_log AS a WHERE a.site_id=w.id and w. name = "菜鸟教程" ; |
7、join
作用:SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
(1)inner join(也可以缩写成join)——内联接
求交集,如果表中有至少一个匹配,则返回行
1 2 3 4 | SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name; |
或
1 2 3 4 | SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name; |
(2)left join——左联接
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
1 2 3 4 | SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name; |
或
1 2 3 4 | SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2 ON table1.column_name=table2.column_name; |
(3)right join——右联接
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
1 2 3 4 | SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name; |
或
1 2 3 4 | SELECT column_name(s) FROM table1 RIGHT OUTER JOIN table2 ON table1.column_name=table2.column_name; |
(4)full join(也叫作full outer join)——全联接
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
1 2 3 4 | SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name; |
8、union
1 2 3 | SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; |
union all语法:
1 2 3 4 5 | SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; 注意:默认地, UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL 。 |
9、select into
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
1 2 3 4 5 6 7 8 9 | SELECT * INTO newtable [ IN externaldb] FROM table1; 或: SELECT column_name(s) INTO newtable [ IN externaldb] FROM table1; |
下面的语句可以复制表结构和表数据:
1 2 3 | CREATE TABLE 新表 AS SELECT * FROM 旧表; 或: CREATE TABLE 新表 SELECT * FROM 旧表; |
10、insert into select
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。 目标表中任何已存在的行都不会受影响。
语法:
1 2 3 4 5 6 | INSERT INTO table2 SELECT * FROM table1;<br><br> ---------------------------------- INSERT INTO table2 (column_name(s)) SELECT column_name(s) FROM table1; |
扩展:
1 | create table table_name_new as select * from table_name_old |
1 2 3 | create table table_name_new as select * from table_name_old where 1=2; 或者: create table table_name_new like table_name_old |
1 2 3 4 | 如果两个表结构一样: insert into table_name_new select * from table_name_old 如果两个表结构不一样: insert into table_name_new(column1,column2...) select column1,column2... from table_name_old |
11、创建数据库语句
1 | CREATE DATABASE dbname; |
12、创建表语句
1 2 3 4 5 6 7 | CREATE TABLE table_name ( column_name1 data_type( size ), column_name2 data_type( size ), column_name3 data_type( size ), .... ); |
13、SQL约束
1 2 3 4 5 6 7 | CREATE TABLE table_name ( column_name1 data_type( size ) constraint_name, column_name2 data_type( size ) constraint_name, column_name3 data_type( size ) constraint_name, .... ); |
(1) not null
1 2 3 4 5 6 7 8 | 强制 "ID" 列、 "LastName" 列以及 "FirstName" 列不接受 NULL 值: CREATE TABLE Persons ( ID int NOT NULL , LastName varchar (255) NOT NULL , FirstName varchar (255) NOT NULL , Age int ); 在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示: ALTER TABLE Persons MODIFY Age int NOT NULL ; 在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束如下所示: ALTER TABLE Persons MODIFY Age int NULL ; |
(2)unique
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 在 "Persons" 表创建时在 "P_Id" 列上创建 UNIQUE 约束: MySQL语法: CREATE TABLE Persons ( P_Id int NOT NULL , LastName varchar (255) NOT NULL , FirstName varchar (255), Address varchar (255), City varchar (255), UNIQUE (P_Id) ) SQL Server / Oracle / MS Access语法: CREATE TABLE Persons ( P_Id int NOT NULL UNIQUE , LastName varchar (255) NOT NULL , FirstName varchar (255), Address varchar (255), City varchar (255) ) |
1 2 3 4 5 6 7 8 9 10 | 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,使用下面的 SQL 语法: CREATE TABLE Persons ( P_Id int NOT NULL , LastName varchar (255) NOT NULL , FirstName varchar (255), Address varchar (255), City varchar (255), CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) ) |
1 2 3 4 5 6 7 8 9 10 | 当表已被创建时,如需在 "P_Id" 列创建 UNIQUE 约束,使用下面的 SQL: MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons ADD UNIQUE (P_Id); 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束: ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) |
1 2 3 4 5 6 7 8 9 10 11 | 如需撤销 UNIQUE 约束,使用下面的 SQL: MySQL: ALTER TABLE Persons DROP INDEX uc_PersonID SQL Server / Oracle / MS Access: ALTER TABLE Persons DROP CONSTRAINT uc_PersonID |
(3)primary key
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | CREATE TABLE 时的 SQL PRIMARY KEY 约束:<br> MySQL: CREATE TABLE Persons ( P_Id int NOT NULL , LastName varchar (255) NOT NULL , FirstName varchar (255), Address varchar (255), City varchar (255), PRIMARY KEY (P_Id) ) SQL Server / Oracle / MS Access: CREATE TABLE Persons ( P_Id int NOT NULL PRIMARY KEY , LastName varchar (255) NOT NULL , FirstName varchar (255), Address varchar (255), City varchar (255) )<br> 如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法: CREATE TABLE Persons ( P_Id int NOT NULL , LastName varchar (255) NOT NULL , FirstName varchar (255), Address varchar (255), City varchar (255), CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) ) |
1 2 3 4 5 6 7 8 9 10 11 | ALTER TABLE 时的 SQL PRIMARY KEY 约束 MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons ADD PRIMARY KEY (P_Id) ------------------------------------------------------------------------------------- 如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法: MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) |
1 2 3 4 5 6 7 8 9 10 11 12 | 撤销 PRIMARY KEY 约束 MySQL: ALTER TABLE Persons DROP PRIMARY KEY SQL Server / Oracle / MS Access: ALTER TABLE Persons DROP CONSTRAINT pk_PersonID |
(4)foreign key
一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
(5)check约束
14、创建索引
create index
1 2 3 4 | 在表上创建一个简单的索引。允许使用重复的值: CREATE INDEX index_name ON table_name (column_name) |
1 2 3 | 表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。Creates a unique index on a table . Duplicate values are not allowed:<br> CREATE UNIQUE INDEX index_name ON table_name (column_name) |
15、删除索引、表以及数据库
16、alter
17、auto increment字段

18、视图
1 2 3 4 | CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
(2)创建视图示例:
1 2 3 4 5 6 7 8 | CREATE VIEW [ Current Product List] AS SELECT ProductID,ProductName FROM Products WHERE Discontinued= No 我们可以像这样查询上面这个视图: SELECT * FROM [ Current Product List] |
(3)更新视图
语法:
1 2 3 4 | CREATE OR REPLACE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
1 2 3 4 5 | 向 "Current Product List" 视图添加 "Category" 列。将通过下列 SQL 更新视图: CREATE VIEW [ Current Product List] AS SELECT ProductID,ProductName,Category FROM Products WHERE Discontinued= No |
(4)删除视图
语法:
1 | DROP VIEW view_name |
19、DATE()函数
20、NULL值
21、NULL函数
22、通用数据类型

23、用于各种数据库的数据类型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现