文章目录

  • 前言
  • 一、SQL是什么?
  • 二、基本操作
    • 1.检索单列
    • 2.检索多列
    • 3.检索不同值
    • 4.限制结果
    • 5.排序检索数据
    • 6.指定排序方向
    • 7.过滤数据
    • 8.计算字段
    • 9.使用函数
    • 10.分组数据
    • 11.使用子查询
    • 12.联结表
    • 13.插入数据
    • 14.更新数据
    • 15.删除数据
    • 16.创建和操作表
    • 17.事务
  • 总结


前言


一、SQL是什么?

SQL是Structured Query Language(结构化查询语言)的缩写,是一种专门用来与数据库交互的语言。SQL不是某个特点数据库厂商专有的语言,大部分的DBMS(数据库管理系统)都支持SQL。但是不同的DBMS厂商会通过增加语句或指令来拓展SQL的功能。本文主要介绍ANSI SQL(由ANSI标准管理委员会管理的标准SQL),同时使用MySQL作为的DBMS,在使用到其特定的SQL时会进行说明。

二、基本操作

1.检索单列

输入:查询"products"表中"prod_name"列的所有信息。

SELECT prod_name FROM products;

输出

提示:多条SQL语句使用";"分隔,单条语句结束时可加可不加(建议加上)。SQL语句不区分大小写。

2.检索多列

输入:检索"products"表中"prod_id"、“prod_name”、"prod_price "三列的信息

SELECT prod_id,prod_name,prod_price FROM products;

输出:

说明:查询多列时使用","对不同列进行分隔。
可以使用通配符(*)来代替实际列名返回表中的所有列。	
SELECT * FROM products;

3.检索不同值

当在检索时不希望返回值重复出现时,可以使用DISTINCT关键字

输入

SELECT DISTINCT vend_id FROM products;

输出

注意:DISTINCT关键字作用于所有列。
当你指定SELECT DISTINCT vend_id,prod_price时,
会检索出“vend_id”,“prod_price”组合结果不同的结果集。

4.限制结果

当需要对检索结果的特定行进行输出时,可以使用LIMIT关键字。
注意:LIMIT关键字是MySQL所特有的。
SELECT prod_name FROM products LIMIT 5 OFFSET 0;
================================================
简化语句:
SELECT prod_name FROM products LIMIT 0,5;

输出

说明:LIMIT指定返回的行数。OFFSET指定从哪开始
(第一个被检索的行是第0行)。使用简化语句时,LIMIT后逗号
前后的两个数字值与OFFSET前后的值相反。

5.排序检索数据

为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY
子句。

输入

SELECT prod_name FROM products ORDER BY prod_name;

输出

注意:ORDER BY字句使用时应该保证它是SELECT语句中的最后一
条子句。当需要按不同列进行排序时在ORDER BY后面用逗号(,)
分隔列名即可;会按照顺序对前面的列进行排序,只有在前面的列
相同时才会对下面的列进行排序。

6.指定排序方向

SQL中默认是升序排序(A到Z),可以通过ORDER BY子句进行降
序排序。同时必须指定关键字DESC。

输入

SELECT prod_id,prod_name,prod_price 
FROM products 
ORDER BY prod_price DESC;

输出

注意:若需要在多个列上进行降序排序,必须对每一列指定DESC

7.过滤数据

当需要有选择的检索出表中对应行时,使用“WHERE”关键字

输入

SELECT prod_name,prod_price
FROM products 
WHERE prod_price = 3.49;

输出

WHERE子句操作符

操作符说明
=等于
<> 、 !=不等于
<小于
<=小于等于
!<不小于
>大于
>=大于等于
!>不大于
BETWEEN ADN指定两个值之间
IS NULL为NULL值
IS NOT NULL不为NULL值
AND连接不同条件且返回满足所有条件的行
OR连接不同条件且返回满足任一条件的行
IN用法IN (值1,值2…),用法同OR
NOT否定其后面所跟随的条件
LIKE进行模糊查询,“%”为通配符表示任意字符任意次数,“_”也是通配符但值匹配单个字符
说明:同时使用AND和OR时应用()对操作符进行明确的分组
使用LIKE进行模糊查询时通配符的使用会影响性能,当必须使用
时尽量不要将通配符放在最前面,否则效率将是最低的。

