文章目录
- 前言
- 一、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.计算字段
- 拼接字段:使用concat(‘值1’,‘值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基础入门知识
发布评论