SQL语句学习
(选自codesky.com)
(修改列名 alter table checks change column `check` `id` numeric(6);)
好了,其他的不说现在就开始:
select 子句主要决定了从表中取出的列名,列数以及列的显示顺序等信息,"*"表示查询所有的列,有关select的用法应该结合其它子句的用法。
1.from 子句:
①from子句用于指定被查询的表,试图或快照。
②如果指定多个实体,用逗号讲它们分割。为了查询方便,特别是进行自连接查询时,可以给表起别名。(这里我要说很多刚开始使用sql的朋友开始的时候总觉得这个很简单,没有什么可学的,可是到后来在做一些复杂的sql的时候总是想不起来这一点导致其实不难的sql语句无从下手)。
③如果被查询的实体不在当前的模式中,则必须用模式名来限定该对象。
select *from admin.emp
④若查询远程数据库中的实体,必须使用数据库链路,如果查询分区表中某个分区的数据,则必须使用关键字Partition来指定分区名。
select *from emp@cbf107
select *from emp partition(A_hiredate)
2.where 子句
where 子句用于限定处理的行数,选择满足条件的行,where 子句中的任何逻辑条件都使用比较运算符,满足where子句中逻辑条件的数据被返回或者被处理,在where子句中可以使用列名或表达式。
select ename from emp where deptno=10
①如果列类型为字符型,where ename='smith';(单引号内字符串大小写有区别)
②列类型为数字型deptno=20;
③如果列值取其他列值,可用如下形式表示
where emp.depno=dept.deptno
④in 与 not in 择列的值与值列表中某一个值相符的相关行信息(如果进行"或操作")
查询表EMP中有那些雇员和分析员
select name,job from emp where job in ('clerk','analyst');
查询表EMP中有那些人不是雇员和分析员
select name,job from emp where job not in ('clerk','analyst');
有那些雇员的工资在/不在2000~3000之间
select ename,job,sal from emp where sal between 2000 and 3000;
select ename,job,sal from emp where sal not between 2000 and 3000
select ename,oeptno from emp where ename like 's%';
"%" 匹配0个或n个长度的字符串,而"_"仅匹配一个字符。假如查询条件中本身含有"_"或"%",为了与模式匹配符"_"和"%"区分,必须在like运算符中加ESCAPE"%子句.
查询雇员名以A_开始的行
select *from emp where ename like 'a\_%' ESCAPE '\';
is null 和 is not null
空值(null)不等同于0,0是一个数字,而空值表示未知的,不存在的或不可用的数据.它不能像0那样进行算术运算,null用于查询列值为空值或非空的信息。
在Oracle的RDBMS中,null(空值)不占空间,判断某一列值是否为空,不能用"="或"!="运算符号,而要用is null或is not null。
选择没有奖金的雇员信息
select ename,job from emp where comm is null
3.order by
在关系型模式中,行是没有顺序可言的。order by 子句确定的行信息显示时的先后顺序,当按多列进行排序时,首先由第一个列名确定顺序,其次由第二个列名确定顺序。
先按工资的降序排列,在工资相同的情况下,按姓名的字母顺序排列
select
ename employee,
sal salary
from
emp
where
deptno=30
order by
sal desc employee;
假如在select子句中使用distinct关键字,在order by 子句中只能使用select 子句中列出来的列名,不能使用列的别名。
在查询语句中不仅可以使用列名或列的别名进行排序,也可以使用在select 子句中列的位置进行排序。(select 子句中有一个很长的表达式,并且要用此表达式的结果进行排序时用列的位置是很有用的)。对于涉及集合操作:union,minus的查询,不能使用列名,在这种情况下,必须提供列的位置。
select
'name:'||ename "employee",
sal "salary",
from
emp
where
deptno=30
order by
2,1;
4.group by
在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询结果。
在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数
select max(sal),job emp group by job;
(注意max(sal),job的job并非一定要出现,但有意义)
查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。
select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;
当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句。having 与where 子句类似,均用于设置限定条件
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
查询每个部门的每种职位的雇员数
select deptno,job,count(*) from emp group by deptno,job;
5.多表连接
笛卡尔连接就是指从多张表中取数据时,在where子句中没有指定多张表的公共关系(即一张表中取出每条记录与另一张表中的每条记录作连接)。假如第一张表中有M条记录,而第二张表中用N条记录,结果是M*N条记录。要尽量避免产生笛卡尔连接。所以一般有N张表连接,至少有N-1个连接条件。
select
D.dname,D.Loc,E.ename,e.sal
from
delpt D,emp E
where
D.deptno=E.deptno;
一但定义了表的别名,在本条select语句中就不能用表名去限制列名,应该用表的别名去限制别名。
哪些雇员的工资属于第三级别?
select
empno,ename,sal
from
emp,salgrade
where
grade=3
and
sal between losal and hisal;
找出emp表中的每一雇员属于哪一等级。
select
empno,ename,sal,grade
from
emp,sal,grade
where
emp.sal between lowsal and hisal.
5.外连接与内连接
有时候,即使在连接的表中没有相应的行,用户可能想从一张表中看数据,Oracle提供了外连接实现该功能。
内连接是指连接查询只显示完全满足连接条件的记录,即等值连接,外连接的查询结果是内连接查询结果的扩展。外连接不仅返回满足连接条件的所有记录而且也返回了一个表中那些在另一个表中没有匹配行的记录。外连接的操作符是“+”。“+”号放在连接条件中信息不完全的那一边(即没有相应行的那一边)。运算符“+”影响NULL行的建立。建一行或多行NULL来匹配连接的表中信息完全的行。
外连接运算符“+”只能出现在where子句中表达式的一边。
假如在多张表之间有多个连接条件,外连接运算符不能使用or,in逻辑运算符与其它条件组合。
假如emp表中deptno=10的ename为空值,dept表中deptno=20的loc为空值:
1.
select
ename,dept.deptno,loc
from
emp,dept
where
emp.depno(+)=dept.deptno;
如果在dept.deptno中有的数值在emp.deptno中没有值,则在做外连接时,
结果中ename会产生一个空值。(emp.deptno=10)
2.
select
ename,dept.deptno,loc
from
emp,dept
where
emp.depno=dept.deptno(+);
如果在emp.deptno中有的数值在dept.deptno中没有值,则在做外连接时,
结果中loc会产生一个空值。。(dept.deptno=20)
5.自连接
自连接是指同一张表的不同行间的连接。该连接不受其他表的影响。用自连接可以比较同一张表中不同行的某一列的值。因为自连接查询仅涉及到某一张表与其自身的连接。所以在from子句中该表名出现两次,分别用两个不同的别名表示,两个别名当作两张不同的表进行处理,与其它的表连接一样,别名之间也使用一个或多个相关的列连接。为了区分同一张表的不同行的列,在名前永别名加以限制。
select
worker.ename,
manager.ename manager
from
emp worker,
emp manager
where
work.mgr=manager.empno;
7.集合运算
基合运算符可以用于从多张表中选择数据。
①UNION运算
用于求两个结果集合的并集(两个结果集合的所有记录),并自动去掉重复行。
select ename,sal from account where sal>2000
union
select ename,sal from research where sal>2000
union
select ename,sal from sales where sal>2000;
注:ename,sal 是必须一致的。
②UNION ALL运算
用于求两个结果集合的并集(两个结果集中的所有记录),并且不去掉重复行。
select ename,sal from account where sal>2000
union
select ename,sal from research where sal>2000
union
select ename,sal from sales where sal>2000;
③INTERSECT运算
intersect运算返回查询结果中相同的部分。
各部门中有哪些相同的职位?
select Job from account
intersect
select Job from research
intersect
select Job from sales;
④MINUS运算
minus返回两个结果集的差集。(在第一个结果集中存在的,而在第二个结果集中不存在的行。)
有那些职位是财务部中有,而在销售部门中没有?
select Job from account
minus
select Job from sales;
分享到:
相关推荐
SQLSERVER复习资料整理 在IT领域,SQL Server是一款由微软公司开发的关系型数据库管理系统,它在数据存储、处理和管理方面扮演着至关重要的角色。这篇复习资料主要针对SQL Server数据库课程,涵盖了考试题和重修...
在W3School的SQL教程中,飞龙整理的内容涵盖了SQL的基础知识和常见用法。 SQL的核心在于其查询能力,通过SELECT语句,我们可以从数据库中获取所需的数据。例如,`SELECT LastName FROM Persons`这条语句会选取...
这篇笔记主要涵盖了SQL的一些核心概念和操作,包括简单的查询、连接符、数值运算和函数,以及聚合分析和分组等主题。 在Chap 5中,我们学习了简单的查询。这部分内容强调了如何从数据库中提取数据,包括基础的...
通过本章学习,您将可以: 列举 SQL SELECT语句的功能。 执行简单的选择语句。 SQL 语言和 SQL*Plus 命令的不同
根据提供的标题、描述以及部分代码内容,我们可以总结出关于...这些内容涵盖了创建数据库、表,以及进行基本的数据操作,对于学习SQL语言是非常有帮助的。通过实际操作这些命令,可以更好地理解和掌握SQL的基础知识。
对于新手和不熟悉SQL语法的开发者,SQL Prompt 10通过其强大的辅助功能,减少了学习曲线,使得编写高质量SQL代码变得更加简单。同时,对于经验丰富的开发者,它也能显著提高编写和维护SQL代码的效率。 4. **团队...
8. **学习资源**:除了实际的开发辅助,SQLPrompt还包含了许多学习资源和最佳实践,帮助开发者提升SQL技能,更好地理解和掌握SQL Server。 9. **易用性**:安装过程简单,即装即用,无需复杂的配置,使得用户能够...
SQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名字并给出...通过不断学习和实践,你可以进一步掌握存储过程的精髓,从而在数据库管理中游刃有余。
"sqlserver参考资料汇总"这个压缩包文件很可能是为了帮助用户系统性地学习和研究SQL Server而整理的一系列资源。 1. **SQL基础**: SQL(Structured Query Language)是用于操作数据库的语言,包括创建数据库、表,...
你可以通过整理这些信息,手动编写CREATE TABLE语句来创建数据库表,但若能用Excel自动生成,将大大提高效率。 02-数据初始化及SQL生成文档.xls可能包含了一些预设的数据,用于测试或者填充新建立的数据库。在Excel...
总的来说,Linq to Sql是一个适合于简单到中等复杂度数据库应用的快速开发工具,尤其适用于那些希望快速构建基于.NET的SQL Server应用程序的开发者。虽然它在某些方面不如更成熟的ORM解决方案,但在特定场景下,它的...
本资料集合是我个人精心整理和汇总,旨在为广大的数据库爱好者,不论是初学者还是资深专业人士,提供一个全面的学习平台。 1. **SQL基础**:SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言...
7. **计算字段与乘法运算**:在SELECT语句中可以进行简单的数学运算,如乘法,来创建新的计算字段。 ```sql SELECT 数量 * 订单明细.单价 * (1-折扣) AS 销售金额 ``` 这里计算每个产品的销售金额,考虑了数量、...
本资源“sql数据库基本查询语句整理”显然是一个面向数据库初学者的宝贵资料,包含了从基础到进阶的SQL查询案例。 首先,我们来探讨简单查询。`简单查询.txt`可能涵盖了如何使用SELECT语句来获取单一或多个列的数据...
8. **学习资源**:除了工具本身的功能,SQL Prompt 4还提供了丰富的学习资源和文档,帮助用户更好地理解和利用其各项特性,提升SQL编程技能。 总的来说,SQL Prompt 4是一个强大的SQL开发辅助工具,它的智能化特性...
在SQL Server网络数据库领域,掌握相关的知识和技能是至关重要的。...通过深入学习和实践上述知识点,不仅可以应对SQL Server网络数据库模拟题,还能在实际工作中有效解决各种问题,提高数据库系统的稳定性和效率。
根据提供的文档信息,我们可以归纳出一系列...以上是根据提供的文档内容整理出的主要SQL知识点。这些基本概念和技术对于初学者来说是非常重要的基础,掌握它们能够帮助更好地理解和应用SQL语言进行数据库管理和查询。
学习SQL Server 2000,首先需要了解Transact-SQL(T-SQL)语言,这是对SQL标准的扩展,用于编写查询、更新、插入和删除数据的语句。同时,了解数据库架构如表、视图、索引、存储过程和触发器等也是至关重要的。 二...
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...