SQL 基本语法
本文使用以下 RUNOOB 样本数据库中的 Websites 表进行学习
id | name | url | alexa | country |
---|---|---|---|---|
1 | 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 | https://www.facebook.com/ | 3 | USA |
Select 语句 (查询)
select column
基本语法 SELECT columnn1,clolumn2,... FROM TabelName;
SELECT name,country FROM Websites;
id | country |
---|---|
USA | |
淘宝 | CN |
菜鸟教程 | 4689 |
微博 | CN |
USA |
select *
基本语法 SELECT * FROM TabelName;
SELECT * FROM Websites;
id | name | url | alexa | country |
---|---|---|---|---|
1 | 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 | https://www.facebook.com/ | 3 | USA |
Select Distinct 语句 (去重)
获取列中的唯一值(即去除重复值),基本语法:
SELECT DISTINCT column_name,column_name FROM table_name;
SELECT DISTINCT country FROM Websites;
country |
---|
USA |
CN |
Where 子句 (条件)
用于提取那些满足指定条件的记录,基本语法:
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;`
SELECT * FROM Websites WHERE country='CN';
id | name | url | alexa | country |
---|---|---|---|---|
2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
4 | 微博 | http://weibo.com/ | 20 | CN |
WHERE 子句中的运算符
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
AND & OR 运算符 (逻辑)
用于基于一个以上的条件对记录进行过滤。
- 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
- 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
AND 运算符实例
SELECT * FROM Websites
WHERE country='CN'AND alexa > 50;
id | name | url | alexa | country |
---|---|---|---|---|
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
OR 运算符实例
SELECT * FROM Websites
WHERE country='USA' OR country='CN';
id | name | url | alexa | country |
---|---|---|---|---|
1 | 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 | https://www.facebook.com/ | 3 | USA |
结合 AND & OR
也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式)
SELECT * FROM Websites
WHERE alexa > 15 AND (country='CN' OR country='USA');
id | name | url | alexa | country |
---|---|---|---|---|
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
4 | 微博 | http://weibo.com/ | 20 | CN |
Order By 关键字 (排序)
- 用于对结果集按照一个列或者多个列进行排序
- 默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字
基本语法:
SELECT column_name, column_name
FROM table_name
ORDER BY column_name, column_name ASC|DESC;
ORDER BY 实例
SELECT * FROM Websites
ORDER BY alexa;
id | name | url | alexa | country |
---|---|---|---|---|
1 | https://www.google.cm/ | 1 | USA | |
5 | https://www.facebook.com/ | 3 | USA | |
2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
4 | 微博 | http://weibo.com/ | 20 | CN |
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
ORDER BY DESC 实例
SELECT * FROM Websites
ORDER BY alexa DESC;
id | name | url | alexa | country |
---|---|---|---|---|
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
4 | 微博 | http://weibo.com/ | 20 | CN |
2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
5 | https://www.facebook.com/ | 3 | USA | |
1 | https://www.google.cm/ | 1 | USA |
ORDER BY 多列
SELECT * FROM Websites
ORDER BY country,alexa;
id | name | url | alexa | country |
---|---|---|---|---|
2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
4 | 微博 | http://weibo.com/ | 20 | CN |
3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
1 | https://www.google.cm/ | 1 | USA | |
5 | https://www.facebook.com/ | 3 | USA |
Insert Into 语句 (插入)
用于向表中插入新记录,可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度','https://www.baidu.com/','4','CN');
id | name | url | alexa | country |
---|---|---|---|---|
1 | 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 | https://www.facebook.com/ | 3 | USA | |
6 | 百度 | https://www.baidu.com/ | 4 | CN |
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...);
INSERT INTO Websites (name, url, country)
VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');
id | name | url | alexa | country |
---|---|---|---|---|
1 | 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 | https://www.facebook.com/ | 3 | USA | |
6 | 百度 | https://www.baidu.com/ | 4 | CN |
7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
UPDATE 语句 (更新)
用于更新表中已存在的记录。基本语法:
UPDATE table_name
SET column1=value1, column2=value2,...
WHERE some_column=some_value;
UPDATE Websites
SET alexa='5000', country='USA'
WHERE name='菜鸟教程';
id | name | url | alexa | country |
---|---|---|---|---|
1 | 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 | https://www.facebook.com/ | 3 | USA |
Update 警告!
在更新记录时要格外小心!在上面的实例中,如果我们省略了 WHERE 子句,如下所示:
UPDATE Websites
SET alexa='5000', country='USA'
执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。
执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
DELETE 语句 (删除)
用于删除表中的行。
DELETE FROM table_name
WHERE some_column=some_value;
DELETE FROM Websites
WHERE name='Facebook' AND country='USA';
id | name | url | alexa | country |
---|---|---|---|---|
1 | 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 |