⑴ sql基本命令都是什么含义,求列表解释
--SQL基本命令
--数据定义语言
Create(创建)
Alter(更改)
Drop(删除)
--数据操纵语言
Insert(插入)
select(选择)
delete(删除)
update(更新)
--事务控制语言
commit(提交)
savepoint(保存点)
rollback(回滚)
--数据控制语言
Grant(授权)
Revoke(回收)
--Orcale数据类型
--字符数据类型
char这种数据类型的列长度可以是1到2000个字节。
varchar2该数据类型的大小在1-4000个字节范围内
long这种数据类型可存储最大2GB。
--数值数据类型
number数据类型可以存储正数、负数、零、定点数和精度为38位的浮点数。
--日期时间数据类型
date数据类型使用七个字节固定长度,每个字节分别存储世纪、年、月、日、小时、分和秒。从4712年1月1日到公元9999年12月13日。
Timestamp数据类型用于存储日期的年、月、日以及时间的小时、分和秒值。秒值是精确到小数点后6位。该数据类型还包括了时区信息。
--Raw和LongRaw数据类型
Raw数据类型
Raw数据类型用于存储基于字节的数据。如二进制数据或字节串,该数据类型最多能存储2000个字节。
LongRaw数据类型用于存储可变长度的二进制数据,最多能存储2GB。(该数据不能使用索引,long受到的所有限制对longraw数据类型同样有效)
--LOB数据类型
Clob数据类型能够存储大量字符数据。该数据类型可以存储单字节数据和多字节字符数据。clob可用于存储非结构化的XML文档。
Blob数据类型可以存储较大的二进制对象,如图形、视频剪辑和声音剪辑等。
Bfile数据类型能够将二进制文件存储二进制文件存储在数据库外部的操作系统文件中。Bfile列存存储一个Bfile定位器。它指向位于服务器文件系统上的二进制文件。支持的文件最大为4GB。
--查看指定伪列用户(scott)
select rowid,ename,comm from emp where sal=1500
--查看伪列数
select * from emp where rownum<2
--数据定义语言
create table (需要创建的表)
alter table (需要更改的表)
truncate table (需要截断的表)
drop table (需要删除的表)
--create table保命令
create table [所有者即模式的名称,如果用户在自己的模式中创建表,则可以不指定所有者名称。][需要创建的表名]
([列的名称] [数据类型及长度]);
--例子(在当前用户下创建了一张名为(Cool)的表,里有有三个列分别是:Cool_ID、Cool_Name、Cool_like):
create table Cool(
Cool_ID number,
Cool_Name varchar(20),
Cool_like varchar(30));
--在表中插入数据
insert into Cool values(8850,'酷儿','编写Java应用程序');
insert into Cool values(8851,'酷儿','编写Java应用程序1');
insert into Cool values(8852,'酷儿','编写Java应用程序2');
insert into Cool values(8853,'酷儿','编写Java应用程序3');
insert into Cool values(8854,'酷儿','编写Java应用程序4');
insert into Cool values(8856,'酷儿','编写Java应用程序5');
insert into Cool values(8855,'酷儿','编写Java应用程序6');
--alter table命令
alter table [需要更改的表命称] [模式(modify=更改,add=添加,drop=删除)] (表中的列名)
--例子
--更改表中Cool_like列数据长度更改为15
alter table cool modify (cool_name varchar(15));
--插入数据进行测试第一条数据可以顺利插入到列中,而第二条数据则不能插入列数,应为它的长度己超过了15个字符。(执行结果为:Error位于第一行:ora-01401:插入数据值对于列过大);
insert into Cool values(8855,'酷儿Test','编写Java应用程序、游戏等等。');
insert into Cool values(8855,'测试用户名,此列长度将超过15个字符。','编写Java应用程序、游戏等等。');
--在表中添加一个列,在表中添加一个Cool_Tel来存储电话号码。
alter table Cool add (Cool_Tel varchar(12));
insert into Cool values(8856,'酷儿8856','编写Java应用程序','13529424360');
--在表中删除Cool_Tel列;
alter table cool drop column cool_tel;
--Truncate table命令
--删除表中的记录而不删除列,此方法不能回滚因为它不使用事务处理。(优点:删除速度快)
truncate table cool;(执行结果:表己截断)
--desc查看cool表的结构
desc cool;
--drop table命令
--删除Cool表。此方法可以使用事务回滚。
drop table cool;
--数据操纵语言
--选择命令(Select)
select * from emp;(查询表中所有数据)
select * from emp where ename='adams';(按条件查询表中数据)
select distinct * from emp;(不选择表中的重复行,使用distinct关键字);
select * from cool where cool_name='酷儿' order by cool_id asc;(按Coo_ID进行升序排序)
select * from cool where cool_name='酷儿' order by cool_id desc;(按Coo_ID进行降序排序)
create table CoolDemo as select * from cool;(用现有表Cool创建一个新表,数据包括在select语包里,可以是所有,也可以是指定的列)
create table CoolDemo2 as select * from cool where 1 = 2;(此条件不成立,所有只创建了表结构,没有数据)
select cool_id+10 sum ,cool_name from cool;(此条语句使用了别名sum并且是cool_id+10语后的值,但原始值不会改变。)
--插入命令(Insert)
insert into cool values(8857,'酷儿','编写Java应用程序');(在Cool表中插入数据)
insert into cool(cool_name,cool_like) values('酷儿','编写Java应用程序null');(只插入姓名列(cool_name)和爱好列(cool_like)的值)
insert into cool values(8858,'酷儿',null);(在cool表中跳过了cool_like列,使用空值来填充)
alter table cool add(cool_date date);(在表中添加一个日期列,以便下面插入日期值)
insert into cool values(8859,'酷儿','编写Java应用程序8859','22-11月-06');(此条语句在Cool表中cool_date列插入了2006年11月12日的日期)
insert into cool select * from cooldemo;(此条语句插入了来自期它表的数据)
--更新命令(Update)
update cool set cool_name='酷儿至酷' where cool_name='酷儿';(如果cool_name列的值等于(酷儿)那么就将它更改为(酷儿至酷),这是有条件的查询)
update cool set cool_name='酷儿';(此条语句将cool_name列的所有值更改为(酷儿))
--删除命令(delete)
delete cool where cool_like='编写Java应用程序null';(如果cool表中cool_like列值等于(编写Java应用程序null)就删除它)
--提交命令(Commit)
commit;(提交事务)
commit work;(功能同上)
--标记命令(SavePoint)
savepoint savepoint_id;(它用来标记事务中可以应用回滚的点。)
--回滚事务(RollBack)
rollback;
rollback work;
rollback to savepoint [自己标记的记录点];
--数据控制语言
--授权命令(Grant)
Grant [操作权限如:select,update,delete等] on [表名称] to [用户名]
grant select,update,delete on cool to hedong911;(此条语句授权给用户hedong911查询、更新、删除cool表的权力)
grant update(cool_id,cool_name) on cool to hedong911;(此条语句授权给用户hedong911更新cool表(cool_id,cool_name)列权力)
grant select on cool to hedong911 with grant option;(此语句授权的用户hedong911可以给其它用户授权)
--回收授权命令(revoke)
revoke select,update,delete on cool to hedong911;(此条语句回收了hedong911的查询、更新、删除权力)
--算术操作符
(跳过)
--比较操作符
--比较操作符包括(=、!=、<、>、<=、>=、between……and(检查是否在两个值之间)、in(与列表中的值相匹配)、like(匹配字符模式)和is null(检查是否为空),最后四个操作符还可以和not(非)一起使用如:not between……and等
select * from cool where cool_name!='1';
select * from cool where cool_name like '酷儿';
select * from cool where cool_id < 8853;
select * from cool where cool_id > 8853;
select * from cool where cool_id <= 8853;
select * from cool where cool_id >= 8853;
select * from cool where cool_like in ('编写Java应用程序');
--逻辑操作符
--逻辑操作符包括and(与)、or(或)和now(非);
select * from cool where cool_id <=8856 and cool_id >= 8853;
select * from cool where cool_id =9999 or cool_like in ('编写Java应用程序');
--集合操作符
--联合查询(union)
select * from cool union select * from cooldemo;(此条语句将Cool和CoolDemo两张表的查询结果合拼,并删除重复行)
--联合所有查询(union all)
select * from cool union all select * from cooldemo;(此条语句将Cool和CoolDemo两张表的查询结果合拼,不删除重复行)
--交集查询(intersect)
select * from cool intersect select * from cooldemo;(此条语句查询两张表都有的行)
--减集查询(minus)
select * from cool minus select * from cooldemo;(此条语句返回第二张表没有的数据)
--连接(||)操作符
select ('用户编号:'||cool_id||'姓名是:'||cool_name||'爱好是:'||cool_like||'日期是:'||cool_date) from cool where cool_id=8859;(运行结果:用户编号:8859姓名是:酷儿爱好是:编写Java应用程序8859日期是:22-11月-06)
⑵ SQL查询语句
SQL查询语句大全
SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语句的需求是最频繁的。那么SQL查询语句有哪些?下面跟我一起来看看吧!
一、简单查询语句
1. 查看表结构
SQL>DESC emp;
2. 查询所有列
SQL>SELECT * FROM emp;
3. 查询指定列
SQL>SELECT empmo, ename, mgr FROM emp;
SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项
4. 查询指定行
SQL>SELECT * FROM emp WHERE job='CLERK';
5. 使用算术表达式
SQL>SELECT ename, sal*13+nvl(comm,0) FROM emp;
nvl(comm,1)的意思是,如果comm中有值,则nvl(comm,1)=comm; comm中无值,则nvl(comm,1)=0。
SQL>SELECT ename, sal*13+nvl(comm,0) year_sal FROM emp; (year_sal为别名,可按别名排序)
SQL>SELECT * FROM emp WHERE hiredate>'01-1月-82';
6. 使用like操作符(%,_)
%表示一个或多个字符,_表示一个字符,[charlist]表示字符列中的任何单一字符,[^charlist]或者[!charlist]不在字符列中的任何单一字符。
SQL>SELECT * FROM emp WHERE ename like 'S__T%';
7. 在where条件中使用In
SQL>SELECT * FROM emp WHERE job IN ('CLERK','ANALYST');
8. 查询字段内容为空/非空的语句
SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;
9. 使用逻辑操作符号
SQL>SELECT * FROM emp WHERE (sal>500 or job='MANAGE') and ename like 'J%';
10. 将查询结果按字段的值进行排序
SQL>SELECT * FROM emp ORDER BY deptno, sal DESC; (按部门升序,并按薪酬降序)
二、复杂查询
1. 数据分组(max,min,avg,sum,count)
SQL>SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;
SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));
SQL>SELEC COUNT(*) FROM emp;
2. group by(用于对查询结果的分组统计) 和 having子句(用于限制分组显示结果)
SQL>SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;
SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;
对于数据分组的总结:
a. 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中)
b. 如果select语句中同时包含有group by, having, order by,那么它们的顺序是group by, having, order by。
c. 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须出现在group by子句中,否则就是会出错。
使用group by不是使用having的前提条件。
3. 多表查询
SQL>SELECT e.name,e.sal,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno order by d.deptno;
SQL>SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s WHER e.sal BETWEEN s.losal AND s.hisal;
4. 自连接(指同一张表的连接查询)
SQL>SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;
5. 子查询(嵌入到其他sql语句中的select语句,也叫嵌套查询)
5.1 单行子查询
SQL>SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查询表中与smith同部门的人员名字。因为返回结果只有一行,所以用“=”连接子查询语句
5.2 多行子查询
SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查询表中与部门号为10的工作相同的员工的姓名、工作、薪水、部门号。因为返回结果有多行,所以用“IN”连接子查询语句。
in与exists的区别: exists() 后面的子查询被称做相关子查询,它是不返回列表的值的。只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对 应的结果。如果是ture则输出,反之则不输出。再根据主查询中的每一行去子查询里去查询。in()后面的子查询,是返回结果集的,换句话说执行次序和 exists()不一样。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去。符合要求的输出,反之则不输出。
5.3 使用ALL
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查询工资比部门号为30号的所有员工工资都高的员工的姓名、薪水和部门号。以上两个语句在功能上是一样的,但执行效率上,函数会高 得多。
5.4 使用ANY
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);查询工资比部门号为30号的任意一个员工工资高(只要比某一员工工资高即可)的员工的姓名、薪水和部门号。以上两个语句在功能上是 一样的,但执行效率上,函数会高得多。
5.5 多列子查询
SQL>SELECT * FROM emp WHERE (job, deptno)=(SELECT job, deptno FROM emp WHERE ename='SMITH');
5.6 在from子句中使用子查询
SQL>SELECT emp.deptno,emp.ename,emp.sal,t_avgsal.avgsal FROM emp,(SELECT emp.deptno,avg(emp.sal) avgsal FROM emp GROUP BY emp.deptno) t_avgsal where emp.deptno=t_avgsal.deptno AND emp.sal>t_avgsal.avgsal ORDER BY emp.deptno;
5.7 分页查询
数据库的每行数据都有一个对应的行号,称为rownum.
SQL>SELECT a2.* FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1 WHERE ROWNUM<=10) a2="" where="" rn="">=6;
指定查询列、查询结果排序等,都只需要修改最里层的子查询即可。
5.8 用查询结果创建新表
SQL>CREATE TABLE mytable (id,name,sal,job,deptno) AS SELECT empno,ename,sal,job,deptno FROM emp;
5.9 合并查询(union 并集, intersect 交集, union all 并集+交集, minus差集)
SQL>SELECT ename, sal, job FROM emp WHERE sal>2500 UNION(INTERSECT/UNION ALL/MINUS) SELECT ename, sal, job FROM emp WHERE job='MANAGER';
合并查询的执行效率远高于and,or等逻辑查询。
5.10 使用子查询插入数据
SQL>CREATE TABLE myEmp(empID number(4), name varchar2(20), sal number(6), job varchar2(10), dept number(2)); 先建一张空表;
SQL>INSERT INTO myEmp(empID, name, sal, job, dept) SELECT empno, ename, sal, job, deptno FROM emp WHERE deptno=10; 再将emp表中部门号为10的数据插入到新表myEmp中,实现数据的批量查询。
5.11 使用了查询更新表中的数据
SQL>UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';
简介
SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。由于它具有功能丰富、使用方便灵活、语言简洁易学等突出的优点,深受计算机工业界和计算机用户的欢迎。1980年10月,经美国国家标准局(ANSI)的数据库委员会X3H2批准,将SQL作为关系数据库语言的美国标准,同年公布了标准SQL,此后不久,国际标准化组织(ISO)也作出了同样的决定。
SQL从功能上可以分为3部分:数据定义、数据操纵和数据控制。
SQL的核心部分相当于关系代数,但又具有关系代数所没有的许多特点,如聚集、数据库更新等。它是一个综合的、通用的、功能极强的关系数据库语言。其特点是:
1、数据描述、操纵、控制等功能一体化。
2、两种使用方式,统一的语法结构。SQL有两种使用方式。一是联机交互使用,这种方式下的SQL实际上是作为自含型语言使用的。另一种方式是嵌入到某种高级程序设计语言(如C语言等)中去使用。前一种方式适合于非计算机专业人员使用,后一种方式适合于专业计算机人员使用。尽管使用方式不向,但所用语言的语法结构基本上是一致的。
3、高度非过程化。SQL是一种第四代语言(4GL),用户只需要提出“干什么”,无须具体指明“怎么干”,像存取路径选择和具体处理操作等均由系统自动完成。
4、语言简洁,易学易用。尽管SQL的'功能很强,但语言十分简洁,核心功能只用了9个动词。SQL的语法接近英语口语,所以,用户很容易学习和使用。
功能
SQL具有数据定义、数据操纵、和数据控制的功能。
1、SQL数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式又叫做视图(View),全局模式简称模式(Schema),内模式由系统根据数据库模式自动实现,一般无需用户过问。
2、SQL数据操纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。
3、SQL的数据控制功能:主要是对用户的访问权限加以控制,以保证系统的安全性。
语句结构
结构化查询语言包含6个部分:
1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
2、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
3、事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
4、数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
6、指针控制语言(CCL):它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
语言特点
SQL风格统一
SQL可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据、建立数据库、査询、更新、维护、数据库重构、数据库安全性控制等一系列操作,这就为数据库应用系统开发提供了良好的环境,在数据库投入运行后,还可根据需要随时逐步修改模式,且不影响数据库的运行,从而使系统具有良好的可扩充性。
高度非过程化
非关系数据模型的数据操纵语言是面向过程的语言,用其完成用户请求时,必须指定存取路径。而用SQL进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
面向集合的操作方式
SQL采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
以同一种语法结构提供两种使用方式
SQL既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL语句能够嵌入到高级语言(如C、C#、JAVA)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的操作方式,为用户提供了极大的灵活性与方便性。
语言简洁,易学易用
SQL功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL语言语法简单,接近英语口语,因此容易学习,也容易使用。
;⑶ SQL 数据库常用命令及语法举例
下面是一些常用的SQL语句,虽然很基础,可是却很值得收藏,对于初学者非常实用
⑷ Select查询命令的作用是什么
查询是SQL语言的核心,用于表达SQL查询的select查询命令是功能最强也是最为复杂的SQL语句,它的作用就是从数据库中检索数据,并将查询结果返回给用户。 Select语句由select子句(查询内容)、from子句(查询对象)、where子旬(查询条件)、order by子句(排序方式)、group by子句(分组方式)等组成。
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。
⑸ SQL查询指令运用
请试一试:
selecta.[商品ID],a.a+isnull(b.bQty,0)-isnull(c.cQty)as[数量],
b.bAll/b.bqtyas[进价],
c.cAll/c.bqtyas[售价]
from
(select[商品ID],sum(库存数量)asafrom[库存表]groupby[商品ID])a
leftjoin
(select[商品ID],sum(进货数量)asbQty,
sum(进货数量*进价)asbAll
from[进货表]groupby[商品ID])b
ona.[商品ID]=b.[商品ID]
(select[商品ID],sum(销售数量)ascQty,
sum(销售数量*售价)ascAll
from[销售表]groupby[商品ID])c
ona.[商品ID]=c.[商品ID]
如有疑问,及时沟通!
⑹ 第四十五章 SQL命令 FROM(一)
一个SELECT子句,指定要查询的一个或多个表。
FROM 子句指定在 SELECT 语句中查询数据的一个或多个表(或视图或子查询)。
如果没有查询表数据,则 FROM 子句是可选的,如下所述。
多个表被指定为逗号分隔的列表,或者由其他 JOIN 语法分隔的列表。
可以为每个表名提供一个别名。
在 SELECT 语句中为多个表指定字段名时使用表名别名。
如果 FROM 子句中指定了两个(或更多)表,可以通过指定 tablename 来指明需要哪个表的字段。
SELECT SELECT -item 子句中每个字段的字段名。
由于表名通常是长名称,因此短表名别名在此上下文中很有用( t-alias.fieldname )。
下面的示例展示了表名别名的使用:
AS关键字可以省略。
它是为了兼容性和清晰度而提供的。
table-ref 名称可以是限定的( schema.tablename )或非限定的( tablename )。
非限定表名(或视图名)的模式名使用模式搜索路径或系统范围的默认模式名提供:
当在 FROM 子句中指定多个表名时, SQL将对这些表执行连接操作。
执行的连接类型由每对表名之间的连接关键字短语或符号指定。
当两个表名用逗号分隔时,将执行交叉连接。
执行连接的顺序是由SQL查询优化器自动确定的,而不是基于查询中列出的表的顺序。
如果需要,可以通过指定查询优化选项来控制执行连接的顺序。
以下三个 SELECT 语句显示了两个单独表的行数,以及指定两个表的 SELECT 的行数。后者产生一个更大的表,即笛卡尔乘积,其中第一个表中的每一行都与第二个表中的每一行相匹配,这一操作称为交叉联接( Cross Join )。
从 Sample.Company、Sample.Vendor 中选择计数( * )
在大多数情况下,交叉连接的大量数据复制是不可取的,而某些其他类型的连接更可取。
如果在 SELECT 语句中指定 WHERE 子句,则执行交叉联接,然后 WHERE 子句谓词确定结果集。这等效于使用 ON 子句执行内联接。因此,以下两个示例返回相同的结果:
默认情况下, SQL查询优化器使用复杂而灵活的算法来优化涉及联接操作和/或多个索引的复杂查询的性能。在大多数情况下,这些默认值可提供最佳性能。但是,在极少数情况下,可能希望向查询优化器提供“提示”,指定查询优化的一个或多个方面。因此, SQL在 FROM 子句中提供了 OPTIMIZE-OPTION 关键字。可以按任意顺序指定多个优化关键字,并以空格分隔。
可以在简单的 SELECT 语句、 CREATE VIEW DEFINITION SELECT 语句或 FROM 子句的子查询 SELECT 语句中使用 OPTIMIZE-OPTION FROM 子句关键字。
此可选关键字指定提供任何好处的所有索引都用于查询联接顺序中的第一个表。只有在定义了多个索引时才应使用此关键字。优化器的默认设置是只使用优化器认为最有益的那些索引。默认情况下,这包括所有有效的相等索引和其他类型的选定索引。 %ALLINDEX 使用所有类型的所有可能有益的索引。测试所有索引的开销较大,但在某些情况下,它可能会提供比默认优化更好的性能。当使用多个范围条件索引和低效相等条件索引时,此选项特别有用。在这些情况下,查询优化器可能无法获得准确的索引选择性。 %ALLINDEX 可以与 %IGNOREINDEX 一起使用,以包括/排除特定索引。通常, %ALLINDEX 不应与 TOP 子句查询一起使用。
可以将 %STARTTABLE 与 %ALLINDEX 配合使用,以指定 %ALLINDEX 应用于哪个表。
可以使用 %NOINDEX 条件级别提示为特定条件的 %ALLINDEX 指定异常。
%NOINDEX 提示放置在不应该使用索引的每个查询选择条件的前面。
例如, WHERE %NOINDEX hiredate < ? 。
这在绝大多数数据没有被排除的情况下最常用。
对于小于( < )或大于( > )条件,使用%NOINDEX条件级别提示通常是有益的。
对于相等条件,使用 %NOINDEX 条件级提示没有任何好处。
对于连接条件, ON 子句连接支持 %NOINDEX 。
此可选关键字指定查询优化器应开始使用指定的表名执行联接。 tablename 为稍后在联接序列中指定的表命名。其余表的联接顺序留给查询优化器。此提示在功能上与 %STARTTABLE 相同,但为提供了以任意顺序指定联接表序列的灵活性。
tablename 必须是简单标识符,可以是表别名,也可以是非限定表名。不能使用限定表名( schema.table )。如果查询指定了表别名,则必须将该表别名用作表名。例如:
%FIRSTTABLE 和 %STARTTABLE 都允许指定用于联接操作的初始表。 %INORDER 允许指定用于联接操作的所有表的顺序。这三个关键词是相互排斥的;只指定一个和一个。如果不使用这些关键字,查询优化器将按照其认为最佳的顺序对表执行联接,而不管这些表的列出顺序如何。
不能使用 %FIRSTTABLE 或 %STARTTABLE 从左外部联接的右侧(或右外部联接的左侧)开始联接顺序。尝试这样做会导致 SQLCODE-34 错误:“优化器无法找到可用的联接顺序”。
此可选关键字指定编译器优化器检查所有可选联接序列以最大化访问性能。例如,在创建存储过程时,增加的编译时间可能值得提供更优化的访问。默认优化是,当 FROM 子句中有许多表时,不检查不太可能的连接序列。 %FULL 将覆盖此默认行为。
当 FROM 子句包含使用箭头语法访问的表时,可以同时指定 %INORDER 和 %FULL 关键字,这些表的顺序不受约束。
此可选关键字指定查询优化器忽略指定的索引或索引列表。(为了向后兼容,支持不推荐使用的同义词 %IGNOREINDICES 。)
在此关键字后面指定一个或多个索引名。多个索引名必须用逗号分隔。可以使用以下格式之一指定索引名:
方案名和表名是可选的。如果省略,则使用当前默认架构和指定为 from table-ref 的表名。星号( * )通配符指定指定表的所有索引名。可以按任意顺序指定索引名称。 SQL不会验证指定的索引名(或它们的模式名和表名);不存在或重复的索引名将被忽略。
通过使用此优化约束,可以使查询优化器不使用对特定查询不是最佳的索引。通过指定除一个索引名之外的所有索引名,实际上可以强制查询优化器使用剩余的索引。
还可以通过在条件前面加上 %noindex 关键字来忽略特定条件表达式的特定索引。
此可选关键字指定查询优化器按照表在 FROM 子句中列出的顺序执行联接。这最大限度地减少了编译时间。子查询的扁平化和索引使用不受影响。
%INORDER 不能与交叉联接或右外部联接一起使用。如果指定的表顺序与外部联接的要求不一致,则会生成 SQLCODE-34 错误:“Optimizer找不到可用的联接顺序。”为避免这种情况,建议在与外部联接一起使用 %INORDER 时,仅与ANSI样式的左外部联接或完全外部联接一起使用。
视图和表子查询按照它们在 FROM 子句中指定的顺序进行处理。
将此关键字与 %FIRSTTABLE 和 %STARTTABLE 进行比较,这两个关键字都只指定初始连接表,而不指定完整的连接顺序。
不能同时使用 %INORDER 和 %PARALLEL 优化;如果同时指定了这两个优化,则忽略 %PARALLEL 。
此可选关键字在量化的子查询(返回布尔值的子查询)的 FROM 子句中指定。它指定编译器优化器应抑制子查询展平。此优化选项禁用“扁平化”(默认),它通过将子查询有效地集成子查询到查询中来优化包含量化的子查询的查询:将子查询的表添加到查询的 FROM 子句中,并将子查询中的条件转换为查询的 WHERE 子句中的联接或限制。
以下是使用 %NOFLATTEN 的量化子查询的示例:
%INORDER 和 %STARTTABLE 优化隐式指定 %NOFLATTEN 。
此可选关键字在子查询的 FROM 子句中指定。它指定编译器优化器应该禁止子查询到视图的转换。此优化选项通过将子查询作为内联视图添加到查询的 FROM 子句来禁用对包含子查询的查询的优化;子查询与查询字段的比较将作为联接移动到查询的 WHERE 子句。
此可选关键字在流式子查询的 FROM 子句中指定-返回行的结果集的子查询,即封闭查询的 FROM 子句中的子查询。它指定编译器优化器应该禁止将子查询(或视图)合并到包含查询中。
在下面的示例中,查询优化器通常会通过对子查询执行 Sample.Person 的笛卡尔乘积联接来“减少”该查询。 %NOREDUCE 优化选项可防止出现这种情况。 IRIS改为在 GNAME 上构建临时索引,并在此临时索引上执行联接:
此可选关键字在量化的子查询(返回布尔值的子查询)的 FROM 子句中指定。它指定编译器优化器应禁止集值子查询优化( SVSO )。
在大多数情况下,集值子查询优化可以提高 [NOT] EXISTS 和 [NOT] In 子查询的性能,特别是对于只有一个可分离关联条件的子查询。
它通过用满足条件的数据值填充临时索引来实现这一点。
IRIS不是重复执行子查询,而是在临时索引中查找这些值。
例如, SVSO 优化了 NOT EXISTS (SELECT P.num FROM Procts P WHERE S.num=P.num AND P.color='Pink') ,创建临时索引。
SVSO 优化了 ALL 或 ANY 关键字与相对操作符( > , >= , < ,或 <= )和子查询的子查询,如 … WHERE S.num > ALL (SELECT P.num…)
它通过将子查询表达式 sqbExpr (在本例中为 P.num )替换为 MIN(sqbExpr) 或 MAX(sqbExpr) 来实现这一点。
当 sqbExpr 上有索引时,它支持快速计算。
%INORDER 和 %STARTTABLE 优化不禁止集值子查询优化。
当使用带有 ORDER BY 子句的 TOP 子句时指定此可选关键字。
默认情况下, TOP 和 ORDER By 优化到第一行的最快时间。
相反,指定 %NOTOPOPT (没有 TOP 优化)将优化查询,以最快地检索完整的结果集。
此可选关键字在查询或子查询的 FROM 子句中指定。
它禁用为多个 OR 条件和针对 UNION 查询表达式的子查询提供的自动优化。
这些自动优化将多个 OR 条件转换为 UNION 子查询,或将 UNION 子查询转换为 OR 条件。
这些 UNION/OR 转换允许 EXISTS 和其他低级谓词迁移到顶级条件,以便IRIS查询优化器索引使用它们。
这些默认转换在大多数情况下都是可取的。
然而,在某些情况下,这些 UNION/OR 转换会带来很大的开销负担。
%NOUNIONOROPT 对与此 FROM 子句关联的 WHERE 子句中的所有条件禁用这些自动 UNION/OR 转换。
因此,在一个复杂的查询中,可以对一个子查询禁用这些自动UNION/OR优化,同时在其他子查询中允许它们。
UNION %PARALLEL 关键字禁用自动 UNION-to- or 优化。
%INORDER 和 %STARTTABLE 优化抑制了 OR-to-UNION 优化。
%INORDER 和 %STARTTABLE 优化不抑制 UNION-to-OR 优化。
⑺ 一般来说,用SQL进行查询时,命令里要包含哪些内容
select,from,where,orderby,等等
你可以使用 WHERE 语句来包含任何条件。
你可以使用 LIMIT 属性来设定返回的记录数。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0
具体信息:
⑻ 用sql命令查询数据
select * frm spec
⑼ 简单明了,大学生都应该知道的SQL
SQL(结构化查询语言)是用于访问和操作数据库中的数据的标准数据库编程语言。
SQL是关系数据库系统的标准语言。所有关系数据库管理系统(RDMS),如MySQL、MS Access、Oracle、Sybase、Informix、Postgres和SQL Server都使用SQL作为它们的标准数据库语言。
为了处理数据库和数据库相关的编程,程序员需要有一些介质,或者可以说接口来详细说明一组命令或代码来处理数据库或访问数据库的数据。在本章中,将简要介绍在学习SQL的过程中您将学习的术语。
SQL为结构化查询语言提供了独特的学习和数据库处理技术,并将帮助您更好地控制SQL查询并有效处理这些代码。由于SQL帮助您包括数据库创建,数据库或表删除,获取行数据和修改这些数据等,并行SQL使得事情自动和平滑,最终用户可以轻松访问和处理该应用程序的数据。
虽然 SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。
然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。
要创建一个显示数据库中数据的网站,您需要:
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
代码示例:
每个表都被分解成称为字段的更小的实体。Customers表中的字段由CustomerID,CustomerName,ContactName,Address,City,PostalCode和Country组成。字段是表中的一列,用于维护表中每条记录的特定信息。
记录(也称为行)是表中存在的每个单独条目。例如,在上面的Customers表中有91条记录。记录是表中的横向实体。
列是表中的垂直实体,其包含与表中的特定字段相关联的所有信息。
当您对任何RDBMS执行SQL命令时,系统将确定执行请求的最佳方式,并由SQL引擎确定如何解释该任务。
在此过程中包含了各种组件。
典型的查询引擎处理所有非SQL查询,但SQL查询引擎不会处理逻辑文件。
与关系数据库交互的标准SQL命令是创建、选择、插入、更新、删除和删除,简单分为以下几组:
数据定义语言用于改变数据库结构,包括创建、更改和删除数据库对象。用于操纵表结构的数据定义语言命令有:
数据操纵语言用于检索、插入和修改数据,数据操纵语言是最常见的SQL命令。
数据操纵语言命令包括:
数据控制语言为用户提供权限控制命令。
用于权限控制的命令有:
使用SQL格式化工具可以比较直观地看到您想要的操作
⑽ SQL中怎样用查询命令,
在查询分析器select * from 表名(table) where 姓名="(某人姓名)"