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"表:
Company | OrderNumber |
---|---|
IBM | 3532 |
W3School | 2356 |
Apple | 4698 |
W3School | 6953 |
SELECT DISTINCT company FROM orders
结果:
Company |
---|
IBM |
W3School |
Apple |
现在,在结果集中,“W3School” 仅被列出了一次。
where
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
下面的运算符可在 WHERE 子句中使用:
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
**注释:**在某些版本的 SQL 中,操作符 <> 可以写为 !=。
"Persons" 表
LastName | FirstName | Address | City | Year |
---|---|---|---|---|
Adams | John | Oxford Street | London | 1970 |
Bush | George | Fifth Avenue | New York | 1975 |
Carter | Thomas | Changan Street | Beijing | 1980 |
Gates | Bill | Xuanwumen10 | Beijing | 1985 |
如果只希望选取居住在城市 “Beijing” 中的人,我们需要向 SELECT 语句添加 WHERE 子句:SELECT * FROM Persons WHERE City='Beijing'
而不是select City from person where city ='beijing'
结果:
LastName | FirstName | Address | City | Year |
---|---|---|---|---|
Carter | Thomas | Changan Street | Beijing | 1980 |
Gates | Bill | Xuanwumen 10 | Beijing | 1985 |
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
AND & OR
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
"Persons" 表
LastName | FirstName | Address | City |
---|---|---|---|
Adams | John | Oxford Street | London |
Bush | George | Fifth Avenue | New York |
Carter | Thomas | Changan | Street Beijing |
Carter | William | Xuanwumen 10 | Beijing |
AND 运算符实例
使用 AND 来显示所有姓为 “Carter” 并且名为 “Thomas” 的人:SELECT * FROM Persons WHERE FirstName='Thomas' AND
LastName=‘Carter’
结果:
LastName | FirstName | Address | City |
---|---|---|---|
Carter | Thomas | Changan Street | Beijing |
OR 运算符实例
使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人:SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
结果:
LastName | FirstName | Address | City |
---|---|---|---|
Carter | Thomas | Changan Street | Beijing |
Carter | William | Xuanwumen 10 | Beijing |
ORDER BY
默认按升序排列,即1,2,3,4,5,…
若希望按降序排列值,需要用DESC关键字
"Orders"表:
Company | OrderNumber |
---|---|
IBM | 3532 |
W3School | 2356 |
Apple | 4698 |
W3School | 6953 |
实例 1
以字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company
结果:
Company | OrderNumber |
---|---|
Apple | 4698 |
IBM | 3532 |
W3School | 6953 |
W3School | 2356 |
实例 2
以字母顺序显示公司名称(Company),并以数字顺序显示顺序(OrderNumber):SELECT Company, OrderNumber FROM Orders ORDER BY Company,
OrderNumber
结果:
Company | OrderNumber |
---|---|
Apple | 4698 |
IBM | 3532 |
W3School | 2356 |
W3School | 6953 |
实例 3
以逆字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
结果:
Company | OrderNumber |
---|---|
W3School | 6953 |
W3School | 2356 |
IBM | 3532 |
Apple | 4698 |
实例 4
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
结果:
Company | OrderNumber |
---|---|
W3School | 2356 |
W3School | 6953 |
IBM | 3532 |
Apple | 4698 |
**注意:**在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
insert into
向表格中插入新的行INSERT INTO 表名称 VALUES (值1, 值2,....) 所有列
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 指定列
在指定的列中插入数据
"Persons" 表:
LastName | FirstName | Address | City |
---|---|---|---|
Carter | Thomas | ChanganStreet | Beijing |
Gates | Bill | Xuanwumen 10 | Beijing |
SQL 语句:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
结果:
LastName | FirstName | Address | City |
---|---|---|---|
Carter | Thomas | Changan | Street Beijing |
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Champs-Elysees |
update
更新表中数据的值UPDATE 表名称 SET 列名称 1= 新值1,列名称2=新值2,..... WHERE 列名称 = 某值
Person:
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Champs-Elysees |
更新某一行中的若干列
我们会修改地址(address),并添加城市名称(city):UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
结果:
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Fred | Zhongshan 23 | Nanjing |
delete
删除表的行DELETE FROM 表名称 WHERE 列名称 = 值
DELETE * FROM table_name 删除所有行,表结构还在
Person:
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Fred | Zhongshan 23 | Nanjing |
删除某行
“Fred Wilson” 会被删除:DELETE FROM Person WHERE LastName = 'Wilson'
结果:
LastName | FirstName | Address City |
---|---|---|
Gates | Bill | Xuanwumen 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” 开始的所有客户 GoogleSELECT * FROM Websites WHERE name LIKE '%k';
选取 name 以字母 “k” 结尾的所有客户FacebookSELECT * 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’ 之间的所有访问记录:
来源:CSDN
作者:Jason秀啊
链接:https://blog.csdn.net/qq_44704740/article/details/103611203