@demonly
2017-02-03T14:07:06.000000Z
字数 3767
阅读 1288
SQL
SELECT [ * | ALL | DISTINCT COLUMN1 , COLUMN2 ]
FROM TABLE1 [, TABLE2 ];
SELECT 命令可以对数据库进行查询,关键字 SELECT 后面是字段列表,它们是查询输出的组成部分,默认是输出所有字段。
以空格对于每一个字段都可以设置别名,以下例子中将第二个 PROD_DESC 的别名设置为了 PRODUCT。
SELECT PROD_DESC,
PROD_DESC PRODUCT
FROM PRODUCTS_TBL;
from table1 [ ,table2 ]
FROM子句指定要从哪些表里查询数据。
where [ condition1 | expression1 ]
[ and|OR condition2 | expression2 ]
WHERE 子句限定了返回的记录必须符合的条件。
ORDER BY colum1|integer [ ASC|DESC ]
ORDER BY 子句可以以用户指定的列表格式对查询结果进行排列。ASC 为按照字母顺序显示,DESC 为反字母顺序显示。
WHERE SALARY BETWEEN '20000' AND '30000'
WHERE SALARY IN ('20000', '30000', '40000')
%
表示任意数量的任意字符,_
表示一个任意字符
WHERE SALARY LIKE '%200%'
SELECT COST
FROM PEODUCTS_TBL
WHERE EXISTS ( SELECT COST
FROM PRODUCTS_TBL
WHERE COST > 100 );
SELECT *
FROM PRODUCTS_TBL
WHERE COST > ALL ( SELECT COST
FROME PRODUCTS_TBL
WHERE COST < 10 );
NOT 可以颠倒逻辑操作符的含义(IS NULL 求反为 IS NOT NULL)
在 SELECT 语句中可以用函数作为 SELECT 的参数,在一次查询中可以使用多个参数。
COUNT ( [ * | DISTINCT | ALL ] COLUMN NAME)
在其他汇总函数里面同样可以使用 DISTINCT 命令,但是大多情况下都没有实际的意义。
SUM ( COLUMN NAME)
AVG ( COLUMN NAME)
MAX (COLUMN NAME)
GROUP BY COLUMN1, COLUMN2
GROUP BY 子句将相同的数据(后面列出的每一个列都必须相同)划分为组。GROUP 子句在 WHERE 子句之后,在 ORDER BY 子句之前。
GROUP BY 子句中的字段不必与 SELECT 子句里的字段次序相同,但是 SELECT 子句中的字段名称如果符合条件就必须出现在 GROUP BY 子句中(分组函数中的字段除外)。
以下代码先根据 PROD_DESC 字段进行分组,然后在再对每个分组执行汇总函数。
SELECT PROD_DESC, SUM(COST)
FROM PRODUCTS_TBL
GROUP BY PROD_DESC
ORDER BY 2
GROUP BY ROLLUP(COLUMN1,COLUMN2)
ROLLUP 语句的工作方式是,完成基本的分组数据汇总之后,去掉字段列表中的最后一个字段,再次进行统计,被去掉的字段会被填充为 NULL,最后再对全表进行一次统计,所有字段位置均使用 NULL。字段列表以外的字段将不受影响。
GROUP BY CUBE(COLUMN1,COLUMN2)
CUBE 语句与 ROLLUP 语句很类似,但是 CUBE 语句会针对字段列表中的字段的所有组合进行统计汇总。
HAVING CONDITIONS
HAVING 语句告诉 ORDER BY 子句在输出里需要包含哪些分组。HAVING 的位置是在 GROUP BY 子句之后,在 ORDER BY 子句之前。
字符函数用于以不同于储存方式的格式来表示字符串。
SQL Server
COLUMN_NAME + COLUMN_NAME
MySQL
SELECT CONCAT(COLUMN_NAME, COLUMN_NAME)
Oracle
COLUMN_NAME || COLUMN_NAME
TRANSLATE(CHARACTER SET, VALUE1, VALUE2)
以下代码把结果中的'I'全部替换成'A','N'全部替换成'B'。
SELECT TRANSLATE(CITY, 'IND', 'ABC')
FROM EMPLOYEE_TBL
REPLACE('VALUE', 'VALUE', 'VALUE')
以下代码将结果中的'T'全部换成'B'
SELECT CITY, REPLACE(CITY, 'I', 'Z')
UPPER(character string)
UPPER(character string)
SUBSTR(COLUMN NAME, STARTING POSITION, LENGTH)
INSTR(COLUMN NAME, 'SET',
[ START POSITION ,[ OCCURRENCE ] ])
下面的 SQL 语句表示查找个 STATE 中字母 I 第一次出现的位置。
INSTR(STATE, 'I', 1, 1)
在 SQL Server 中要使用 CHARINDEX 函数
CHARINDEX('SET', COLUMN NAME, START POSITION)
LTRIM(CHARACTER STRING [ ,'set' ])
LENGTH(CHARACTER STRING)
在 SQL Server 中为 LEN 函数。
- COALESCE 函数用指定值替代 NULL 值,它接受一个数据集,依次检查其中每一个值,直到发现一个非 NULL 值,如果没有发现非 NULL 值,则返回一个 NULL 值。
- LPAD 函数用于在字符串左侧添加字符或者空格。
LPAD(COLUMN NAME, LENGTH, CHARACTER)
标准的储存时间的数据类型有三种。
在不同的数据库中都有不同的实现。
SQL Server 中使用 GETDATE 函数获取日期。
My SQL 中使用 NOW 函数获取当前日期和时间。
Oracle 中使用 SYSDATE 函数获取日期和时间。
SELECT SYSDATE FROM DUAL
SQL Server
DATEADD(unit, expr, date)
Oracle
ADD_MONTHS(date, expr)
MySQL
DATE_ADD(date, INTERVAL expr unit)
除了日期函数以外这些数据库还都支持直接与天数的数值相加。
SQL Server
DATENAME(format, date)
Oracel
TO_CHAR(date, format)
其中的 format 字符串都是使用日期元素组成的,不同的实现里有不同的日期元素。
MySQL
STR_TO_DATE(str, format)