8.计算字段

  1. 拼接字段:使用concat(‘值1’,‘值2’…)
  2. 使用别名:AS关键字

9.使用函数

常用函数介绍

函数名称作用
AVG求平均值,返回指定列数据的平均值
SUM求和,返回指定列的总和
COUNT统计查询结果的行数
TRIM删除字符串左右两侧的空格
ABS求绝对值
MAX查询指定列的最大值
MIN查询指定列的最小值

AVG函数
输入

SELECT AVG(prod_price) AS avg_price FROM products;

输出

COUNT函数
输入

SELECT COUNT(*) AS num_cust FROM customers;

输出

说明:COUNT(*)会对表中行的数目进行统计,NULL也会统计
使用COUNT(column)对特定行具有值的行数进行统计,会忽略NULL

10.分组数据

分组是使用SELECT语句中的GROUP BY子句建立的

输入

SELECT vend_id,COUNT(*) AS num_prods 
FROM products 
GROUP BY vend_id;

输出

说明:GROUP BY子句会指示DBMS分组数据,然后再对各个组进行聚集。

HAVING过滤分组

提示:HAVING和WHERE的差别是WHERE是在数据分组前进行的,
而HAVING是在数组分组后进行的。

输入

SELECT cust_id,COUNT(*) AS orders 
FROM orders 
GROUP BY cust_id 
HAVING COUNT(*) >= 2;

输出

11.使用子查询

MYSQL中允许将查询的结果作为另一个查询的过滤条件或计算字段

作为过滤条件输入

SELECT cust_name,cust_contact FROM customers
WHERE cust_id IN (SELECT cust_id FROM orders 
WHERE order_num IN (SELECT order_num FROM orderitems 
WHERE prod_id = 'RGAN01'))

输出

12.联结表

当需要使用一条SQL语句查询出不同表中的数据时,可以使用联结表

输入

SELECT vend_name,prod_name,prod_price 
FROM vendors,products 
WHERE vendors.vend_id=products.vend_id;

输出

使用内联结

可以使用"INNER JOIN 表 ON 条件" 的形式来联结

输入

SELECT vend_name,prod_name,prod_price 
FROM vendors 
INNER JOIN products 
ON vendors.vend_id=products.vend_id;

输出

提示:使用联结时一定要给出联结条件,否则会得到笛卡尔积

13.插入数据

在表中添加数据时可以使用
"INSERT INTO 表名 VALUES(值1,值2....)"
插入部分列可以使用
"INSERT INTO 表名(列名1,列名2...) VALUES(值1,值2....)"

14.更新数据

更新表中数据时使用
UPDATE 表名 SET 列名1="数据1",列名2="数据2"... WHERE ...
注意:不要忘记WHERE子句否则会更新表中所有行

15.删除数据

删除表中数据时使用
DELETE FROM 表名 WHERE ...
注意:不要忘记WHERE子句否则会删除表中所有行

16.创建和操作表

创建表语句
CREATE TABLE 表名 (列名1 类型 约束 ,列名2 类型 约束 , ....);
可以同时使用多个约束
更新表可以使用
"ALTER TBALE 表名 ADD 列名 类型 约束" 来新增一个字段
"ALTER TBALE 表名 DROP COLUMN 列名"来删除一个字段

常用的约束

约束名称含义
NOT NULL非空,当不使用时即表示可以为NULL
UNIQUE取值不允许重复
PRIMARY KEY主键
FOREIGN KEY外键
CHECK逻辑表达式约束
DEFAULT默认值

17.事务

使用事务处理(transaction processing),通过确保成批的SQL操作
全部执行或全部不执行来维护数据库的完整性。
术语:
1.事务(transaction):指一组SQL语句
2.回退(rollback):指撤销特定SQL语句的过程
3.提交(commit):指将未存储的SQL语句结果写入数据库表中
4.保留点(savepoint):指事务处理中设置的临时占位符,可以对它发布回退
操作:
BEGIN TRANSACTION:开启事务
ROLLBACK:回退事务
ROLLBACK TO delete:回退事务到保留点
COMMIT TRANSACTION:提交事务
事务的特性(ACID):
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,
   要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,
	其执行结果必须与按某一顺序串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,
	事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,
	系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。     

总结

以上是SQL的基础知识。
SQL脚本下载
参考文献:《SQL必知必会》

更多推荐

SQL基础入门知识