转载-SQL学习教程与SELECT、SELECT DISTINCT、WHERE、AND&OR、ODER BY INSERT INTO、UPDATE、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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+
  • INSERT INTO 实例
    假设我们要向 “Websites” 表中插入一个新行。
    我们可以使用下面的 SQL 语句:
INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度','https://www.baidu.com/','4','CN');
  • 结果:
    在这里插入图片描述

  • 在指定的列插入数据
    下面的 SQL 语句将插入一个新行,但是只在 “name”、“url” 和 “country” 列插入数据(id 字段会自动更新):

INSERT INTO Websites (name, url, country)
VALUES ('stackoverflow', 'http://stackoverflow.com/', '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.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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.com/   | 13    | CN      |
| 3  | 菜鸟教程 | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博       | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 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 语句必须满足如下条件之一才能执行成功。
  1. 使用 where 子句, 并且 where 子句中列必须为 prefix 索引列。
  2. 同时使用 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, 再重新导入/插入数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值