SQL学习教程
- 参考引用资料:
- 基础符号用法:
- $符号
- SQL 简介
- SQL 语法
- SQL SELECT 语句
- SQL SELECT DISTINCT 语句
- SQL WHERE 子句
- SQL AND & OR 运算符
- SQL ORDER BY 关键字
- SQL INSERT INTO 语句
- SQL UPDATE 语句
- SQL DELETE 语句
- 补充:SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。
参考引用资料:
菜鸟教程-SQL
基础符号用法:
$符号
$
表示字符窜的拼接;比如:
SELECT * FROM Users WHERE Username='$username' ;
当$username=myname
那么当进行sql查询的时候,
sql就变成了SELECT * FROM Users WHERE Username='myname' ;
SQL 简介
- SQL 是什么?
SQL,指结构化查询语言,全称是 Structured Query Language。
SQL 让您可以访问和处理数据库。 - SQL 能做什么?
SQL 面向数据库执行查询
SQL 可从数据库取回数据
SQL 可在数据库中插入新的记录
SQL 可更新数据库中的数据
SQL 可从数据库删除记录
SQL 可创建新数据库
SQL 可在数据库中创建新表
SQL 可在数据库中创建存储过程
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限 - SQL 是一种标准 - 但是仍然存在着多种不同版本的 SQL 语言。然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。
除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的专有扩展! - 在您的网站中使用 SQL
要创建一个显示数据库中数据的网站,您需要:
RDBMS 数据库程序(比如 MS Access、SQL Server、MySQL)
使用服务器端脚本语言,比如 PHP 或 ASP
使用 SQL 来获取您想要的数据
使用 HTML / CSS - RDBMS
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
SQL 语法
- 数据库表
一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:“Websites”),表包含带有数据的记录(行)。
在本教程中,我们在 MySQL 的 RUNOOB 数据库中创建了 Websites 表,用于存储网站记录。
我们可以通过以下命令查看 “Websites” 表的数据:
mysql> use RUNOOB;
Database changed
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.01 sec)
- 解析
use RUNOOB; 命令用于选择数据库。
set names utf8; 命令用于设置使用的字符集。
SELECT * FROM Websites; 读取数据表的信息。
上面的表包含五条记录(每一条对应一个网站信息)和5个列(id、name、url、alexa 和country)。
注意:SQL 对大小写不敏感:SELECT 与 select 是相同的。 - SQL 语句后面的分号?
某些数据库系统要求在每条 SQL 语句的末端使用分号。
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。 - 一些最重要的 SQL 命令
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
SQL SELECT 语句
用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
注意:只会返回特定列,不会返回整行的值。但select*会返回整个表的值。
- SQL SELECT 语法
SELECT column_name,column_name
FROM table_name;
与
SELECT * FROM table_name;//*表示提取全部列,最后附加一句话:5 rows in set (0.00)sec
- 样例
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- SELECT Column 实例
SELECT name,country FROM Websites;
输出结果为:
- 结果集中的导航
大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。其讲解不在本教程之列。
SQL SELECT DISTINCT 语句
用于返回唯一不同的值。在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
注意:SELECT的加强版,只会返回特定列不重复的值,不会返回整行的值。
DISTINCT 关键词用于返回唯一不同的值。
- SQL SELECT DISTINCT 语法
SELECT DISTINCT column_name,column_name
FROM table_name;
- 样例:
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- SELECT DISTINCT 实例
下面的 SQL 语句仅从 “Websites” 表的 “country” 列中选取唯一不同的值,也就是去掉 “country” 列重复值,可以帮助我们快速找到大的分类情况,数据的种类数:
SELECT DISTINCT country FROM Websites;
结果
SQL WHERE 子句
WHERE 子句用于过滤记录。用于提取那些满足特定条件的数据。注意:会显示满足条件的数据所在的整行。
- SQL WHERE 语法
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
- 样例:
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- 实例:
下面的 SQL 语句从 “Websites” 表中选取国家为 “CN” 的所有网站:
SELECT * FROM Websites WHERE country='CN';
- 结果:
- 文本字段与数值字段使用比价
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
在上个实例中 ‘CN’ 文本字段使用了单引号。
如果是数值字段,请不要使用引号。
SQL AND & OR 运算符
AND & OR 运算符用于基于一个以上的条件对记录进行过滤
- SQL AND & OR 运算符
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。(这也就解释了为什么使用or运算必然能进行SQL查询的原因,用or 1=1
) - 样例
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- AND 运算符实例
下面的 SQL 语句从 “Websites” 表中选取国家为 “CN” 且alexa排名大于 “50” 的所有网站:
SELECT * FROM Websites
WHERE country='CN'
AND alexa > 50;
- 结果
- OR 运算符实例
下面的 SQL 语句从 “Websites” 表中选取国家为 “USA” 或者 “CN” 的所有客户:
SELECT * FROM Websites
WHERE country='USA'
OR country='CN';
- 结果
- 结合 AND & OR
您也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式)。
下面的 SQL 语句从 “Websites” 表中选取 alexa 排名大于 “15” 且国家为 “CN” 或 “USA” 的所有网站:
SELECT * FROM Websites
WHERE alexa > 15
AND (country='CN' OR country='USA');
- 结果
SQL ORDER BY 关键字
ORDER BY 关键字用于对结果集进行排序。
- SQL ORDER BY 关键字
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。 - SQL ORDER BY 语法
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
- 样例:
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- 下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “alexa” 列排序:
SELECT * FROM Websites
ORDER BY alexa;
- 结果:
- ORDER BY DESC 实例
下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “alexa” 列降序排序:
SELECT * FROM Websites
ORDER BY alexa DESC;
- 结果
- ORDER BY 多列
下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “country” 和 “alexa” 列排序:
SELECT * FROM Websites
ORDER BY country,alexa;
-
结果:
-
注意0:
DESC是指:descending order,降序排列
ASC是指:ascending order,升序排列 -
注意1:
ORDER BY 多列的时候,先按照第一个column name排序,在按照第二个column name排序;如上述教程最后一个例子:
1)、先将country值这一列排序,同为CN的排前面,同属USA的排后面;
2)、然后在同属CN的这些多行数据中,再根据alexa值的大小排列。
3)、ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC。 -
注意2:
ORDER BY 多列的时候,eg:
order by A,B 这个时候都是默认按升序排列
order by A desc,B 这个时候 A 降序,B 升序排列
order by A ,B desc 这个时候 A 升序,B 降序排列
即 desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。
SQL INSERT INTO 语句
INSERT INTO 语句用于向表中插入新记录。
- SQL INSERT INTO 语法
INSERT INTO 语句可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
- 实例:
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- INSERT INTO 实例
假设我们要向 “Websites” 表中插入一个新行。
我们可以使用下面的 SQL 语句:
INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度','https://www.baidu/','4','CN');
-
结果:
-
在指定的列插入数据
下面的 SQL 语句将插入一个新行,但是只在 “name”、“url” 和 “country” 列插入数据(id 字段会自动更新):
INSERT INTO Websites (name, url, country)
VALUES ('stackoverflow', 'http://stackoverflow/', 'IND');
- 结果:
- 注意0:
id 列是自动更新的,表中的每条记录都有一个唯一的数字,不需要插入。未插入的数据默认为0. - 注意1:
没有指定要插入数据的列名的形式需要列出插入行的每一列数据:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
- 注意2:
insert into select 和select into from 的区别
insert into scorebak select * from socre where neza='neza' //--插入一行,要求表scorebak 必须存在
select * into scorebak from score where neza='neza' //--也是插入一行,要求表scorebak 不存在
SQL UPDATE 语句
UPDATE 语句用于更新表中的记录。更新表中已存在的记录。
- SQL UPDATE 语法
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
Update 警告!
WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
- 样例:
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- SQL UPDATE 实例
我们要把 “菜鸟教程” 的 alexa 排名更新为 5000,country 改为 USA。
我们使用下面的 SQL 语句:
UPDATE Websites
SET alexa='5000', country='USA'
WHERE name='菜鸟教程';
- 结果:
- 注:
执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
set sql_safe_updates=1;
表示开启该参数
SQL DELETE 语句
DELETE 语句用于删除表中的记录。用于删除表中的行。
- SQL DELETE 语法
DELETE FROM table_name
WHERE some_column=some_value;
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
- 样例:
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob/ | 4689 | CN |
| 4 | 微博 | http://weibo/ | 20 | CN |
| 5 | Facebook | https://www.facebook/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
- SQL DELETE 实例
假设我们要从 “Websites” 表中删除网站名为 “Facebook” 且国家为 USA 的网站。
我们使用下面的 SQL 语句:
DELETE FROM Websites
WHERE name='Facebook' AND country='USA';
- 结果:
- 删除所有数据
您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
DELETE FROM table_name;
或
DELETE * FROM table_name;
注释:在删除记录时要格外小心!因为您不能重来! - 注意:
如果设置了sql_safe_updates=1
,delete 语句必须满足如下条件之一才能执行成功。
- 使用 where 子句, 并且 where 子句中列必须为 prefix 索引列。
- 同时使用 where 子句和 limit (此时 where 子句中列可以不是索引列)。
补充:SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。
- DROP:
DROP test;
删除表test,并释放空间,将test删除的一干二净。 - TRUNCATE:
TRUNCATE test;
删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。 - DELETE:
1、删除指定数据
删除表test中年龄等于30的且国家为US的数据
DELETE FROM test WHERE age=30 AND country=‘US’;
2、删除整个表
仅删除表test内的所有内容,保留表的定义,不释放空间。
DELETE FROM test 或者 DELETE FROM test;
DELETE * FROM test 或者 DELETE * FROM test;
想删除表, 当然用 drop。
想保留表而将所有数据删除。如果和事务无关, 用 truncate 即可。 如果和事务有关, 或者想触发 trigger, 还是用 delete。
如果是整理表内部的碎片, 可以用 truncate 跟上 reuse stroage, 再重新导入/插入数据。
更多推荐
转载-SQL学习教程与SELECT、SELECT DISTINCT、WHERE、AND&OR、ODER BY INSERT INTO、UPDATE、DE
发布评论