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' ANDLastName=‘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