单表与多表查询
单引号与双引号
针对有空格、特殊字符、数字开头的字段别名必须加双引号
针对标量字符串表达式必须用加单引号
连接运算
字符串的拼接运算
字符串拼接经常用于生成SQL脚本
删除exam模式下所有的表,可以通过拼接生成如下批量的SQL
select 'drop table ' || schemaname || '.' || tablename || ';' AS "batch_sql" from sys_tables where schemaname='exam';
算术运算符
数值的算术运算
日期的算术运算
使用条件表达式
输出成绩,成绩大于等于90时输出高,大于等70小于90输出中,其他输出低,使用
case when实现
select sno,cno,score, CASE WHEN score>=90 THEN '高' WHEN score<90 AND score>=70 THEN '中' ELSE '低' END AS score_level FROM exam.score;
where子句
等值查询
select 字段 from 表名 where 字段名> ‘字段值’;
select 字段 from 表名 where 字段名 = ‘字段值’;
.....
字符型字段列表匹配(显示多个值)
查看学员所在地为beijing和chongqing
select sno,sname,city from exam.student where city in('Beijing','Chongqing');
多条件匹配
查找所在城市为Beijing,工作岗位是Database Engineer的学员信息。
select sno,sname,city,job from exam.student where city='Beijing' AND job='Database Engineer';
多表查询
内连接
内连接根据两个连接表的同名列或逻辑相关列的值进行比较,返回与连接条件匹配的行数据。
使用INNER JOIN子句进行内连接
INNER是默认关键字,可以省略
注意:除“select *”外,同名字段出现在查询列表中需要指定表名前缀,否则报错
如:
正确写法:(加上表名,指定是哪个表的字段)
使用WHERE子句代替内连接的INNER JOINON子句
外连接(OUTER关键字可省略)
左外连接LEFF OUTER JOIN
左外连接的结果集包括LEFT OUTER 子句中指定的左表的所有行,而不仅仅是连接列匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中来自右表的所有列均为空值。
使用t01表的id1字段和t02表的id1字段连接,t01表显示全部记录,t02表只显示满足连接条件的记录。
右外连接RIGHT OUTER JOIN
右外连接是左向外连接的反向链接。返回右表的所有行。如果右表的某行在左表中没有匹配行,则在相关联的结果集行中来自左表的所有列均为空值。
使用t01表的id1字段和t02表的id1字段连接,t02表显示全部记录,t01表显示满足连接条件的记录。
全外连接full outer join
全外连接返回左表和右表中的所有行,当一个表中的某行在另一个表中没有匹配时,则在相关联的结果集行中来自另一个表的所有列返回的空值。全外连接显示两表匹配的行和不匹配的行。
连接条件和过滤条件
连接条件决定哪些行参与表连接,通常位于ON子句以下列子中“a.id1=1”属于连接条件。
select * from t01 a LEFT OUTER JOIN t02 b ON a.id1=b.id1 AND a.id1=1;
过滤条件是在表连接后的结果集中对数据进行过滤,通常放在WHERE子句中以下例子中“a.id1=1”属于过滤条件
内连接的连接条件与过滤条件是等价的
交叉连接CROSS JOIN
交叉连接也称为笛卡尔连接,交叉连接返回左右两表基于元组的笛卡尔积,如果使用不当会给数据库系统带来巨大性能压力。
自连接INNER JOIN
通过为表设置别名将一张表虚拟成两张表后进行连接操作,常用于一张表内列之间具有键值依赖的数据检索。
自然连接NATURAL INNER
自然连接是等值连接的一种特殊形式,使用NATURL关键字代替连接条件,通过两张或者多张表中所有具有相同名称的字段进行等值连接。多个同名字段连接时,逻辑运算符为AND。在自然连接中遇到关联表中的同名字段具有不匹配的或不可隐式转换的数据类型时会导致执行出错。
自然连接可以是内连接也可以是外连接
内连接
外连接