SQL语句

1 篇文章 0 订阅

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

存在着很多不同版本的 SQL 语言,但是为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)

sql语句对大小写不敏感

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据
  • SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
  • SQL 中最重要的 DDL 语句:
  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

select用法:

SELECT 列名称1, 列名称2,列名称3,...FROM 表名称(指定列)
SELECT * FROM 表名称(所有列)
在这里插入图片描述
获取lastName那一列这样写:
select lastName from Persons
在这里插入图片描述

distinct

SELECT DISTINCT 列名称 FROM 表名称
"Orders"表:

CompanyOrderNumber
IBM3532
W3School2356
Apple4698
W3School6953

SELECT DISTINCT company FROM orders

结果:

Company
IBM
W3School
Apple

现在,在结果集中,“W3School” 仅被列出了一次。

where

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
下面的运算符可在 WHERE 子句中使用:

操作符描述
=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式

**注释:**在某些版本的 SQL 中,操作符 <> 可以写为 !=。

"Persons" 表

LastNameFirstNameAddressCityYear
AdamsJohnOxford StreetLondon1970
BushGeorgeFifth AvenueNew York1975
CarterThomasChangan StreetBeijing1980
GatesBillXuanwumen10Beijing1985

如果只希望选取居住在城市 “Beijing” 中的人,我们需要向 SELECT 语句添加 WHERE 子句:
SELECT * FROM Persons WHERE City='Beijing'
而不是select City from person where city ='beijing'
结果:

LastNameFirstNameAddressCityYear
CarterThomasChangan StreetBeijing1980
GatesBillXuanwumen 10Beijing1985

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

AND & OR

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
"Persons" 表

LastNameFirstNameAddressCity
AdamsJohnOxford StreetLondon
BushGeorgeFifth AvenueNew York
CarterThomasChanganStreet Beijing
CarterWilliamXuanwumen 10Beijing

AND 运算符实例

使用 AND 来显示所有姓为 “Carter” 并且名为 “Thomas” 的人:
SELECT * FROM Persons WHERE FirstName='Thomas' ANDLastName=‘Carter’
结果:

LastNameFirstNameAddressCity
CarterThomasChangan StreetBeijing

OR 运算符实例

使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人:
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
结果:

LastNameFirstNameAddressCity
CarterThomasChangan StreetBeijing
CarterWilliamXuanwumen 10Beijing

ORDER BY

默认按升序排列,即1,2,3,4,5,…
若希望按降序排列值,需要用DESC关键字
"Orders"表:

CompanyOrderNumber
IBM3532
W3School2356
Apple4698
W3School6953

实例 1
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
结果:

CompanyOrderNumber
Apple4698
IBM3532
W3School6953
W3School2356

实例 2
以字母顺序显示公司名称(Company),并以数字顺序显示顺序(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company,OrderNumber
结果:

CompanyOrderNumber
Apple4698
IBM3532
W3School2356
W3School6953

实例 3
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
结果:

CompanyOrderNumber
W3School6953
W3School2356
IBM3532
Apple4698

实例 4
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
结果:

CompanyOrderNumber
W3School2356
W3School6953
IBM3532
Apple4698

**注意:**在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。

insert into

向表格中插入新的行
INSERT INTO 表名称 VALUES (值1, 值2,....) 所有列
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 指定列
在指定的列中插入数据
"Persons" 表:

LastNameFirstNameAddressCity
CarterThomasChanganStreetBeijing
GatesBillXuanwumen 10Beijing

SQL 语句:
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
结果:

LastNameFirstNameAddressCity
CarterThomasChanganStreet Beijing
GatesBillXuanwumen 10Beijing
WilsonChamps-Elysees

update

更新表中数据的值
UPDATE 表名称 SET 列名称 1= 新值1,列名称2=新值2,..... WHERE 列名称 = 某值
Person:

LastNameFirstNameAddressCity
GatesBillXuanwumen 10Beijing
WilsonChamps-Elysees

更新某一行中的若干列
我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
结果:

LastNameFirstNameAddressCity
GatesBillXuanwumen 10Beijing
WilsonFredZhongshan 23Nanjing

delete

删除表的行
DELETE FROM 表名称 WHERE 列名称 = 值
DELETE * FROM table_name 删除所有行,表结构还在
Person:

LastNameFirstNameAddressCity
GatesBillXuanwumen 10Beijing
WilsonFredZhongshan 23Nanjing

删除某行
“Fred Wilson” 会被删除:
DELETE FROM Person WHERE LastName = 'Wilson'
结果:

LastNameFirstNameAddress City
GatesBillXuanwumen 10

SELECT TOP, LIMIT, ROWNUM

TOP——SQL Server;
LIMIT——MySQL;
ROWNUM——Oracle;
用于规定要返回的记录的数目

Oracle: SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;

下面是选自 “Websites” 表的数据:
mysql> SELECT * FROM Websites;
±—±--------------±--------------------------±------±--------+
| id | name | url | alexa | country |
±—±--------------±--------------------------±------±--------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 5000 | USA |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |

select * from Websites where rownum<=3;选取前三行的记录

LIKE

操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

"Websites" 表
id | name | url | alexa | country |
±—±-------------±--------------------------±------±--------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |

SELECT * FROM Websites WHERE name LIKE 'G%';选取 name 以字母 “G” 开始的所有客户 Google
SELECT * FROM Websites WHERE name LIKE '%k';选取 name 以字母 “k” 结尾的所有客户Facebook
SELECT * FROM Websites WHERE name LIKE '%oo%';选取 name 包含模式 “oo” 的所有客户Google

  • ‘%a’ //以a结尾的数据
  • ‘a%’ //以a开头的数据
  • ‘%a%’ //含有a的数据
  • a’ //三位且中间字母是a的
  • ‘_a’ //两位且结尾字母是a的
  • ‘a_’ //两位且开头字母是a的

通配符

%替代 0 个或多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]或[!charlist]不在字符列中的任何单一字符

IN

IN 操作符允许您在 WHERE 子句中规定多个值
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
"Websites" 表
id | name | url | alexa | country |
±—±-------------±--------------------------±------±--------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |

SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
选取 name 为 “Google” 或 “菜鸟教程” 的所有网站
IN可以规定多个值,=规定一个值

BETWEEN 和 NOT BETWEEN

选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;

“Websites” 表
id | name | url | alexa | country |
±—±-------------±--------------------------±------±--------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |

SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND NOT country IN ('USA', 'IND');选取alexa介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站
在这里插入图片描述
SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20;选取Alexa不在1到20的所有记录

在这里插入图片描述
SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND NOT country IN ('USA', 'IND');选取alexa介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站
在这里插入图片描述
"access_log"表
mysql> SELECT * FROM access_log;
±----±--------±------±-----------+
| aid | site_id | count | date |
±----±--------±------±-----------+
| 1 | 1 | 45 | 2016-05-10 |
| 2 | 3 | 100 | 2016-05-13 |
| 3 | 1 | 230 | 2016-05-14 |
| 4 | 2 | 10 | 2016-05-14 |
| 5 | 5 | 205 | 2016-05-14 |
| 6 | 4 | 13 | 2016-05-15 |
| 7 | 3 | 220 | 2016-05-15 |
| 8 | 5 | 545 | 2016-05-16 |
| 9 | 3 | 201 | 2016-05-17 |

SELECT * FROM access_log WHERE date BETWEEN '2016-05-10' AND '2016-05-14';
选取 date 介于 ‘2016-05-10’ 和 ‘2016-05-14’ 之间的所有访问记录:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值