基本语句:
start with 条件1(初始查询的条件) connect by (prior) 字段2 =(prior) 字段3 --递归查询
函数使用说明:首先只看start with 条件1(初始查询的条件) 执行后会的到结果,得到的结果后再看后面的语句,取出prior靠近的字段,将该字段的值赋予不靠近的字段,以此为条件再次进行查询,循环直至查询没有结果.
A B C
条件1-》执行,列出所有结果进行遍历
看connect 后面的语句,prior B = C ;
此时条件1再也没有意义,循环取B 的值赋予C 即C =B 执行此条件直至没有值
/*dorp colunm*/
语法:ALTER TABLE 表名 DROP COLUMN 要删除的字段 验证财务转换的正确性,查询以下两个表是否有数据
/*表连接inner jion*/
语法:left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录,右表中没有对应的列的话就显示为空 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录,左表中没有对应的列的话就显示为空 inner join(等值连接) 只返回两个表中联结字段相等的行 select 要展示的列 from A inner join B on A.aID = B.bID
/*select*/
语法:SELECT 栏位名 FROM 表格名 将资料从数据库中的表格内选出
/*DISTINCT*/
语法:SELECT DISTINCT 栏位名 FROM 表格名 查询表格/栏位内有哪些不同的值,而每个值出现的次数并不重要
/*where*/
语法: SELECT 栏位名 FROM 表格名 WHERE 条件选择性地抓取资料where 备注:SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
/*AND|OR*/
语法:SELECT 栏位名 FROM 表格名 WHERE 简单条件 AND|OR 简单条件复杂条件是由二或多个简单条件透过AND 或是 OR 的连接而成and or
/*in*/
语法: SELECT 栏位名 FROM 表格名 WHERE 栏位名 IN ('值一', '值二', ...)依照一或数个不连续 (discrete) 的值的限制之内抓出资料库中的值。
/*BETWEEN*/
语法:SELECT 栏位名 FROM 表格名 WHERE 栏位名 ( NOT)BETWEEN '值一' AND '值二' 可以运用一个范围 (range) 内抓出资料库中的值
/*LIKE*/
语法:SELECT 栏位名 FROM 表格名 WHERE 栏位名 LIKE {'模式'} 能让我们依据一个模式(pattern) 来找出我们要的资料 % 替代一个或多个字符 _ 仅替代一个字符 [charlist] 字符列中的任何单一字符 [^字符]或者[!字符] 不在字符列中的任何单一字符
/*ORDER BY*/
语法: SELECT 栏位名1,栏位二 FROM 表格名 WHERE 条件 ORDER BY 栏位一 ASC/ DESC, 栏位二 ASC, DESC 对抓出的资料排列。 『备注:ASC从小到大;DESC从大到小』
/*函数*/
语法: SELECT 函数名(栏位名) FROM 表格名对数字做一些运算
『备注:函数名:AVG (平均);COUNT (计数);MAX (最大值);MIN (最小值);SUM (总合);UCASE (函数把字段的值转换为大写);LCASE (函数把字段的值转换为小写)。SELECT MID(column_name,start[,length]) FROM table_name提取栏位中的某一些值』UCASE() 语法: SELECT UCASE(column_name) FROM table_name 函数UCASE 函数把字段的值转换为大写。
/*GROUP BY*/
语法:SELECT "栏位1", SUM("栏位2") FROM "表格名"GROUP BY "栏位1" 根据栏位1来分类
/*HAVING*/
语法:SELECT "栏位1", SUM("栏位2")FROM "表格名"GROUP BY "栏位1" HAVING (函数条件)对函数的产生的值来设定条件,此处为SUM("栏位2),即通过GROUP BY "栏位1"将栏位一相同的和起来,SUM("栏位2")的值为合起来的值,HAVING (函数条件)筛选计算得到的值
/* 别名*/
语法:SELECT "表格别名"."栏位1" "栏位别名"FROM "表格名" "表格别名"
/*TRIM*/
语法:TRIM([[位置] [要移除的字符串] FROM ] 字符串)[位置] 的可能值为 LEADING (起头), TRAILING (结尾), or BOTH (起头及结尾)。 这个函数将把 [要移除的字符串] 从字符串的起 头、结尾,或是起头及结尾移除。如果我们没有列出 [要移除的字符串] 是什么的话,那空 白就会被移除。 LTRIM(字符串) 将所有字符串起头的空白移除。 RTRIM(字符串) 将所有字符串结尾的空白移除。TRIM 函数是用来移除掉一个字符串中的字头或字尾。最常见的用途是移除字首 或字尾的空白。 备注:这个函数在不同的数据库中有不同的名称; MySQL: TRIM(), RTRIM(), LTRIM() Oracle: RTRIM(), LTRIM() SQL Server: RTRIM(), LTRIM()
/*CONCAT*/
语法: CONCAT(字符串1, 字符串2, 字符串3, ...) 将字符串1、字符串2、字符串3,等字符串连 在一起。请注意,Oracle 的CONCAT()只允许两个参数;换言之,一次只能将两个字符串串 连起来。不过,在Oracle 中,我们可以用 || 来一次串连多个字符串CONCATENATE:将由不同栏位获得的资料串连在一起。 备注:每一种数据库都有提供方法来达到这个目的:MySQL: CONCAT() Oracle: CONCAT(), || SQL Server: +
/*SUBSTR*/
语法: MySQL: SUBSTR(), SUBSTRING() Oracle: SUBSTR() SQL Server: SUBSTRING()substring 函数是用来抓出一个栏位资料中的其中一部分 最常用到的方式如下 (在这里我们用SUBSTR()为例): SUBSTR(str,pos): 由<str>中,选出所有从第<pos>位置开始的字符。请注意,这个语法不适 用于SQL Server 上。 SUBSTR(str,pos,len): 由<str>中的第<pos>位置开始,选出接下去的<len>个字符
/*建表CREATE*/
语法:CREATE TABLE "表格名"("栏位 1" "栏位 1 资料种类","栏位 2" "栏位 2 资料种类",... ) 备注:NOT NULL;UNIQUE(唯一):栏位名 UNIQUE:;CHECK(条件)(栏位中的所有资料均符合条件要求):CHECK(栏位名><=某值); 主键 (Primary Key):栏位名 Primary Key ;外来键 (Foreign Key)与references合用•NOT NULL ;DEFAULT :默认值
/*新建视图*/
语法: CREATE VIEW "VIEW_NAME" AS "SQL 语句"
/*新建索引索引 (Index)*/
语法:CREATE INDEX "INDEX_NAME" ON "TABLE_NAME" (COLUMN_NAME)新建索引索引 (Index) 可以帮助我们从表格中快速地找到需要的资料
/*ALTER*/
语法:ALTER TABLE "table_name"[改变方式]改变表格结构,[改变方式] :加一个栏位: ADD "栏位 1" "栏位 1 资料种类";删去一个栏位: DROP "栏位 1";改变栏位名称: CHANGE "原本栏位名" "新栏位名" "新栏位名资料种类";改变栏位的资料种类: MODIFY "栏位 1" "新资料种类";
/* 删除表格*/
语法:DROP TABLE "表格名"
/*清除表格内容*/
语法: TRUNCATE TABLE "表格名"
/*给表格输入资料*/
语法: INSERT INTO "表格名" ("栏位1", "栏位2", ...)VALUES ("值1", "值2", ...)一次一笔 INSERT INTO "表格1" ("栏位1", "栏位2", ...)SELECT "栏位3", "栏位4", ...FROM "表格2"数据源来自另一个表格
/*修改表中资料*/
语法: UPDATE "表格"SET "栏位1" = [值1], "栏位2" = [值2]WHERE {条件} /*Update 语句用于修改表中的数据*/ UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
/*直接由数据库中去除一些资料。*/
语法:DELETE FROM "表格名" WHERE {条件}
/*UNION*/
语法: [SQL 语句 1]UNION[SQL 语句 2]查询出两个表格之中有相同栏位名的内容并且内容不可以重复
/*UNION ALL*/
语法: [SQL 语句 1] UNION ALL[SQL 语句 2]查询出两个表格之中有相同栏位名的内容可以重复
/*INTERSECT*/
语法:[SQL 语句 1]INTERSECT[SQL 语句 2]UNION 基本上是一个 OR (如果这个值存在于第一句或是第二句,它就会被选 出),而 INTERSECT 则比较像 AND (这个值要存在于第一句和第二句才会被选出)。 UNION 是联集,而 INTERSECT 是交集 MINUSSQL [SQL 语句 1]MINUSSQL 语句 2]先找出第一个 SQL 语句所产生的结果,然后 看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而 不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃,即为同时又或者同时没有,但是不同的值只会列一次
/*比较运算素*/
语法: SELECT "栏位1"FROM "表格"WHERE "栏位2" [比较运算素](SELECT "栏位1"FROM "表格"WHERE [条件]) [比较运算素] 可以是相等的运算素,例如 =, >, <, >=, <=. 这也可以是一个对文字的运算素, 例如 "LIKE"。
/*EXISTS*/
语法: SELECT "栏位1"FROM "表格1"WHERE EXISTS(SELECT *FROM "表格2"WHERE [条件])EXISTS 是用来测试内查询有没有产生任何结果。如果有的话,系统就会执行外 查询中的 SQL。若是没有的话,那整个 SQL 语句就不会产生任何结果。
/*CASE*/
语法:SELECT CASE ("栏位名") WHEN "条件1" THEN "结果1" WHEN "条件2" THEN "结果2" ... [ELSE "结果N"] END FROM "表格名" "条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。
/*COALESCE*/
语法: SELECT COALESCE(NULL,NULL,3,4,5) FROM dual返回表达式中第一个非空表达式 其返回结果为:3
/*TOP*/ 子句:
语法:TOP 子句用于规定要返回的记录的数目。对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 SELECT TOP 数字|百分比 column_name(s)FROM table_name SQL Server SELECT column_name(s) FROM table_name LIMIT 数字 MySQL SELECT column_name(s) FROM table_name WHERE ROWNUM <= 数字 Oracle
/*select into from*/
语法:SELECT 列名 INTO 新表名 [IN 数据库名] FROM 旧表名 把希望的列插入新表
/*CREATE DATABASE*/
语法:CREATE DATABASE 数据库名 用于创建数据库。
/*substr*/
语法: substr('字符串', 起始位置, 长度) 取得字符串中指定起始位置和长度的字符串 /*NULLIF*/ NULLIF(value1, value2) 当且仅当value1和value2相等时,NULLIF才返回NULL。否则它返回value1。
/*GREATEST/ LEAST*/
语法: GREATEST(value1, value2,value3......valuen) LEAST(value1, value2,value3......valuen))GREATEST和LEAST函数从一个任意的数字表达式列表里选取最大或者最小的数值。列表中的NULL数值将被忽略。 只有所有表达式的结果都是NULL的时候,结果才会是NULL。
/*NVL*/
语法:NVL( string1, replace_with)。它的功能是如果string1为NULL,则NVL函数返回replace_with的值, 否则返回string1的值,如果两个参数都为NULL ,则返回NULL
扩展用户的表空间:
语法: alter user 用户名 unlimited on 表空间名
给用户赋予权限
语法: grant all privileges to 用户名 新建表空间 create tablespace 表空间名 datafile '服务器上的路径表空间名' size 大小;
示例:
/*建表*/ CREATE TABLE STUDENT ( NAME CHAR(10), SALES CHAR(10) CHECK(SALES>0) ) CREATE TABLE GEOGRAPHY ( REGION_NAME CHAR(10), STORE_NAME CHAR(10) )
CREATE TABLE STORE_INFORMATION ( STORE_NAME CHAR(10), SALES CHAR(10), shijian char(20) )
ALTER TABLE GEOGRAPHY MODIFY STORE_NAME CHAR(20)
ALTER TABLE STUDENT ADD SEX CHAR(20) ALTER TABLE STUDENT CHANGE SEX SEXY CHAR(10)
/*ALTER TABLE STUDENT DROP SEX */ CREATE VIEW V_GEOGRAPHY AS SELECT STORE_NAME FROM GEOGRAPHY
CREATE INDEX IDX_STUDENT_SALES ON STUDENT (SALES)
/*UPDATE STUDENT SEI SALES = 100 WHERE NAME = 'Sophia'*/
/*插数据*/
INSERT INTO STUDENT (NAME,SALES) VALUES('john','10');
INSERT INTO STUDENT (NAME,SALES) VALUES('Jennifer','15');
INSERT INTO STUDENT (NAME,SALES) VALUES('Stella','20');
INSERT INTO STUDENT (NAME,SALES) VALUES('Sophia','40');
INSERT INTO STUDENT (NAME,SALES) VALUES('Greg','50');
INSERT INTO STUDENT (NAME,SALES) VALUES('Jeff','20');
/*删除数据*/
DELETE FROM STUDENT WHERE NAME = 'john' INSERT INTO STORE_INFORMATION (store_NAME,SALES,shijian) VALUES('Los Angeles','$1500','Jan-05-1999');
INSERT INTO STORE_INFORMATION (store_NAME,SALES,shijian) VALUES('San Diego','$250','Jan-07-1999');
INSERT INTO STORE_INFORMATION (store_NAME,SALES,shijian) VALUES('Los Angeles','$300','Jan-08-1999');
INSERT INTO STORE_INFORMATION (store_NAME,SALES,shijian) VALUES('Boston','$700','Jan-08-1999');
INSERT INTO GEOGRAPHY (REGION_NAME,STORE_NAME) VALUES('East','Boston');
INSERT INTO GEOGRAPHY (REGION_NAME,STORE_NAME) VALUES('East','New York');
INSERT INTO GEOGRAPHY (REGION_NAME,STORE_NAME) VALUES('West','Los Angeles');
INSERT INTO GEOGRAPHY (REGION_NAME,STORE_NAME) VALUES('West','San Diego');
/*操作语句*/
SELECT store_NAME FROM STORE_INFORMATION
SELECT DISTINCT store_NAME FROM STORE_INFORMATION
SELECT a1.store_name, (a1.sales) a2 FROM STORE_INFORMATION A1 WHERE A1.SALES > 1000
SELECT A1.STORE_NAME ,SUM(A1.SALES) FROM STORE_INFORMATION a1 WHERE A1.SALES > 1000 OR (A1.SALES > 250 AND A1.SALES< 725) GROUP BY A1.STORE_NAME
SELECT a1.store_name, a1.sales FROM STORE_INFORMATION A1 WHERE A1.STORE_NAME IN ('Los Angeles','San Diego')
SELECT a1.store_name, a1.sales ,A1.SHIJIAN FROM STORE_INFORMATION A1 WHERE A1.SHIJIAN BETWEEN 'Jan-07-1999' AND 'Jan-08-1999'
SELECT * FROM STORE_INFORMATION A1 WHERE A1.STORE_NAME LIKE '%os%'
/*SELECT * FROM STORE_INFORMATION ORDER BY SALES DESC*/
SELECT * FROM STUDENT ORDER BY SALES DESC ,NAME DESC SELECT SUM(A1.SALES) ZONGHE FROM STORE_INFORMATION A1
SELECT COUNT(A1.STORE_NAME) JISHU FROM STORE_INFORMATION A1 WHERE A1.STORE_NAME IS NULL/IS NOT NULL SELECT COUNT(DISTINCT A1.STORE_NAME) JISHU FROM STORE_INFORMATION A1
SELECT SUM(A1.SALES) ,A1.STORE_NAME FROM STORE_INFORMATION A1 GROUP BY A1.STORE_NAME SELECT A1.STORE_NAME , SUM(A1.SALES) FROM STORE_INFORMATION A1 GROUP BY STORE_NAME HAVING SUM(A1.SALES) > 1400
SELECT A2.REGION_NAME ,SUM(A1.SALES) FROM STORE_INFORMATION A1 ,GEOGRAPHY A2 WHERE A1.STORE_NAME = A2.STORE_NAME GROUP BY A2.REGION_NAME
SELECT A2.STORE_NAME,SUM(A1.SALES) FROM STORE_INFORMATION A1 ,GEOGRAPHY A2 WHERE A2.STORE_NAME = A1.STORE_NAME(+) GROUP BY A2.STORE_NAME CREATE VIEW V_ZONGJI2 AS
SELECT A2.STORE_NAME,SUM(A1.SALES)a FROM STORE_INFORMATION A1 ,GEOGRAPHY A2 WHERE A2.STORE_NAME = A1.STORE_NAME(+) GROUP BY A2.STORE_NAME SELECT B1.REGION_NAME ||''||B1.STORE_NAME FROM GEOGRAPHY B1 WHERE B1.STORE_NAME = 'Boston' select * from V_ZONGJI2 drop view V_ZONGJI2
SELECT a1.name,a1.sales,sum(a2.sales) FROM STUDENT a1, STUDENT a2 WHERE a1.sales< a2.sales OR (A1.NAME = A2.NAME AND A1.SALES = A2.SALES) GROUP BY A1.NAME,A1.SALES ORDER BY A1.SALES DESC,A1.NAME DESC select sum(a1.sales) from STORE_INFORMATION A1 inner join GEOGRAPHY A2 on a2.REGION_NAME = 'West' and a1.store_name = a2.store_name
SELECT NAME ,SALES , RANK1 FROM (SELECT a1.name,a1.sales,COUNT(a1.sales)RANK1 FROM STUDENT a1, STUDENT a2 WHERE a1.sales< a2.sales OR (A1.NAME = A2.NAME AND A1.SALES = A2.SALES) GROUP BY A1.NAME,A1.SALES ORDER BY A1.SALES DESC,A1.NAME DESC)A3 WHERE RANK1 =( SELECT CEIL(COUNT(SALES)/2) FROM STUDENT)