SQL,指结构化查询语言,全称是 Structured Query Language。

本文详细介绍了SQL,即结构化查询语言,包括SELECT、UPDATE、DELETE、INSERT INTO等核心命令,以及如何使用WHERE、AND、OR进行条件筛选,ORDER BY进行排序,还有JOIN、UNION操作和数据插入与备份的方法,帮助初学者全面理解SQL的基本操作。

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

SQL 是用于访问和处理数据库的标准的计算机语言。

************************************************************************************************************************************************************************

一些最重要的sql命令:

  • SELECT - 从数据库中提取数据
  • UPDATE - 更新数据库中的数据
  • DELETE - 从数据库中删除数据
  • INSERT INTO - 向数据库中插入新数据
  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

****************************************************************************************

select语句:

SELECT * FROM Websites;-查询所有记录

SELECTname,countryFROMWebsites;-查询指定字段

SELECTDISTINCTcountryFROMWebsites;-去掉字段里的重复值


where语句:  (支持运算符:=,>,<,>=,<=,begin,like,in等)

SELECT * FROMWebsitesWHEREcountry='CN';-使用单引号来环绕文本值

SELECT * FROMWebsitesWHEREid=1;-如果是数值字段,请不要使用引号

and和or语句:

SELECT * FROMWebsitesWHEREcountry='CN'ANDalexa > 50;

SELECT * FROMWebsitesWHEREcountry='USA'ORcountry='CN';

SELECT * FROMWebsitesWHEREalexa > 15AND(country='CN'ORcountry='USA');


order by语句:

SELECT * FROMWebsitesORDERBYalexa;-按照字段排序(默认为升序)

SELECT * FROMWebsitesORDERBYalexaDESC;-按照字段降序排序

SELECT * FROMWebsitesORDERBYcountry,alexa;-按照多列排序,先country后alexa


insert into 语句:

INSERTINTOWebsites(name,url,alexa,country)VALUES('百度','https://www.baidu.com/','4','CN');


update 语句:

UPDATEWebsitesSETalexa='5000',country='USA'WHEREname='菜鸟教程';


delete 语句:

DELETEFROMWebsitesWHEREname='百度'ANDcountry='CN';-删除某条记录

DELETE * FROM table_name;-删除所有记录


****************************************************************************************

select top 语句:(并非所有的数据库系统都支持 SELECT TOP 子句

sql server语法:SELECTTOP50PERCENT * FROMWebsites;-选取前面 50% 的记录

SELECTTOP50FROMWebsites;-选取前面50条将记录

mysql语法:     SELECT * FROMWebsitesLIMIT2;-选取前面两条记录

oracle语法:     SELECT * FROMWebsitesWHERE ROWNUM <= 5;-选取前面5条数据


like语句/通配符:

SELECT * FROM Websites WHERE name LIKE 'G%';-选取 name 字段以字母 "G" 开始的所有客户

SELECT * FROM Websites WHERE name NOT LIKE '%oo%';-选取 name 不包含模式 "oo" 的所有客户

in 语句:

SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');-选取 name 为 "Google" 或 "菜鸟教程" 的所有网站

between语句:

SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20;

SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20;

SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND NOT country IN ('USA', 'IND');

          -选取alexa介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站

别名:

SELECT name AS n, country AS c FROM Websites;-指定了两个别名,一个是 name 列的别名,一个是 country 列的别名

SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites;

          - 把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名

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="菜鸟教程";

                           - 使用 "Websites" 和 "access_log" 表,并分别为它们指定表别名 "w" 和 "a"(通过使用别名让 SQL 更简短)

****************************************************************************************

jion 连接:  (JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

INNER JOIN 与 JOIN 是相同的

SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;

LEFT JOIN   (在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。

关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

RIGHT JOIN   (在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。

关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;


****************************************************************************************

UNION 操作符  合并两个或多个 SELECT 语句的结果

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;


SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

****************************************************************************************

SELECT INTO 语句:从一个表复制数据,然后把数据插入到另一个新表中。

SELECT *
INTO WebsitesBackup2016
FROM Websites;  -复制所有的列插入到新表中

SELECT name, url
INTO WebsitesBackup2016
FROM Websites;  -只复制一些列插入到新表中


SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country='CN';  -只复制中国的网站插入到新表中

注:SELECT INTO 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 WHERE 子句即可,如下:

SELECT *
INTO newtable
FROM table1
WHERE 1=0;


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

INSERT INTO table2
SELECT * FROM table1;  -从一个表中复制所有的列插入到另一个已存在的表中


INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;  -复制 "apps" 中的数据插入到 "Websites" 中

****************************************************************************************

在 SQL 中,我们有如下约束:

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

-表创建时在 "P_Id" 列上创建 UNIQUE 约束:

mysql语法:

CREATE TABLE Persons
(
P_Id int NOT NULL,
UNIQUE (P_Id)
)  

sql server/oracle语法:

CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
)

mysql/sql server/oracle语法:

ALTER TABLE Persons
ADD UNIQUE (P_Id)

****************************************************************************************

CREATE INDEX 语句:用于在表中创建索引

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

CREATE INDEX index_name ON table_name (column_name)  -在表上创建一个简单的索引。允许使用重复的值

CREATE UNIQUE INDEX index_name ON table_name (column_name)  -在表上创建一个唯一的索引。不允许使用重复的值

CREATE INDEX PIndex ON Persons (LastName)  -在 "Persons" 表的 "LastName" 列上创建一个名为 "PIndex" 的索引


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值