关键字:
查询;事物;操作符
1. 概述
什么是SQL语言?SQL是“Structured Query Language”(结构化查询语言)的简称。是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
类型
|
对应语句
|
简要说明
|
数据定义语言DDL
|
CREATE、DROP、ALTER、TRUNCATE
|
主要用来创建、删除、修改数据库中各种对象—表、视图、索引等
|
数据操纵语言DML
|
IINSERT、UPDATE、DELETE、MERGE
|
对数据进行增、删、改等操作
|
数据查询语言DQL
|
SELECT
|
由SELECT子句、FROM子句,WHERE子句组成的查询块
|
数据控制语言DCL
|
GRANT,REVOKE
|
授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果等
|
事务控制语言TCL
|
BEGIN,END
COMMIT,ROLLBACK
SAVEPOINT
SET TRANSACTION ISOLATION LEVEL
LOCK TABLE
|
• 大写形式表示SQL关键字;小写形式表示SQL语法中需要用户提供的参数
• |(竖线)分隔括号内的语法项目,只能选择一个项目
• ()(小括号)必选语法项目,必须键入小括号
• [](方括号)可选语法项目,不必键入方括号
• {}(大括号)必选语法项目,不必键入大括号
• [,...]表示前面的项可重复,每一项由逗号分隔;[...]表示前面的项可重复,每一项由空格分隔
单表查询
--简单查询
SELECT * FROM employee;
SELECT empid,name FROM employee;
--等值查询
SELECT empid,name FROM employee WHERE empid=100;
--范围查询
SELECT empid,name FROM employee WHERE empid BETWEEN 100 AND 500;
还有一些其他的范围运算符:<>或!=、<、>、<=、>=
--去重
SELECT DISTINCT empid FROM employee;
--排序
SELECT empid,name FROM employee WHERE empid=100 ORDER BY cardno;
--分组
SELECT empid,count(*) as num FROM employee GROUP BY empid;
--分页
SELECT empid,name FROM employee ORDER BY empid LIMIT 5 OFFSET 0;
多表查询
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression
T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list )
T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2
例子:
SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;
SELECT * FROM t1 INNER JOIN t2 USING (num);
SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;
全外连接 SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;
2. 子查询
子查询:就是将一个查询的结果作为另一个查询的数据来源或判断条件的查询。子查询指定了一个派生表,它必须被包围在圆括号里。
IN/NOT IN子查询
SELECT … FROM fdt WHERE c1 IN (SELECT c1 FROM t2)
SELECT … FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2=fdt.c1+10 )
EXISTS/NOT EXISTS子查询:检验查询是否返回数据
SELECT … FROM fdt WHERE EXISTS (SELECT 1 FROM t2)
--ANY/SOME子查询
SELECT * FROM employee WHERE empid = ANY(SELECT empid FROM emp_order) –返回满足某个条件的所有员工信息
--ALL子查询
SELECT * FROM employee WHERE salary>ALL(SELECT salary FROM employee WHERE depid=1003) AND deptid=1002;
3. 数据查询—模糊查询
--LIKE查询:
LIKE通常需要和通配符配合使用,通配符是在SQL的WHERE条件子句中拥有特殊含义的字符。KES提供两个通配符:”%”和“_”
1、“%”用于匹配任何字符序列
SELECT * FROM employee WHERE name like ‘%A%’; --返回姓名包含A的员工信息
SELECT * FROM employee WHERE name like ‘A%’; --返回所有以A开头的姓名
SELECT * FROM employee WHERE name like ‘%A’; --返回所有以A结尾的姓名
2、“_”用于匹配任意单个字符
SELECT * FROM employee WHERE name like ‘A_’; --返回所有以A开头,且只有两个字符的姓名
3、KES对LIKE进行了拓展,提供了和LIKE行为相似的ILIKE预算符。不同的是ILIKE在模式匹配时会忽视大小写
--SIMILAR TO查询:
根据自己的模式是否匹配给定字符串而返回true或false。它和LIKE非常类似,只不过它使用SQL标准定义的正则表达式匹配模式。
SELECT * FROM employee WHERE name like ‘%(a|o)’;--返回英文姓名以“o”或“a”结尾的员工的信息
4. 事物
事务的类型
--显式事务:具有显式的开始标记(如begin )和结束标记(如commit或rollback)
--隐式事务:没有有显式的开始标记和结束标记,由系统隐式地控制事务的开始和结束
对哪些语句进行事务处理
--事务中包括了一个或多个 SQL 语句,这些语句如:
多条DML语句:确保数据一致性变化
一条DDL语句
一条DCL语句
事务处理时机
--开始事务时机:执行第一个可执行的SQL语句
--结束事务时机:
显式结束:用户执行COMMIT 或 ROLLBACK语句后显式结束事务
隐式结束:DDL 或 DCL 语句成功执行后,由系统隐式提交事务
用户退出,系统隐式结束事务
系统崩溃,系统隐式结束事务
事务处理语句
用户可通过专门的事务控制语句显式控制事务,这些语句如:
BEGIN:开始一个事务
END或COMMIT:结束或提交一个事务
ROLLBACK:回滚一个事务
SAVEPOINT:保存点,部分回滚一个事务
SET TRANSACTION ISOLATION LEVEL:设置事务隔离级别
LOCK TABLE: 锁定指定表
5. 常用数据类型及操作符
按照操作符的功能,操作符可以分为如下五类:
(1)
算术操作符(13个):+(一元)、+(二元)、-(一元)、-(二元)、*、/、%、^、!、!!、|/、||/、@;
相关类型:数值类型和日期时间及时间间隔类型;
(2)
比较操作符(6个):>、<、=、<>、>=、<=;
相关类型:除BLOB、CLOB外的所有类型;
(3)
串(字符串、位串、二进制位串)操作符(3个):||、~~(like)、!~~(not like);
相关类型:字符串类型、位串类型、二进制位串类型;
(4)
位运算符(6个):~(一元)、&、|、#、>>、<<;
相关类型:整数数值类型和位串类型;
(5)
字符串运算操作符(15个):^@、@@、||、~~、!~~、~~*、!~~*、~、!~、~*、!~*、~>~、~<~、~>=~、~<=~
相关类型:字符串类型;