SQL基础学习

SQL 指结构化查询语言,全称是 Structured Query Language

这类数据库包括:MySQL、SQL Server、Access、Oracle、Sybase、DB2 等等

SQL 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。

SQL 面向数据库执行查询

SQL 可从数据库取回数据

SQL 可在数据库中插入新的记录

SQL 可更新数据库中的数据

SQL 可从数据库删除记录

SQL 可创建新数据库

SQL 可在数据库中创建新表

SQL 可在数据库中创建存储过程

SQL 可在数据库中创建视图

SQL 可以设置表、存储过程和视图的权限

RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。

RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。

RDBMS 中的数据存储在被称为表的数据库对象中。

表是相关的数据项的集合,它由列和行组成。

一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:"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 语句。)

SELECT - 从数据库中提取数据

UPDATE - 更新数据库中的数据

DELETE - 从数据库中删除数据

INSERT INTO - 向数据库中插入新数据

CREATE DATABASE - 创建新数据库

ALTER DATABASE - 修改数据库

CREATE TABLE - 创建新表

ALTER TABLE - 变更(改变)数据库表

DROP TABLE - 删除表

CREATE INDEX - 创建索引(搜索键)

DROP INDEX - 删除索引

SQL SELECT 语句

SELECT 语句用于从数据库中选取数据。

结果被存储在一个结果表中,称为结果集

语法:

SELECT column_name,column_name
FROM table_name;

SELECT * FROM table_name;

举例:如果是SQL语句从“Websites”表中选取一些列的话:

实例

SELECT name,country FROM Websites;

如果是...选取所有列的话:

实例

SELECT * FROM Websites;

SQL SELECT DISTINCT 语句

SELECT DISTINCT 语句用于返回唯一不同的值

(在表中,一个列可能会包含多个重复值,有时仅仅想列出不同(distinct)的值,so...)

(使用 RUNOOB 样本数据库)"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     |

+----+--------------+---------------------------+-------+---------+

从 "Websites" 表的 "country" 列中选取唯一不同的值,也就是去掉 "country" 列重复值:

实例

SELECT DISTINCT country FROM Websites;

SQL WHERE 子句

WHERE 子句用于过滤记录 即 WHERE 子句用于提取那些满足指定条件的记录

语法:

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

RUNOOB 样本数据库)下面是选自 "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     |

+----+--------------+---------------------------+-------+---------+

SQL 语句从 "Websites" 表中选取国家为 "CN" 的所有网站:

实例

SELECT * FROM Websites WHERE country='CN';

(SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号))

在上个实例中 'CN' 文本字段使用了单引号。

如果是数值字段,不使用引号。

实例

SELECT * FROM Websites WHERE id=1;

WHERE 子句中的运算符

下面的运算符可以在 WHERE 子句中使用:

= 等于

<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=

> 大于

< 小于

>= 大于等于

<= 小于等于

BETWEEN 在某个范围内

LIKE 搜索某种模式

IN 指定针对某个列的多个可能值

例:

Select * from emp where empno=7900;

Select * from emp where ename='SMITH';

Select * from emp where sal > 2000 and sal < 3000;

Select * from emp where sal > 2000 or comm > 500;

select * from emp where not sal > 1500;

逻辑运算的优先级:

()    not        and         or

Select * from emp where comm is null;

Select * from emp where sal between 1500 and 3000;

Select * from emp where sal in (5000,3000,1500);

(查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。)

Like模糊查询

Select * from emp where ename like 'M%';

查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。

 % 表示多个字值,_ 下划线表示一个字符;

 M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。

 %M% : 表示查询包含M的所有内容。

 %M_ : 表示查询以M在倒数第二位的所有内容。

WHERE 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当 0 时转化为 false,1 转化为 true。例如:

SELECT studentNO FROM student WHERE 0

则会返回一个空集,因为每一行记录 WHERE 都返回 false。

SELECT  studentNO  FROM student WHERE 1

返回 student 表所有行中 studentNO 列的值。因为每一行记录 WHERE 都返回 true。

SQL AND & OR 运算符

AND & OR 运算符用于基于一个以上的条件对记录进行过滤。

...

(RUNOOB 样本数据库)下面是选自 "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     |

+----+--------------+---------------------------+-------+---------+

SQL 语句从 "Websites" 表中选取国家为 "CN" 且alexa排名大于 "50" 的所有网站:

实例

SELECT * FROM Websites WHERE country='CN' AND alexa > 50;

SQL 语句从 "Websites" 表中选取国家为 "USA" 或者 "CN" 的所有客户:

实例

SELECT * FROM Websites WHERE country='USA' OR country='CN';

SQL 语句从 "Websites" 表中选取 alexa 排名大于 "15" 且国家为 "CN" 或 "USA" 的所有网站:

实例

SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');

SQL ORDER BY 关键字

ORDER BY 关键字用于对结果集进行排序

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。

ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

(使用 RUNOOB 样本数据库)下面是选自 "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     |

+----+--------------+---------------------------+-------+---------+

SQL 语句从 "Websites" 表中选取所有网站,并按照 "alexa" 列排序:

实例

SELECT * FROM Websites ORDER BY alexa;

SQL 语句从 "Websites" 表中选取所有网站,并按照 "country" 和 "alexa" 列排序:

实例

SELECT * FROM Websites ORDER BY country,alexa;

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     |

+----+--------------+---------------------------+-------+---------+

向 "Websites" 表中插入一个新行(所有列都整了个值)

实例

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');

拓:

insert into scorebak select * from socre where neza='neza'   --插入一行,要求表scorebak 必须存在select *  into scorebak from score  where neza='neza'  --也是插入一行,要求表scorebak 不存在

SQL UPDATE 语句

UPDATE 语句用于更新表中已存在的记录。

语法:

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_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     |

+----+--------------+---------------------------+-------+---------+

假设我们要把 "菜鸟教程" 的 alexa 排名更新为 5000,country 改为 USA。

实例

UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';

如果我们省略了 WHERE 子句,如下所示:

UPDATE Websites

SET alexa='5000', country='USA'

执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。

执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。

(在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。

set sql_safe_updates=1; 表示开启该参数)

SQL DELETE 语句

DELETE 语句用于删除表中的记录(DELETE 语句用于删除表中的行)

语法:

DELETE FROM table_name
WHERE some_column=some_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     |

+----+--------------+---------------------------+-------+---------+

假设我们要从 "Websites" 表中删除网站名为 "Facebook" 且国家为 USA 的网站。

实例

DELETE FROM Websites WHERE name='Facebook' AND country='USA';

可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:

DELETE FROM table_name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值