SQL基本语句以及示例

基本语句:

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)

原文地址:https://www.cnblogs.com/shanshanliu/p/6186775.html