一:sql基础
1.查询不重复的数据关键字
DISTINCT
2.列取别名可以直接用As或者
price(sale/2)或者直接取:WHOLESALE * 0.9 NEWPRICE
3.模糊查询的关键字:like,通配符%,在前表示以什么结尾,在后表示以什么开头。某一确定的位置上有字符的数据,可用通配符_
SELECT * FROM PARTS WHERE LOCATION LIKE “%BACK%”;
SELECT * FROM FRIENDS WHERE PHONE LIKE "555-6_6_";
SELECT * FROM FRIENDS WHERE FIRSTNAME LIKE " _L%";//联合使用查询第二个字符为L的
4.sql判断非空,用is,=更多作比较
5.union连接两表时,会直接返回不重复的字段,也就是去重,union all则会返回重复的字段。INTERSECT 相交 INTERSECT 返回两个表中共有的行。MINUS 返回的记录是存在于第一个表中但不存在于第二个表中的记录。查询格式都是:
select 字段 from A union/union all/INTERSECT/minus select 字段 from B;
6.in关键字,某列制定一个范围寻找,如:
SELECT * FROM FRIENDS WHERE AREACODE IN (100,381,204);
二:sql的函数
1.汇总函数:count、sum、AVG、MAX,MIN等,count是统计数量的函数。sum,AVG,MAX,MIN只处理数字,可以同时使用,而且都可以统计几个不同的行,这些查询都不能在where中使用,这个时候就可以子查询。举例如下:
SELECT COUNT(column1), SUM(column2) AVG(column1), Max(column2) FROM your_table;
2.时间函数:
ADD_MONTHS:在指定的时间列进行增加月的函数,使用格式ADD_MONTHS(字段,数字),LAST_DAY:在指定的时间列推算出当月或者年最后一天。
MONTHS_BETWEEN:计算两个列的月数相差,类似于做减法,所以可能有负数,这样正好可以判断月数的顺序。用法:MONTHS_BETWEEN(列1,列2)
NEW_TIME:可以调节时间字段的时区。用法:NEW_TIME (“ENDDATE”," EDT"," PDT")
3.数学函数:
ABM:取整函数, COS SIN TAN :函数可以返回给定参数的三角函数值,MOD:相除后的余数
4.字符串函数:
CONCAT将两个字符串连接起来,INITCAP首字母大写,LOWER 将参数转换为全部小写字母而 UPPER 则把参数全部转换成大写字 母,LENGTH将返回指定字符串的长度。
5.转换函数:
TO_CHAR:该函数的功能是将一个数字转换为字符型。
TO_NUMBER :该函数与 TO_CHAR 函数相对应 显而易见 它是将一个字符串型数字转换为数值型。
三:子句
where:where就是做条件限制的,后面不能跟汇总函数做限制。
Starting with:作用与like相同,用法:SELECT PAYEE ,AMOUNT ,REMARKS FROM CHECKS WHERE PAYEE STARTING WITH('Ca');
order by子句:排序子句,根据字段的类型,如果是数字则按大小,字符串则是字母顺序,汉字则是按照拼音。
group by:group by多用于多对多,如:SELECT PAYEE ,SUM (AMOUNT )FROM CHECKS GROUP BY PAYEE,这样就查出了每个payee花的总钱数。汇总函数,后面就经常用group by。
having子句:having子句也是条件限制,总是跟group by,能够跟汇总函数,经典的例子,求平均工资小于多少的Sql就不能用where,用having。如:SELECT TEAM ,AVG (SALARY) FROM ORGCHART GROUP BY TEAM HAVING AVG (SALARY)>38000;
四:连表
1.左外连接和右外连接,左外连接会保留左表的所有数据,以及右表匹配的数据,右外连接反之。
左外连接结果为:Aid:1,1.2,2,2,2,3,3,4,5
Bid:1,1,2,2,2,2,3,3,null,null,左外连接是以左表数据为主加上匹配的,右表匹配符合的保留,不匹配的为null
右外连接:Aid:1,1,2,2,2,2,3,3
Bid: 1,1,2,2,2,2,3,3右外连接以右表数据为主,再加上匹配的,左表匹配的保留,不匹配的为null,左表明显小于右表,所以没有为null的。
五:子查询
子查询可以让你把查询的结果与另一个查询绑定在一起 通用的语法格式 如下: SELECT * FROM TABLE1 WHERE TABLE1.SOMECOLUMN = (SELECT SOMEOTHERCOLUMN FROM TABLE2 WHERE SOMEOTHERCOLUMN = SOMEVALUE)
嵌套就是将一个子查询嵌入到另一个子查询中去 例如 Select * FROM SOMETHING WHERE ( SUBQUERY(SUBQUERY(SUBQUERY)));
六:视图索引
1.视图:视图像是java中的封装,只是它是一个虚拟表,创建一个视图,指定视图代表的Sql语句,后面可以直接调用视图简化代码,提高复用性。简单的例子:
CREATE VIEW DEBTS AS SELECT * FROM BILLS;//创建
SELECT * FROM DEBTS;//使用
2.索引:索引跟group by接近,但是性能更加高,为表的一个列,创建index后,每次查询该表都会按照该列,进行排序。对于小表索引不会提升性能,对于大表才是提升。索引会占空间,空间换时间,提升性能。举个例子:create index Cname on class(C_name);